keyboard: Trigger OSK level changes on button release
Keep it consistent with the rest of the actions. For long press handling (i.e. shift turning to caps lock), this also means the release action should be cancelled after any long press, to prevent both from taking effect at the same time. Prior to this commit, we used to switch level (and hide the button being pressed) on button press, which made its long press handler never get a paired release and end up triggering caps lock. Performing the action on release ensures the shift key button does not fall into this situation, making this issue moot. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2278>
This commit is contained in:
parent
6d230c82e3
commit
3b81e0f8eb
@ -1501,21 +1501,21 @@ var Keyboard = GObject.registerClass({
|
||||
this._setActiveLayer(0);
|
||||
});
|
||||
if (key.action !== null) {
|
||||
button.connect('pressed', () => {
|
||||
if (key.action === 'levelSwitch') {
|
||||
button.connect('released', () => {
|
||||
if (key.action === 'hide') {
|
||||
this.close();
|
||||
} else if (key.action === 'languageMenu') {
|
||||
this._popupLanguageMenu(button);
|
||||
} else if (key.action === 'emoji') {
|
||||
this._toggleEmoji();
|
||||
} else if (!this._longPressed && key.action === 'levelSwitch') {
|
||||
this._setActiveLayer(key.level);
|
||||
this._setLatched(
|
||||
key.level === 1 &&
|
||||
key.iconName === 'keyboard-caps-lock-symbolic');
|
||||
}
|
||||
});
|
||||
button.connect('released', () => {
|
||||
if (key.action === 'hide')
|
||||
this.close();
|
||||
else if (key.action === 'languageMenu')
|
||||
this._popupLanguageMenu(button);
|
||||
else if (key.action === 'emoji')
|
||||
this._toggleEmoji();
|
||||
|
||||
this._longPressed = false;
|
||||
});
|
||||
}
|
||||
|
||||
@ -1523,8 +1523,11 @@ var Keyboard = GObject.registerClass({
|
||||
key.iconName === 'keyboard-shift-symbolic') {
|
||||
layout.shiftKeys.push(button);
|
||||
if (key.level === 1) {
|
||||
button.connect('long-press',
|
||||
() => this._setLatched(true));
|
||||
button.connect('long-press', () => {
|
||||
this._setActiveLayer(key.level);
|
||||
this._setLatched(true);
|
||||
this._longPressed = true;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user