Backport MR2508 to fix OSK space entry (#2131837)
This commit is contained in:
parent
668c36c53b
commit
fe0da4e085
168
2508.patch
Normal file
168
2508.patch
Normal file
@ -0,0 +1,168 @@
|
||||
From 524a5401266f8b30c2210cf147530cbb815b71ed Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Tue, 11 Oct 2022 18:23:19 +0200
|
||||
Subject: [PATCH 1/2] keyboard: Refactor code
|
||||
|
||||
Move inline anonymous function to be its own. This method
|
||||
will become asynchronous in following commits.
|
||||
---
|
||||
js/ui/keyboard.js | 54 +++++++++++++++++++++++++----------------------
|
||||
1 file changed, 29 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
|
||||
index 895691c34e..28369316e1 100644
|
||||
--- a/js/ui/keyboard.js
|
||||
+++ b/js/ui/keyboard.js
|
||||
@@ -1510,31 +1510,8 @@ var Keyboard = GObject.registerClass({
|
||||
button.setWidth(key.width);
|
||||
|
||||
if (key.action !== 'modifier') {
|
||||
- button.connect('commit', (actor, keyval, str) => {
|
||||
- if (this._modifiers.size === 0 && str !== '' &&
|
||||
- keyval && this._oskCompletionEnabled) {
|
||||
- Main.inputMethod.handleVirtualKey(keyval);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (str === '' || !Main.inputMethod.currentFocus ||
|
||||
- (keyval && this._oskCompletionEnabled) ||
|
||||
- this._modifiers.size > 0 ||
|
||||
- !this._keyboardController.commitString(str, true)) {
|
||||
- if (keyval !== 0) {
|
||||
- this._forwardModifiers(this._modifiers, Clutter.EventType.KEY_PRESS);
|
||||
- this._keyboardController.keyvalPress(keyval);
|
||||
- GLib.timeout_add(GLib.PRIORITY_DEFAULT, KEY_RELEASE_TIMEOUT, () => {
|
||||
- this._keyboardController.keyvalRelease(keyval);
|
||||
- this._forwardModifiers(this._modifiers, Clutter.EventType.KEY_RELEASE);
|
||||
- this._disableAllModifiers();
|
||||
- return GLib.SOURCE_REMOVE;
|
||||
- });
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (!this._latched)
|
||||
- this._setActiveLayer(0);
|
||||
+ button.connect('commit', (_actor, keyval, str) => {
|
||||
+ this._commitAction(keyval, str);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1592,6 +1569,33 @@ var Keyboard = GObject.registerClass({
|
||||
}
|
||||
}
|
||||
|
||||
+ _commitAction(keyval, str) {
|
||||
+ if (this._modifiers.size === 0 && str !== '' &&
|
||||
+ keyval && this._oskCompletionEnabled) {
|
||||
+ Main.inputMethod.handleVirtualKey(keyval);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (str === '' || !Main.inputMethod.currentFocus ||
|
||||
+ (keyval && this._oskCompletionEnabled) ||
|
||||
+ this._modifiers.size > 0 ||
|
||||
+ !this._keyboardController.commitString(str, true)) {
|
||||
+ if (keyval !== 0) {
|
||||
+ this._forwardModifiers(this._modifiers, Clutter.EventType.KEY_PRESS);
|
||||
+ this._keyboardController.keyvalPress(keyval);
|
||||
+ GLib.timeout_add(GLib.PRIORITY_DEFAULT, KEY_RELEASE_TIMEOUT, () => {
|
||||
+ this._keyboardController.keyvalRelease(keyval);
|
||||
+ this._forwardModifiers(this._modifiers, Clutter.EventType.KEY_RELEASE);
|
||||
+ this._disableAllModifiers();
|
||||
+ return GLib.SOURCE_REMOVE;
|
||||
+ });
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (!this._latched)
|
||||
+ this._setActiveLayer(0);
|
||||
+ }
|
||||
+
|
||||
_previousWordPosition(text, cursor) {
|
||||
/* Skip word prior to cursor */
|
||||
let pos = Math.max(0, text.slice(0, cursor).search(/\s+\S+\s*$/));
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 6e997c993e8c392b88cb97644ad604be6dd8028a Mon Sep 17 00:00:00 2001
|
||||
From: Carlos Garnacho <carlosg@gnome.org>
|
||||
Date: Tue, 11 Oct 2022 18:24:15 +0200
|
||||
Subject: [PATCH 2/2] inputMethod: Check return value when letting IM handle
|
||||
virtual keys
|
||||
|
||||
When propagating keys from the OSK, we usually feed these directly to
|
||||
the IBusInputContext and let the IM handle the effects of this virtual
|
||||
key event (which may also include feeding a key event back to us).
|
||||
|
||||
But these functions may also return a FALSE value if the key was "let
|
||||
through" by the IM, which means the ball is in our yard again, and
|
||||
we are responsible of letting this event get to its destination.
|
||||
|
||||
If that happens, just fall through, so the string is committed to
|
||||
the client as an UTF-8 string, or propagated through keyboard events.
|
||||
|
||||
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5930
|
||||
---
|
||||
js/misc/inputMethod.js | 19 ++++++++++++++-----
|
||||
js/ui/keyboard.js | 6 +++---
|
||||
2 files changed, 17 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/js/misc/inputMethod.js b/js/misc/inputMethod.js
|
||||
index 7bf6646d80..906fe1fc93 100644
|
||||
--- a/js/misc/inputMethod.js
|
||||
+++ b/js/misc/inputMethod.js
|
||||
@@ -7,6 +7,8 @@ const Main = imports.ui.main;
|
||||
|
||||
Gio._promisify(IBus.Bus.prototype,
|
||||
'create_input_context_async', 'create_input_context_async_finish');
|
||||
+Gio._promisify(IBus.InputContext.prototype,
|
||||
+ 'process_key_event_async', 'process_key_event_async_finish');
|
||||
|
||||
var HIDE_PANEL_TIME = 50;
|
||||
|
||||
@@ -329,10 +331,17 @@ var InputMethod = GObject.registerClass({
|
||||
return this._preeditVisible && this._preeditStr !== '' && this._preeditStr !== null;
|
||||
}
|
||||
|
||||
- handleVirtualKey(keyval) {
|
||||
- this._context.process_key_event_async(
|
||||
- keyval, 0, 0, -1, null, null);
|
||||
- this._context.process_key_event_async(
|
||||
- keyval, 0, IBus.ModifierType.RELEASE_MASK, -1, null, null);
|
||||
+ async handleVirtualKey(keyval) {
|
||||
+ try {
|
||||
+ if (!await this._context.process_key_event_async(
|
||||
+ keyval, 0, 0, -1, null))
|
||||
+ return false;
|
||||
+
|
||||
+ await this._context.process_key_event_async(
|
||||
+ keyval, 0, IBus.ModifierType.RELEASE_MASK, -1, null);
|
||||
+ return true;
|
||||
+ } catch (e) {
|
||||
+ return false;
|
||||
+ }
|
||||
}
|
||||
});
|
||||
diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js
|
||||
index 28369316e1..3241571de7 100644
|
||||
--- a/js/ui/keyboard.js
|
||||
+++ b/js/ui/keyboard.js
|
||||
@@ -1569,11 +1569,11 @@ var Keyboard = GObject.registerClass({
|
||||
}
|
||||
}
|
||||
|
||||
- _commitAction(keyval, str) {
|
||||
+ async _commitAction(keyval, str) {
|
||||
if (this._modifiers.size === 0 && str !== '' &&
|
||||
keyval && this._oskCompletionEnabled) {
|
||||
- Main.inputMethod.handleVirtualKey(keyval);
|
||||
- return;
|
||||
+ if (await Main.inputMethod.handleVirtualKey(keyval))
|
||||
+ return;
|
||||
}
|
||||
|
||||
if (str === '' || !Main.inputMethod.currentFocus ||
|
||||
--
|
||||
GitLab
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
Name: gnome-shell
|
||||
Version: 43.0
|
||||
Release: 2%{?dist}
|
||||
Release: 3%{?dist}
|
||||
Summary: Window management and application launching for GNOME
|
||||
|
||||
License: GPLv2+
|
||||
@ -15,6 +15,10 @@ Patch0: 2487.patch
|
||||
# Backported from upstream
|
||||
# https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2495
|
||||
Patch1: 2495.patch
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2131837
|
||||
# Backported from upstream
|
||||
# https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2508
|
||||
Patch2: 2508.patch
|
||||
|
||||
# Replace Epiphany with Firefox in the default favourite apps list
|
||||
Patch10001: gnome-shell-favourite-apps-firefox.patch
|
||||
@ -238,6 +242,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
|
||||
%{_mandir}/man1/gnome-shell.1*
|
||||
|
||||
%changelog
|
||||
* Tue Oct 11 2022 Adam Williamson <awilliam@redhat.com> - 43.0-3
|
||||
- Backport MR2508 to fix OSK space entry (#2131837)
|
||||
|
||||
* Thu Sep 22 2022 Kalev Lember <klember@redhat.com> - 43.0-2
|
||||
- Backport MR2487 and MR2495 to fix input sources sorting (#2121110)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user