Skip to content

Commit eb562b5

Browse files
authored
Merge pull request #3680 from Eugeny/electron-13-sogou-fix
IME: handle missing compositionend events for Sogou IME
2 parents f38d7d8 + d60431f commit eb562b5

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/browser/Terminal.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,12 @@ export class Terminal extends CoreTerminal implements ITerminal {
9898
*/
9999
private _keyDownHandled: boolean = false;
100100

101+
/**
102+
* Records whether a keydown event has occured since the last keyup event, i.e. whether a key
103+
* is currently "pressed".
104+
*/
105+
private _keyDownSeen: boolean = false;
106+
101107
/**
102108
* Records whether the keypress event has already been handled and triggered a data event, if so
103109
* the input event should not trigger a data event but should still print to the textarea so
@@ -1083,6 +1089,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
10831089
*/
10841090
protected _keyDown(event: KeyboardEvent): boolean | undefined {
10851091
this._keyDownHandled = false;
1092+
this._keyDownSeen = true;
10861093

10871094
if (this._customKeyEventHandler && this._customKeyEventHandler(event) === false) {
10881095
return false;
@@ -1168,6 +1175,8 @@ export class Terminal extends CoreTerminal implements ITerminal {
11681175
}
11691176

11701177
protected _keyUp(ev: KeyboardEvent): void {
1178+
this._keyDownSeen = false;
1179+
11711180
if (this._customKeyEventHandler && this._customKeyEventHandler(ev) === false) {
11721181
return;
11731182
}
@@ -1241,7 +1250,8 @@ export class Terminal extends CoreTerminal implements ITerminal {
12411250
protected _inputEvent(ev: InputEvent): boolean {
12421251
// Only support emoji IMEs when screen reader mode is disabled as the event must bubble up to
12431252
// support reading out character input which can doubling up input characters
1244-
if (ev.data && ev.inputType === 'insertText' && !ev.composed && !this.optionsService.rawOptions.screenReaderMode) {
1253+
// Based on these event traces: https://github.com/xtermjs/xterm.js/issues/3679
1254+
if (ev.data && ev.inputType === 'insertText' && (!ev.composed || !this._keyDownSeen) && !this.optionsService.rawOptions.screenReaderMode) {
12451255
if (this._keyPressHandled) {
12461256
return false;
12471257
}

0 commit comments

Comments
 (0)