From d59bc0b7f00e8814aade2b30a248b84c4e0b70f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Sat, 15 Jul 2023 14:37:46 +0200 Subject: [PATCH] window-list: Do not inject WindowPicker into Main This will become impossible once Main is converted to ESM. Instead, use the Extension class itself to hold the window picker. Part-of: --- extensions/window-list/extension.js | 11 ++++++----- extensions/window-list/windowPicker.js | 17 +++++++++++------ 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 8f7205f3..6f6417c6 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -878,7 +878,8 @@ class WindowList extends St.Widget { } _updateWindowListVisibility() { - let visible = !Main.windowPicker.visible; + const {windowPicker} = Extension.lookupByURL(import.meta.url); + const visible = !windowPicker.visible; this._windowList.ease({ opacity: visible ? 255 : 0, @@ -1111,10 +1112,10 @@ export default class WindowListExtension extends Extension { Main.layoutManager.connectObject('monitors-changed', () => this._buildWindowLists(), this); - Main.windowPicker = new WindowPicker(); + this.windowPicker = new WindowPicker(); Main.overview.hide = () => { - Main.windowPicker.close(); + this.windowPicker.close(); this._hideOverviewOrig.call(Main.overview); }; @@ -1146,8 +1147,8 @@ export default class WindowListExtension extends Extension { }); this._windowLists = null; - Main.windowPicker.destroy(); - delete Main.windowPicker; + this.windowPicker.destroy(); + delete this.windowPicker; Main.overview.hide = this._hideOverviewOrig; } diff --git a/extensions/window-list/windowPicker.js b/extensions/window-list/windowPicker.js index 17802c14..02983ce0 100644 --- a/extensions/window-list/windowPicker.js +++ b/extensions/window-list/windowPicker.js @@ -3,6 +3,8 @@ import GObject from 'gi://GObject'; import Shell from 'gi://Shell'; import St from 'gi://St'; +import {Extension} from 'resource:///org/gnome/shell/extensions/extension.js'; + const Layout = imports.ui.layout; const Main = imports.ui.main; const {WorkspacesDisplay} = imports.ui.workspacesView; @@ -34,6 +36,8 @@ class MyWorkspacesDisplay extends WorkspacesDisplay { super(controls, workspaceAdjustment, overviewAdjustment); + this._windowPicker = controls; + this._workspaceAdjustment = workspaceAdjustment; this._workspaceAdjustment.actor = this; @@ -49,7 +53,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay { prepareToEnterOverview(...args) { if (!this._scrollEventId) { - this._scrollEventId = Main.windowPicker.connect('scroll-event', + this._scrollEventId = this._windowPicker.connect('scroll-event', this._onScrollEvent.bind(this)); } @@ -58,7 +62,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay { vfunc_hide(...args) { if (this._scrollEventId > 0) - Main.windowPicker.disconnect(this._scrollEventId); + this._windowPicker.disconnect(this._scrollEventId); this._scrollEventId = 0; super.vfunc_hide(...args); @@ -325,15 +329,16 @@ export class WindowPickerToggle extends St.Button { toggle_mode: true, }); + const {windowPicker} = Extension.lookupByURL(import.meta.url); this.connect('notify::checked', () => { if (this.checked) - Main.windowPicker.open(); + windowPicker.open(); else - Main.windowPicker.close(); + windowPicker.close(); }); - Main.windowPicker.connect('open-state-changed', () => { - this.checked = Main.windowPicker.visible; + windowPicker.connect('open-state-changed', () => { + this.checked = windowPicker.visible; }); } }