keyboard: Fix backspace not getting released after deleting preedit
When deleting is toggled while a preedit string is present, this causes _toggleDelete() to use keyvalPress(). After the entire preedit string has been deleted, _toggleDelete() will no longer hit the code path that would call keyvalRelease() due to hasPreedit() now being false. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7171 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3009>
This commit is contained in:
@@ -1641,15 +1641,20 @@ export const Keyboard = GObject.registerClass({
|
||||
this._deleteEnabled = enabled;
|
||||
this._timesDeleted = 0;
|
||||
|
||||
if (!Main.inputMethod.currentFocus ||
|
||||
Main.inputMethod.hasPreedit() ||
|
||||
Main.inputMethod.terminalMode) {
|
||||
/* If there is no IM focus or are in the middle of preedit,
|
||||
* fallback to keypresses */
|
||||
if (enabled)
|
||||
this._keyboardController.keyvalPress(Clutter.KEY_BackSpace);
|
||||
else
|
||||
this._keyboardController.keyvalRelease(Clutter.KEY_BackSpace);
|
||||
/* If there is no IM focus or are in the middle of preedit, fallback to
|
||||
* keypresses */
|
||||
if (enabled &&
|
||||
(!Main.inputMethod.currentFocus ||
|
||||
Main.inputMethod.hasPreedit() ||
|
||||
Main.inputMethod.terminalMode)) {
|
||||
this._keyboardController.keyvalPress(Clutter.KEY_BackSpace);
|
||||
this._backspacePressed = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!enabled && this._backspacePressed) {
|
||||
this._keyboardController.keyvalRelease(Clutter.KEY_BackSpace);
|
||||
delete this._backspacePressed;
|
||||
return;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user