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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2347>
This commit is contained in:
Carlos Garnacho 2022-06-29 13:06:07 +02:00 committed by Marge Bot
parent 35ff4bfe3c
commit 237ba24dbe
2 changed files with 12 additions and 0 deletions

View File

@ -270,6 +270,7 @@ class IbusCandidatePopup extends BoxPointer.BoxPointer {
indexes.push(indexLabel.get_text()); indexes.push(indexLabel.get_text());
Main.keyboard.resetSuggestions(); Main.keyboard.resetSuggestions();
Main.keyboard.setSuggestionsVisible(visible);
let candidates = []; let candidates = [];
for (let i = startIndex; i < endIndex; ++i) { for (let i = startIndex; i < endIndex; ++i) {
@ -289,10 +290,12 @@ class IbusCandidatePopup extends BoxPointer.BoxPointer {
this._candidateArea.updateButtons(lookupTable.is_round(), page, nPages); this._candidateArea.updateButtons(lookupTable.is_round(), page, nPages);
}); });
panelService.connect('show-lookup-table', () => { panelService.connect('show-lookup-table', () => {
Main.keyboard.setSuggestionsVisible(true);
this._candidateArea.show(); this._candidateArea.show();
this._updateVisibility(); this._updateVisibility();
}); });
panelService.connect('hide-lookup-table', () => { panelService.connect('hide-lookup-table', () => {
Main.keyboard.setSuggestionsVisible(false);
this._candidateArea.hide(); this._candidateArea.hide();
this._updateVisibility(); this._updateVisibility();
}); });

View File

@ -227,6 +227,11 @@ class Suggestions extends St.BoxLayout {
clear() { clear() {
this.remove_all_children(); this.remove_all_children();
} }
setVisible(visible) {
for (const child of this)
child.visible = visible;
}
}); });
var LanguageSelectionPopup = class extends PopupMenu.PopupMenu { var LanguageSelectionPopup = class extends PopupMenu.PopupMenu {
@ -1940,6 +1945,10 @@ var Keyboard = GObject.registerClass({
this._suggestions.clear(); this._suggestions.clear();
} }
setSuggestionsVisible(visible) {
this._suggestions?.setVisible(visible);
}
addSuggestion(text, callback) { addSuggestion(text, callback) {
if (!this._suggestions) if (!this._suggestions)
return; return;