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: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/268>
This commit is contained in:
Florian Müllner
2023-07-15 14:37:46 +02:00
parent cb8c2eb27f
commit d59bc0b7f0
2 changed files with 17 additions and 11 deletions
+6 -5
View File
@@ -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;
}
+11 -6
View File
@@ -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;
});
}
}