48 lines
1.8 KiB
Diff
48 lines
1.8 KiB
Diff
--- 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
|