From 8d2b24290204be98423b3a952939895133bdc036 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 20 Feb 2024 22:00:57 +0100 Subject: [PATCH 27/28] workspace-indicator: Make previews configurable Now that previews scroll when there are too many workspaces, there is no longer a reason for the 6-workspace limit. However some users do prefer the menu, so rather than drop it, turn it into a proper preference. Closes https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/336 Part-of: --- extensions/window-list/extension.js | 1 + ...e.shell.extensions.window-list.gschema.xml | 4 +++ extensions/workspace-indicator/extension.js | 4 ++- extensions/workspace-indicator/meson.build | 1 + extensions/workspace-indicator/prefs.js | 26 +++++++++++++++++-- ...extensions.workspace-indicator.gschema.xml | 15 +++++++++++ .../workspace-indicator/workspaceIndicator.js | 11 ++++---- po/POTFILES.in | 1 + 8 files changed, 55 insertions(+), 8 deletions(-) create mode 100644 extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js index 3950c535..227625e5 100644 --- a/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js @@ -769,6 +769,7 @@ class WindowList extends St.Widget { this._workspaceIndicator = new BottomWorkspaceIndicator({ baseStyleClass: 'window-list-workspace-indicator', + settings, }); indicatorsBox.add_child(this._workspaceIndicator.container); diff --git a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml index 2ed680a5..46ff25cb 100644 --- a/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml +++ b/extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml @@ -36,5 +36,9 @@ SPDX-License-Identifier: GPL-2.0-or-later only on the primary one. + + true + Show workspace previews in window list + diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js index b383c919..ef24a750 100644 --- a/extensions/workspace-indicator/extension.js +++ b/extensions/workspace-indicator/extension.js @@ -12,7 +12,9 @@ import {WorkspaceIndicator} from './workspaceIndicator.js'; export default class WorkspaceIndicatorExtension extends Extension { enable() { - this._indicator = new WorkspaceIndicator(); + this._indicator = new WorkspaceIndicator({ + settings: this.getSettings(), + }); Main.panel.addToStatusArea('workspace-indicator', this._indicator); } diff --git a/extensions/workspace-indicator/meson.build b/extensions/workspace-indicator/meson.build index dada5408..9388085c 100644 --- a/extensions/workspace-indicator/meson.build +++ b/extensions/workspace-indicator/meson.build @@ -11,5 +11,6 @@ extension_data += files( 'stylesheet-dark.css', 'stylesheet-light.css', ) +extension_schemas += files('schemas/' + metadata_conf.get('gschemaname') + '.gschema.xml') extension_sources += files('prefs.js', 'workspaceIndicator.js') diff --git a/extensions/workspace-indicator/prefs.js b/extensions/workspace-indicator/prefs.js index ea0546bf..b828ab8f 100644 --- a/extensions/workspace-indicator/prefs.js +++ b/extensions/workspace-indicator/prefs.js @@ -18,6 +18,25 @@ const N_ = e => e; const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences'; const WORKSPACE_KEY = 'workspace-names'; +class GeneralGroup extends Adw.PreferencesGroup { + static { + GObject.registerClass(this); + } + + constructor(settings) { + super(); + + const row = new Adw.SwitchRow({ + title: _('Show Previews In Top Bar'), + }); + this.add(row); + + settings.bind('embed-previews', + row, 'active', + Gio.SettingsBindFlags.DEFAULT); + } +} + class NewItem extends GObject.Object {} GObject.registerClass(NewItem); @@ -119,7 +138,7 @@ class WorkspacesList extends GObject.Object { } } -class WorkspaceSettingsWidget extends Adw.PreferencesGroup { +class WorkspacesGroup extends Adw.PreferencesGroup { static { GObject.registerClass(this); @@ -265,6 +284,9 @@ class NewWorkspaceRow extends Adw.PreferencesRow { export default class WorkspaceIndicatorPrefs extends ExtensionPreferences { getPreferencesWidget() { - return new WorkspaceSettingsWidget(); + const page = new Adw.PreferencesPage(); + page.add(new GeneralGroup(this.getSettings())); + page.add(new WorkspacesGroup()); + return page; } } diff --git a/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml b/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml new file mode 100644 index 00000000..c7c634ca --- /dev/null +++ b/extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml @@ -0,0 +1,15 @@ + + + + + + true + Show workspace previews in top bar + + + diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js index a4d3bbee..20d4caa2 100644 --- a/extensions/workspace-indicator/workspaceIndicator.js +++ b/extensions/workspace-indicator/workspaceIndicator.js @@ -22,8 +22,6 @@ const TOOLTIP_ANIMATION_TIME = 150; const SCROLL_TIME = 100; -const MAX_THUMBNAILS = 6; - let baseStyleClassName = ''; class WindowPreview extends St.Button { @@ -433,8 +431,11 @@ export class WorkspaceIndicator extends PanelMenu.Button { const { baseStyleClass = 'workspace-indicator', + settings, } = params; + this._settings = settings; + baseStyleClassName = baseStyleClass; this.add_style_class_name(baseStyleClassName); @@ -461,7 +462,6 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._workspacesItems = []; workspaceManager.connectObject( - 'notify::n-workspaces', this._updateThumbnailVisibility.bind(this), GObject.ConnectFlags.AFTER, 'workspace-switched', this._onWorkspaceSwitched.bind(this), GObject.ConnectFlags.AFTER, this); @@ -477,6 +477,8 @@ export class WorkspaceIndicator extends PanelMenu.Button { this._updateTopBarRedirect(); }); + this._settings.connect('changed::embed-previews', + () => this._updateThumbnailVisibility()); this._updateThumbnailVisibility(); } @@ -489,8 +491,7 @@ export class WorkspaceIndicator extends PanelMenu.Button { } _updateThumbnailVisibility() { - const {workspaceManager} = global; - const useMenu = workspaceManager.n_workspaces > MAX_THUMBNAILS; + const useMenu = !this._settings.get_boolean('embed-previews'); this.reactive = useMenu; this._statusLabel.visible = useMenu; diff --git a/po/POTFILES.in b/po/POTFILES.in index 182b2be0..e6e76039 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -21,4 +21,5 @@ extensions/window-list/prefs.js extensions/window-list/workspaceIndicator.js extensions/windowsNavigator/extension.js extensions/workspace-indicator/prefs.js +extensions/workspace-indicator/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml extensions/workspace-indicator/workspaceIndicator.js -- 2.44.0