From 13dce7fcc1013a3cbb3a1e521e123a5d4ede75c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 27 Feb 2024 21:20:45 +0100 Subject: [PATCH 21/28] workspace-indicator: Handle active indication in thumbnail Meta.Workspace has had an `active` property for a while now, so we can use a property binding instead of tracking the active workspace ourselves. Part-of: --- .../workspace-indicator/workspaceIndicator.js | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index 14dd81d0..bf6511a0 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -111,6 +111,13 @@ class WorkspaceLayout extends Clutter.LayoutManager { } class WorkspaceThumbnail extends St.Button { + static [GObject.properties] = { + 'active': GObject.ParamSpec.boolean( + 'active', '', '', + GObject.ParamFlags.READWRITE, + false), + }; + static { GObject.registerClass(this); } @@ -143,6 +150,10 @@ class WorkspaceThumbnail extends St.Button { let workspaceManager = global.workspace_manager; this._workspace = workspaceManager.get_workspace_by_index(index); + this._workspace.bind_property('active', + this, 'active', + GObject.BindingFlags.SYNC_CREATE); + this._workspace.connectObject( 'window-added', (ws, window) => this._addWindow(window), 'window-removed', (ws, window) => this._removeWindow(window), @@ -155,6 +166,18 @@ class WorkspaceThumbnail extends St.Button { this._onRestacked(); } + get active() { + return this.has_style_class_name('active'); + } + + set active(active) { + if (active) + this.add_style_class_name('active'); + else + this.remove_style_class_name('active'); + this.notify('active'); + } + acceptDrop(source) { if (!source.metaWindow) return false; @@ -360,7 +383,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._currentWorkspace = global.workspace_manager.get_active_workspace_index(); this._updateMenuOrnament(); - this._updateActiveThumbnail(); this._statusLabel.set_text(this._getStatusText()); } @@ -379,16 +401,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { } } - _updateActiveThumbnail() { - let thumbs = this._thumbnailsBox.get_children(); - for (let i = 0; i < thumbs.length; i++) { - if (i === this._currentWorkspace) - thumbs[i].add_style_class_name('active'); - else - thumbs[i].remove_style_class_name('active'); - } - } - _getStatusText() { const {nWorkspaces} = global.workspace_manager; const current = this._currentWorkspace + 1; @@ -436,7 +448,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { let thumb = new WorkspaceThumbnail(i); this._thumbnailsBox.add_child(thumb); } - this._updateActiveThumbnail(); } _activate(index) { -- 2.44.0