diff --git a/gnome-shell-extensions.spec b/gnome-shell-extensions.spec index 4ec7c8c..feb54d1 100644 --- a/gnome-shell-extensions.spec +++ b/gnome-shell-extensions.spec @@ -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 - 3.32.1-50 +- Support scrolling in workspace menu + Resolves: RHEL-143030 + * Mon Jan 26 2026 Florian Müllner - 3.32.1-49 - Fix style regressions in GNOME classic Resolves: RHEL-136283 diff --git a/scrollable-workspace-menu.patch b/scrollable-workspace-menu.patch new file mode 100644 index 0000000..f81c5bc --- /dev/null +++ b/scrollable-workspace-menu.patch @@ -0,0 +1,109 @@ +From e8665261d2e99b3cfaa4d784bd47f95a5fdc3b52 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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: +--- + 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?= +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: +--- + .../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 +