window-list: Only remove fullscreen tracking in overview

Since commit 981e8e42e2, we untrack chrome in the overview to avoid
fullscreen tracking interfering with hiding the window list in the
overview.

However this also means that we no longer contribute to the struts
while in the overview, which can lead to unwanted window resizes
around the transition.

So instead of fully untracking the actor, retrack without fullscreen
tracking.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/409>
(cherry picked from commit 0ad959de1e)
This commit is contained in:
Florian Müllner
2025-06-16 20:21:32 +02:00
parent c501931155
commit bc136c600d
+18 -4
View File
@@ -772,11 +772,20 @@ class WindowList extends St.Widget {
() => this._onWorkspaceMenuSet(), this);
this._onWorkspaceMenuSet();
const chromeOptions = {
const inOverview = Main.overview.visible ||
(Main.layoutManager._startingUp && Main.sessionMode.hasOverview);
const overviewChromeOptions = {
affectsStruts: true,
};
const chromeOptions = {
...overviewChromeOptions,
trackFullscreen: true,
};
Main.layoutManager.addChrome(this, chromeOptions);
Main.layoutManager.addChrome(this, inOverview
? overviewChromeOptions
: chromeOptions);
Main.uiGroup.set_child_above_sibling(this, Main.layoutManager.panelBox);
Main.ctrlAltTabManager.addGroup(this, _('Window List'), 'start-here-symbolic');
@@ -813,12 +822,12 @@ class WindowList extends St.Widget {
Main.overview.connectObject(
'showing', () => {
Main.layoutManager.untrackChrome(this);
this._retrackChrome(overviewChromeOptions);
this.hide();
this._updateKeyboardAnchor();
},
'hidden', () => {
Main.layoutManager.trackChrome(this, chromeOptions);
this._retrackChrome(chromeOptions);
this.visible = !this._monitor.inFullscreen;
this._updateKeyboardAnchor();
}, this);
@@ -878,6 +887,11 @@ class WindowList extends St.Widget {
this._monitor.y + this._monitor.height - this.height);
}
_retrackChrome(options) {
Main.layoutManager.untrackChrome(this);
Main.layoutManager.trackChrome(this, options);
}
_updateWorkspaceIndicatorVisibility() {
let workspaceManager = global.workspace_manager;
let hasWorkspaces = this._mutterSettings.get_boolean('dynamic-workspaces') ||