mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-12 20:38:52 +00:00
refactor(core): add keyPress event to fix IME space detection (#11700)
### TL;DR Refactor space-triggered AI Widget activation logic from `keydown` to `keypress` event listeners ### Background The `keydown` event triggered by a space may originate from: 1. Normal space insertion 2. Space triggered by input method confirming candidate words In scenarios like (2), some browsers (see [ISSUE](https://github.com/toeverything/AFFiNE/issues/11541)) and input method callbacks produce events identical to scenario (1),making it impossible to distinguish between the two. To fix this, the space-activated AI listener uses the `keypress` event: In scenario 2, `event.which !== 32` (may be `30430` or other values) can be used to differentiate from scenario 1. > CLOSE BS-3081
This commit is contained in:
@@ -59,6 +59,21 @@ export class KeyboardControl {
|
||||
|
||||
private composition = false;
|
||||
|
||||
private readonly _press = (event: KeyboardEvent) => {
|
||||
if (!this._shouldTrigger(event)) {
|
||||
return;
|
||||
}
|
||||
const keyboardEventState = new KeyboardEventState({
|
||||
event,
|
||||
composing: this.composition,
|
||||
});
|
||||
|
||||
this._dispatcher.run(
|
||||
'keyPress',
|
||||
this._createContext(event, keyboardEventState)
|
||||
);
|
||||
};
|
||||
|
||||
constructor(private readonly _dispatcher: UIEventDispatcher) {}
|
||||
|
||||
private _createContext(event: Event, keyboardState: KeyboardEventState) {
|
||||
@@ -105,6 +120,11 @@ export class KeyboardControl {
|
||||
listen() {
|
||||
this._dispatcher.disposables.addFromEvent(document, 'keydown', this._down);
|
||||
this._dispatcher.disposables.addFromEvent(document, 'keyup', this._up);
|
||||
this._dispatcher.disposables.addFromEvent(
|
||||
document,
|
||||
'keypress',
|
||||
this._press
|
||||
);
|
||||
this._dispatcher.disposables.addFromEvent(
|
||||
document,
|
||||
'compositionstart',
|
||||
|
||||
@@ -46,6 +46,7 @@ const eventNames = [
|
||||
|
||||
'keyDown',
|
||||
'keyUp',
|
||||
'keyPress',
|
||||
|
||||
'selectionChange',
|
||||
'compositionStart',
|
||||
|
||||
Reference in New Issue
Block a user