148 lines
5.9 KiB
Diff
148 lines
5.9 KiB
Diff
From e8665261d2e99b3cfaa4d784bd47f95a5fdc3b52 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
Date: Tue, 3 Mar 2026 12:48:13 +0100
|
|
Subject: [PATCH 1/3] workspace-indicator: Use section box to iterate items
|
|
|
|
Menu items are added to a menu's box, so it is more correct to
|
|
use that to access items, even when for menu sections the box
|
|
is also used as the menu's actor.
|
|
|
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/445>
|
|
---
|
|
extensions/workspace-indicator/workspaceIndicator.js | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js
|
|
index eb31fc62..af4c69bf 100644
|
|
--- a/extensions/workspace-indicator/workspaceIndicator.js
|
|
+++ b/extensions/workspace-indicator/workspaceIndicator.js
|
|
@@ -595,7 +595,7 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
|
const {workspaceManager} = global;
|
|
const {nWorkspaces} = workspaceManager;
|
|
|
|
- const section = this._workspacesSection.actor;
|
|
+ const section = this._workspacesSection.box;
|
|
while (section.get_n_children() < nWorkspaces) {
|
|
const item = new EditableMenuItem();
|
|
item.connect('activate', (o, event) => {
|
|
@@ -624,7 +624,7 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
|
|
|
_updateWorkspaceLabels() {
|
|
const items =
|
|
- this._workspacesSection.actor.get_children().map(c => c._delegate);
|
|
+ this._workspacesSection.box.get_children().map(c => c._delegate);
|
|
items.forEach(
|
|
(item, i) => (item.label.text = Meta.prefs_get_workspace_name(i)));
|
|
}
|
|
@@ -634,7 +634,7 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
|
const active = workspaceManager.get_active_workspace_index();
|
|
|
|
const items =
|
|
- this._workspacesSection.actor.get_children().map(c => c._delegate);
|
|
+ this._workspacesSection.box.get_children().map(c => c._delegate);
|
|
items.forEach((item, i) => {
|
|
item.setOrnament(i === active
|
|
? PopupMenu.Ornament.CHECK
|
|
--
|
|
2.53.0
|
|
|
|
|
|
From 6f2fba8eba7f09834448a5588b825235213314a2 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
Date: Mon, 2 Mar 2026 18:49:16 +0100
|
|
Subject: [PATCH 2/3] workspace-indicator: Support scrolling in workspace menu
|
|
|
|
While we should always have enough screen estate to fit a reasonable
|
|
number of workspaces, the number can go up to 36 where we are pretty
|
|
much guaranteed to run out of space.
|
|
|
|
Support those less common cases by making the workspace list scrollable.
|
|
|
|
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/445>
|
|
---
|
|
.../workspace-indicator/workspaceIndicator.js | 16 ++++++++++++++++
|
|
1 file changed, 16 insertions(+)
|
|
|
|
diff --git a/extensions/workspace-indicator/workspaceIndicator.js b/extensions/workspace-indicator/workspaceIndicator.js
|
|
index af4c69bf..287fa13c 100644
|
|
--- a/extensions/workspace-indicator/workspaceIndicator.js
|
|
+++ b/extensions/workspace-indicator/workspaceIndicator.js
|
|
@@ -6,6 +6,7 @@ const Main = imports.ui.main;
|
|
const PanelMenu = imports.ui.panelMenu;
|
|
const PopupMenu = imports.ui.popupMenu;
|
|
const Tweener = imports.ui.tweener;
|
|
+const { ensureActorVisibleInScrollView } = imports.misc.util;
|
|
|
|
const Signals = imports.signals;
|
|
|
|
@@ -548,6 +549,16 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
|
this.actor.connect('destroy', () => this._onDestroy());
|
|
|
|
this._workspacesSection = new PopupMenu.PopupMenuSection();
|
|
+
|
|
+ // make the section scrollable to avoid growing indefinitely
|
|
+ const scrollView = new St.ScrollView({
|
|
+ style_class: 'vfade',
|
|
+ hscrollbar_policy: St.PolicyType.NEVER,
|
|
+ });
|
|
+ scrollView.add_actor(this._workspacesSection.box);
|
|
+ scrollView._delegate = this._workspacesSection;
|
|
+ this._workspacesSection.actor = scrollView;
|
|
+
|
|
this.addMenuItem(this._workspacesSection);
|
|
|
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
|
@@ -612,6 +623,11 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
|
|
this._desktopSettings.set_strv('workspace-names',
|
|
[...newNames, ...oldNames.slice(nLabels)]);
|
|
});
|
|
+ item.connect('active-changed', (i, active) => {
|
|
+ const view = this._workspacesSection.actor;
|
|
+ if (active)
|
|
+ ensureActorVisibleInScrollView(view, item.actor);
|
|
+ });
|
|
this._workspacesSection.addMenuItem(item);
|
|
}
|
|
|
|
--
|
|
2.53.0
|
|
|
|
|
|
From 05615be8a57199d3137692bb9c4537437001628f Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
|
Date: Wed, 18 Mar 2026 14:04:34 +0100
|
|
Subject: [PATCH 3/3] window-list: Fix flipping menu arrow
|
|
|
|
The `updateArrowSide()` method changes the effective arrow side,
|
|
but not the "user arrow side" that tracks the explicitly requested
|
|
side.
|
|
|
|
This breaks scrolling the workspaces menu, because when checking
|
|
whether the menu needs flipping due to size constraints, it does
|
|
not fit on either side and boxpointer reverts to the originally
|
|
requested side.
|
|
|
|
This is a shell issue[0], but we can work around it to fix the
|
|
immediate issue without a shell update.
|
|
|
|
[0] https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/4120
|
|
---
|
|
extensions/window-list/extension.js | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
|
|
index 37b5ea09..d1342898 100644
|
|
--- a/extensions/window-list/extension.js
|
|
+++ b/extensions/window-list/extension.js
|
|
@@ -1243,6 +1243,7 @@ class BottomWorkspaceIndicator extends WorkspaceIndicator {
|
|
return;
|
|
|
|
this.menu.actor.updateArrowSide(St.Side.BOTTOM);
|
|
+ this.menu.actor._userArrowSide = St.Side.BOTTOM;
|
|
this.menu.actor.remove_style_class_name('panel-menu');
|
|
}
|
|
});
|
|
--
|
|
2.53.0
|
|
|