From 237ba24dbeae5f838b40f8c3d100a09413b96d22 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Wed, 29 Jun 2022 13:06:07 +0200 Subject: [PATCH] ibusCandidatePopup: Set OSK candidates list visibility correctly Right now, we don't pay much attention to visibility hints from IBus about the candidates list for the OSK suggestions bar. Since some IMs rely on this visibility being honored, do that. To fix this, the visibility hints for the lookup table are now propagated to the keyboard, so the Suggestions actor hides its internal candidate buttons. Since the Suggestions actor gets its minimum height from CSS, this does not result in OSK size jumps. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5601 Part-of: --- js/ui/ibusCandidatePopup.js | 3 +++ js/ui/keyboard.js | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/js/ui/ibusCandidatePopup.js b/js/ui/ibusCandidatePopup.js index c57e289cb..340f9a8e1 100644 --- a/js/ui/ibusCandidatePopup.js +++ b/js/ui/ibusCandidatePopup.js @@ -270,6 +270,7 @@ class IbusCandidatePopup extends BoxPointer.BoxPointer { indexes.push(indexLabel.get_text()); Main.keyboard.resetSuggestions(); + Main.keyboard.setSuggestionsVisible(visible); let candidates = []; for (let i = startIndex; i < endIndex; ++i) { @@ -289,10 +290,12 @@ class IbusCandidatePopup extends BoxPointer.BoxPointer { this._candidateArea.updateButtons(lookupTable.is_round(), page, nPages); }); panelService.connect('show-lookup-table', () => { + Main.keyboard.setSuggestionsVisible(true); this._candidateArea.show(); this._updateVisibility(); }); panelService.connect('hide-lookup-table', () => { + Main.keyboard.setSuggestionsVisible(false); this._candidateArea.hide(); this._updateVisibility(); }); diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index c819265eb..ac2a800b4 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -227,6 +227,11 @@ class Suggestions extends St.BoxLayout { clear() { this.remove_all_children(); } + + setVisible(visible) { + for (const child of this) + child.visible = visible; + } }); var LanguageSelectionPopup = class extends PopupMenu.PopupMenu { @@ -1940,6 +1945,10 @@ var Keyboard = GObject.registerClass({ this._suggestions.clear(); } + setSuggestionsVisible(visible) { + this._suggestions?.setVisible(visible); + } + addSuggestion(text, callback) { if (!this._suggestions) return;