[gnome-shell-extensions] window-list: Adjust to overview changes
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell-extensions] window-list: Adjust to overview changes
- Date: Fri, 12 Feb 2021 12:58:42 +0000 (UTC)
commit 9fa522c29a1b05373a19101e0495047f7cb37a48
Author: Florian Müllner <fmuellner gnome org>
Date: Wed Feb 3 13:57:53 2021 +0100
window-list: Adjust to overview changes
The overview code changed significantly, including the bits we re-use
to implement the window picker in the classic session. Adjust to those
changes to unbreak the extension.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/159>
extensions/window-list/windowPicker.js | 158 ++++++++++++++++-----------------
1 file changed, 77 insertions(+), 81 deletions(-)
---
diff --git a/extensions/window-list/windowPicker.js b/extensions/window-list/windowPicker.js
index d0289ee..31e2e94 100644
--- a/extensions/window-list/windowPicker.js
+++ b/extensions/window-list/windowPicker.js
@@ -1,16 +1,24 @@
/* exported WindowPicker, WindowPickerToggle */
-const { Clutter, GLib, GObject, Meta, Shell, St } = imports.gi;
+const { Clutter, GObject, Shell, St } = imports.gi;
const Layout = imports.ui.layout;
const Main = imports.ui.main;
-const Overview = imports.ui.overview;
const { WorkspacesDisplay } = imports.ui.workspacesView;
+const { Workspace } = imports.ui.workspace;
+
+const { VIGNETTE_BRIGHTNESS } = imports.ui.lightbox;
+const {
+ SIDE_CONTROLS_ANIMATION_TIME,
+ OverviewAdjustment,
+ ControlsState,
+} = imports.ui.overviewControls;
let MyWorkspacesDisplay = GObject.registerClass(
class MyWorkspacesDisplay extends WorkspacesDisplay {
- _init() {
+ _init(controls, overviewAdjustment) {
let workspaceManager = global.workspace_manager;
+ this._overviewAdjustment = overviewAdjustment;
this._workspaceAdjustment = new St.Adjustment({
value: workspaceManager.get_active_workspace_index(),
lower: 0,
@@ -24,7 +32,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
workspaceManager.connect('notify::n-workspaces',
this._updateAdjustment.bind(this));
- super._init(this._workspaceAdjustment);
+ super._init(controls, this._workspaceAdjustment, this._overviewAdjustment);
this._workspaceAdjustment.actor = this;
@@ -33,19 +41,15 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
primary: true,
work_area: true,
}));
-
- this._workareasChangedId = global.display.connect('workareas-changed',
- this._onWorkAreasChanged.bind(this));
- this._onWorkAreasChanged();
}
- animateToOverview(...args) {
+ prepareToEnterOverview(...args) {
if (!this._scrollEventId) {
this._scrollEventId = Main.windowPicker.connect('scroll-event',
this._onScrollEvent.bind(this));
}
- super.animateToOverview(...args);
+ super.prepareToEnterOverview(...args);
}
vfunc_hide(...args) {
@@ -56,13 +60,6 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
super.vfunc_hide(...args);
}
- _onWorkAreasChanged() {
- let { primaryIndex } = Main.layoutManager;
- this._actualGeometry =
- Main.layoutManager.getWorkAreaForMonitor(primaryIndex);
- this._syncWorkspacesActualGeometry();
- }
-
_updateAdjustment() {
let workspaceManager = global.workspace_manager;
this._workspaceAdjustment.set({
@@ -71,20 +68,7 @@ class MyWorkspacesDisplay extends WorkspacesDisplay {
});
}
- _updateWorkspacesViews() {
- super._updateWorkspacesViews();
-
- this._workspacesViews.forEach(v => {
- Main.layoutManager.overviewGroup.remove_actor(v);
- Main.windowPicker.add_actor(v);
- });
- }
-
_onDestroy() {
- if (this._workareasChangedId)
- global.display.disconnect(this._workareasChangedId);
- this._workareasChangedId = 0;
-
if (this._nWorkspacesChangedId)
global.workspace_manager.disconnect(this._nWorkspacesChangedId);
this._nWorkspacesChangedId = 0;
@@ -105,7 +89,9 @@ var WindowPicker = GObject.registerClass({
this._overlayKeyId = 0;
this._stageKeyPressId = 0;
- super._init();
+ super._init({ reactive: true });
+
+ this._adjustment = new OverviewAdjustment(this);
this.connect('destroy', this._onDestroy.bind(this));
@@ -116,31 +102,14 @@ var WindowPicker = GObject.registerClass({
this, 'height',
GObject.BindingFlags.SYNC_CREATE);
- this._backgroundGroup = new Meta.BackgroundGroup({ reactive: true });
- this.add_child(this._backgroundGroup);
-
- this._backgroundGroup.connect('scroll-event', (a, ev) => {
- this.emit('scroll-event', ev);
- });
-
- // Trick WorkspacesDisplay constructor into adding actions here
- let addActionOrig = Main.overview.addAction;
- Main.overview.addAction = a => this._backgroundGroup.add_action(a);
-
- this._workspacesDisplay = new MyWorkspacesDisplay();
+ this._workspacesDisplay = new MyWorkspacesDisplay(this, this._adjustment);
this.add_child(this._workspacesDisplay);
- Main.overview.addAction = addActionOrig;
-
- this._bgManagers = [];
-
- this._monitorsChangedId = Main.layoutManager.connect('monitors-changed',
- this._updateBackgrounds.bind(this));
- this._updateBackgrounds();
-
Main.uiGroup.insert_child_below(this, global.window_group);
if (!Main.sessionMode.hasOverview) {
+ this._injectBackgroundShade();
+
this._overlayKeyId = global.display.connect('overlay-key', () => {
if (!this._visible)
this.open();
@@ -150,6 +119,36 @@ var WindowPicker = GObject.registerClass({
}
}
+ _injectBackgroundShade() {
+ const adjustment = this._adjustment;
+ const { _init, _onDestroy } = Workspace.prototype;
+
+ Workspace.prototype._init = function (...args) {
+ _init.call(this, ...args);
+
+ this._adjChangedId = adjustment.connect('notify::value', () => {
+ const { value: progress } = adjustment;
+ const brightness = 1 - (1 - VIGNETTE_BRIGHTNESS) * progress;
+ for (const bg of this._background?._backgroundGroup ?? []) {
+ bg.content.set({
+ vignette: true,
+ brightness,
+ });
+ }
+ });
+ };
+ Workspace.prototype._onDestroy = function () {
+ _onDestroy.call(this);
+
+ if (this._adjChangedId)
+ adjustment.disconnect(this._adjChangedId);
+ this._adjChangedId = 0;
+ };
+
+ this._wsInit = _init;
+ this._wsDestroy = _onDestroy;
+ }
+
get visible() {
return this._visible;
}
@@ -164,9 +163,15 @@ var WindowPicker = GObject.registerClass({
return;
this._fakeOverviewVisible(true);
- this._shadeBackgrounds();
- this._fakeOverviewAnimation();
- this._workspacesDisplay.animateToOverview(false);
+ this._workspacesDisplay.prepareToEnterOverview();
+ Main.overview._animationInProgress = true;
+
+ this._adjustment.value = ControlsState.HIDDEN;
+ this._adjustment.ease(ControlsState.WINDOW_PICKER, {
+ duration: SIDE_CONTROLS_ANIMATION_TIME,
+ mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+ onComplete: () => (Main.overview._animationInProgress = false),
+ });
this._stageKeyPressId = global.stage.connect('key-press-event',
(a, event) => {
@@ -190,11 +195,17 @@ var WindowPicker = GObject.registerClass({
if (!this._syncGrab())
return;
- this._workspacesDisplay.animateFromOverview(false);
- this._unshadeBackgrounds();
- this._fakeOverviewAnimation(() => {
- this._workspacesDisplay.hide();
- this._fakeOverviewVisible(false);
+ this._workspacesDisplay.prepareToLeaveOverview();
+
+ Main.overview._animationInProgress = true;
+ this._adjustment.ease(ControlsState.HIDDEN, {
+ duration: SIDE_CONTROLS_ANIMATION_TIME,
+ mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+ onComplete: () => {
+ Main.overview._animationInProgress = false;
+ this._workspacesDisplay.hide();
+ this._fakeOverviewVisible(false);
+ },
});
global.stage.disconnect(this._stageKeyPressId);
@@ -203,16 +214,8 @@ var WindowPicker = GObject.registerClass({
this.emit('open-state-changed', this._visible);
}
- _fakeOverviewAnimation(onComplete) {
- Main.overview._animationInProgress = true;
- GLib.timeout_add(
- GLib.PRIORITY_DEFAULT,
- Overview.ANIMATION_TIME,
- () => {
- Main.overview._animationInProgress = false;
- if (onComplete)
- onComplete();
- });
+ getWorkspacesBoxForState() {
+ return this.allocation;
}
_fakeOverviewVisible(visible) {
@@ -245,6 +248,11 @@ var WindowPicker = GObject.registerClass({
}
_onDestroy() {
+ if (this._wsInit)
+ Workspace.prototype._init = this._wsInit;
+ if (this._wsDestroy)
+ Workspace.prototype._onDestroy = this._wsDestroy;
+
if (this._monitorsChangedId)
Main.layoutManager.disconnect(this._monitorsChangedId);
this._monitorsChangedId = 0;
@@ -257,18 +265,6 @@ var WindowPicker = GObject.registerClass({
global.stage.disconnect(this._stageKeyPressId);
this._stageKeyPressId = 0;
}
-
- _updateBackgrounds() {
- Main.overview._updateBackgrounds.call(this);
- }
-
- _shadeBackgrounds() {
- Main.overview._shadeBackgrounds.call(this);
- }
-
- _unshadeBackgrounds() {
- Main.overview._unshadeBackgrounds.call(this);
- }
});
var WindowPickerToggle = GObject.registerClass(
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]