Olivier Tilloy has proposed merging 
~osomon/ubuntu/+source/gnome-shell:bionic-sru-lp1765304 into 
~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic.

Requested reviews:
  Ubuntu Desktop (ubuntu-desktop)
Related bugs:
  Bug #1765304 in ibus (Ubuntu): "Ubuntu 18.04's ibus package breaks password 
fields in Firefox (by lowering & raising window whenever they're focused)"
  https://bugs.launchpad.net/ubuntu/+source/ibus/+bug/1765304

For more details, see:
https://code.launchpad.net/~osomon/ubuntu/+source/gnome-shell/+git/gnome-shell/+merge/359817
-- 
Your team Ubuntu Desktop is requested to review the proposed merge of 
~osomon/ubuntu/+source/gnome-shell:bionic-sru-lp1765304 into 
~ubuntu-desktop/ubuntu/+source/gnome-shell:ubuntu/bionic.
diff --git a/debian/changelog b/debian/changelog
index 2d2d1df..ca7daa7 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+gnome-shell (3.28.3-0ubuntu0.18.04.4) UNRELEASED; urgency=medium
+
+  * debian/patches/ibus-set-content-type-no-holdKeyboard.patch:
+    - Cherry-pick upstream commit to prevent focus stealing on password fields
+      in firefox when ibus is used (LP: #1765304)
+
+ -- Olivier Tilloy <[email protected]>  Thu, 29 Nov 2018 11:34:00 +0100
+
 gnome-shell (3.28.3-0ubuntu0.18.04.3) bionic; urgency=medium
 
   * debian/ubuntu.css:
diff --git a/debian/patches/ibus-set-content-type-no-holdKeyboard.patch b/debian/patches/ibus-set-content-type-no-holdKeyboard.patch
new file mode 100644
index 0000000..0125d11
--- /dev/null
+++ b/debian/patches/ibus-set-content-type-no-holdKeyboard.patch
@@ -0,0 +1,69 @@
+From 551e827841626cd8084daa2210b3bf60e5be96be Mon Sep 17 00:00:00 2001
+From: Takao Fujiwara <[email protected]>
+Date: Fri, 31 Aug 2018 20:22:23 +0900
+Subject: [PATCH] keyboard: Do not call KeyboardManager.holdKeyboard() with
+ set-content-type
+
+When gnome-shell receives the signal of 'set-content-type' from ibus,
+gnome-shell calls KeyboardManager.holdKeyboard() and
+KeyboardManager.releaseKeyboard() and the functions change the current
+input focus in GNOME Xorg and it could result in closing a popup window
+which has a password entry by focusing on the entry.
+The solution is to stop to call the APIs on 'set-content-type' signal.
+
+https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
+---
+ js/ui/status/keyboard.js | 18 ++++++++++++++++--
+ 1 file changed, 16 insertions(+), 2 deletions(-)
+
+diff --git a/js/ui/status/keyboard.js b/js/ui/status/keyboard.js
+index 6d031d88c..980019cd4 100644
+--- a/js/ui/status/keyboard.js
++++ b/js/ui/status/keyboard.js
+@@ -360,11 +360,14 @@ var InputSourceManager = new Lang.Class({
+         this._settings.connect('per-window-changed', this._sourcesPerWindowChanged.bind(this));
+         this._sourcesPerWindowChanged();
+         this._disableIBus = false;
++        this._reloading = false;
+     },
+ 
+     reload() {
++        this._reloading = true;
+         this._keyboardManager.setKeyboardOptions(this._settings.keyboardOptions);
+         this._inputSourcesChanged();
++        this._reloading = false;
+     },
+ 
+     _ibusReadyCallback(im, ready) {
+@@ -458,7 +461,15 @@ var InputSourceManager = new Lang.Class({
+     },
+ 
+     activateInputSource(is, interactive) {
+-        KeyboardManager.holdKeyboard();
++        // The focus changes during holdKeyboard/releaseKeyboard may trick
++        // the client into hiding UI containing the currently focused entry.
++        // So holdKeyboard/releaseKeyboard are not called when
++        // 'set-content-type' signal is received.
++        // E.g. Focusing on a password entry in a popup in Xorg Firefox
++        // will emit 'set-content-type' signal.
++        // https://gitlab.gnome.org/GNOME/gnome-shell/issues/391
++        if (!this._reloading)
++            KeyboardManager.holdKeyboard();
+         this._keyboardManager.apply(is.xkbId);
+ 
+         // All the "xkb:..." IBus engines simply "echo" back symbols,
+@@ -473,7 +484,10 @@ var InputSourceManager = new Lang.Class({
+         else
+             engine = 'xkb:us::eng';
+ 
+-        this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
++        if (!this._reloading)
++            this._ibusManager.setEngine(engine, KeyboardManager.releaseKeyboard);
++        else
++            this._ibusManager.setEngine(engine);
+         this._currentInputSourceChanged(is);
+ 
+         if (interactive)
+-- 
+2.18.1
+
diff --git a/debian/patches/series b/debian/patches/series
index 6a12345..50a4a68 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -25,3 +25,4 @@ popupMenu-Don-t-handle-key-presses-directly-if-there-are-.patch
 st-button-Ignore-pointer-emulated-touch-events.patch
 st-scroll-view-Handle-the-case-where-scrollbars-are-NULL.patch
 st-scroll-view-Remove-scrollbars-references-on-dispose.patch
+ibus-set-content-type-no-holdKeyboard.patch
-- 
ubuntu-desktop mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-desktop

Reply via email to