blob: db5681d4fd5ae35a08eb1c523ac403d573ef1c83 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
--- 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
|