@@ -20,6 +20,10 @@ export class KeyboardController {
2020 private textInputClient: inputMethodEngine.InputClient | undefined = undefined;
2121 private keyboardController: inputMethodEngine.KeyboardController | undefined = undefined;
2222 private initialized = false
23+ // Virtual keyboard states
24+ private hasCandidates = false
25+ private hasPreeditOrAux = false
26+ // Textarea states
2327 private preedit = ''
2428 private preeditIndex = 0 // Bad initial value that must be reset on focus.
2529 private textWithPreedit = ''
@@ -81,6 +85,19 @@ export class KeyboardController {
8185 case 'CLIENT_PREEDIT':
8286 this.updatePreviewText(event.data.preedit, event.data.cursorPos)
8387 break
88+ case 'CLEAR':
89+ this.hasCandidates = false
90+ this.hasPreeditOrAux = false
91+ this.sendEvent(event)
92+ break
93+ case 'CANDIDATES':
94+ this.hasCandidates = true
95+ this.sendEvent(event)
96+ break
97+ case 'PREEDIT':
98+ this.hasPreeditOrAux = event.data.auxUp !== '' || event.data.preedit !== ''
99+ this.sendEvent(event)
100+ break
84101 default:
85102 this.sendEvent(event)
86103 break
@@ -229,7 +246,7 @@ export class KeyboardController {
229246 }
230247
231248 private handleBackspaceSlide(direction: 'LEFT' | 'RIGHT' | 'RELEASE') {
232- if (this.preedit) {
249+ if (this.preedit || this.hasCandidates || this.hasPreeditOrAux ) {
233250 if (direction === 'RELEASE') {
234251 this.processResult(fcitx.reset())
235252 }
@@ -366,6 +383,7 @@ export class KeyboardController {
366383 })
367384 this.panel.on('hide', () => {
368385 console.debug('hide')
386+ this.processResult(fcitx.reset()) // Need it when dragging right edge to collapse keyboard.
369387 this.sendEvent({ type: 'HIDE' })
370388 })
371389 this.panel.resize(width, containerHeight)
0 commit comments