--- a/src/text-editor-component.coffee +++ b/src/text-editor-component.coffee @@ -110,6 +110,7 @@ class TextEditorComponent @updateSync() @checkForVisibilityChange() @initialized = true + @checkpointForIME = null destroy: -> @mounted = false @@ -305,19 +306,20 @@ class TextEditorComponent # User escape to cancel # 4. compositionend fired # OR User chooses a completion - # 4. compositionend fired - # 5. textInput fired; event.data == the completion string + # 4. textInput fired; event.data == the completion string + # 5. compositionend fired - checkpoint = null @domNode.addEventListener 'compositionstart', => if @openedAccentedCharacterMenu @editor.selectLeft() @openedAccentedCharacterMenu = false - checkpoint = @editor.createCheckpoint() + @checkpointForIME = @editor.createCheckpoint() @domNode.addEventListener 'compositionupdate', (event) => @editor.insertText(event.data, select: true) @domNode.addEventListener 'compositionend', (event) => - @editor.revertToCheckpoint(checkpoint) + if @checkpointForIME + @editor.revertToCheckpoint(@checkpointForIME) + @checkpointForIME = null event.target.value = '' # Listen for selection changes and store the currently selected text @@ -354,6 +356,10 @@ class TextEditorComponent onTextInput: (event) => event.stopPropagation() + if @checkpointForIME + @editor.revertToCheckpoint(@checkpointForIME) + @checkpointForIME = null + # WARNING: If we call preventDefault on the input of a space character, # then the browser interprets the spacebar keypress as a page-down command, # causing spaces to scroll elements containing editors. This is impossible