Support scrolling in workspace menu

Resolves: https://issues.redhat.com/browse/RHEL-143030
This commit is contained in:
Florian Müllner 2026-03-03 20:26:08 +01:00
parent 74ff4a9cc4
commit 33b108777a
No known key found for this signature in database
2 changed files with 115 additions and 1 deletions

View File

@ -6,7 +6,7 @@
Name: gnome-shell-extensions
Version: 3.32.1
Release: 49%{?dist}
Release: 50%{?dist}
Summary: Modify and extend GNOME Shell functionality and behavior
Group: User Interface/Desktops
@ -66,6 +66,7 @@ Patch0037: dash-to-panel-attention-indicator.patch
Patch0038: improve-workspace-names.patch
Patch0039: 0001-dash-to-panel-Consider-range-around-edges-for-dwelli.patch
Patch0040: 0001-dash-to-panel-Don-t-create-main-panel-without-a-moni.patch
Patch0041: scrollable-workspace-menu.patch
%description
GNOME Shell Extensions is a collection of extensions providing additional and
@ -581,6 +582,10 @@ cp $RPM_SOURCE_DIR/gnome-classic.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions
%changelog
* Tue Mar 03 2026 Florian Müllner <fmuellner@redhat.com> - 3.32.1-50
- Support scrolling in workspace menu
Resolves: RHEL-143030
* Mon Jan 26 2026 Florian Müllner <fmuellner@redhat.com> - 3.32.1-49
- Fix style regressions in GNOME classic
Resolves: RHEL-136283

View File

@ -0,0 +1,109 @@
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/2] 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/2] 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