import CS gnome-shell-extensions-40.7-34.el9

This commit is contained in:
AlmaLinux RelEng Bot 2026-08-24 09:07:44 -04:00
parent be6a5954ff
commit 6a3416c27e
6 changed files with 667 additions and 45 deletions

View File

@ -1,4 +1,4 @@
From 1982ab4218fa3a7ff622fff5af7c15c2e11351f7 Mon Sep 17 00:00:00 2001
From 4310f31f2cdd0212b9b5b175fede1c60b86eb1e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 23 Feb 2018 16:56:46 +0100
Subject: [PATCH] Include top-icons in classic session
@ -8,7 +8,7 @@ Subject: [PATCH] Include top-icons in classic session
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index afc0133..78dee5b 100644
index c7fccd0f..21c754d2 100644
--- a/meson.build
+++ b/meson.build
@@ -31,6 +31,7 @@ classic_extensions = [
@ -19,14 +19,14 @@ index afc0133..78dee5b 100644
'window-list'
]
@@ -49,7 +50,6 @@ all_extensions += [
@@ -52,7 +53,6 @@ all_extensions += [
'native-window-placement',
'panel-favorites',
'systemMonitor',
- 'top-icons',
'updates-dialog',
'user-theme'
]
'user-theme',
'window-grouper'
--
2.32.0
2.55.0

View File

@ -0,0 +1,26 @@
From 3c3e91d7eda6f24949cc61fede4bd2c33bf504b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 28 Apr 2026 18:29:17 +0200
Subject: [PATCH] desktop-icons: Include "Desktop Settings" in background menu
The extension preferences directly affect what is shown on the
desktop, so it makes sense to include it in the context menu.
---
extensions/desktop-icons/desktopGrid.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js
index b978c1c9..e0a24bbe 100644
--- a/extensions/desktop-icons/desktopGrid.js
+++ b/extensions/desktop-icons/desktopGrid.js
@@ -357,6 +357,7 @@ var DesktopGrid = GObject.registerClass({
menu.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop');
menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
menu.addSettingsAction(_("Display Settings"), 'gnome-display-panel.desktop');
+ menu.addAction(_("Desktop Settings"), () => ExtensionUtils.openPrefs());
menu.addSettingsAction(_("Settings"), 'gnome-control-center.desktop');
menu.actor.add_style_class_name('background-menu');
--
2.53.0

View File

@ -1,7 +1,7 @@
From 6623a374036e0f2458d4b36e268f6e4dcc19a2d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 May 2015 17:44:50 +0200
Subject: [PATCH 1/8] Add top-icons extension
Subject: [PATCH 1/9] Add top-icons extension
---
extensions/top-icons/extension.js | 96 +++++++++++++++++++++++++++
@ -164,13 +164,13 @@ index 41a7e99d..f754767c 100644
]
--
2.41.0
2.55.0
From a38891b5a6b0ba51998298963988bf146b2e1f86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 May 2015 18:05:41 +0200
Subject: [PATCH 2/8] Add dash-to-dock extension
Subject: [PATCH 2/9] Add dash-to-dock extension
---
extensions/dash-to-dock/Settings.ui | 2660 +++++++++++++++++
@ -44398,13 +44398,13 @@ index 6a40e212..14e60ccb 100644
+#~ msgid "0.000"
+#~ msgstr "0.000"
--
2.41.0
2.55.0
From 6cad2aac52022030bcbbf03066fc08937f6d177f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 May 2015 18:55:47 +0200
Subject: [PATCH 3/8] Add panel-favorites extension
Subject: [PATCH 3/9] Add panel-favorites extension
---
extensions/panel-favorites/extension.js | 257 ++++++++++++++++++++
@ -44741,13 +44741,13 @@ index e3d94918..12706001 100644
'user-theme'
]
--
2.41.0
2.55.0
From dbd3ebbb2d3cf380f2c0a13f13618fedfd8bbad4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 4 Mar 2016 17:07:21 +0100
Subject: [PATCH 4/8] Add updates-dialog extension
Subject: [PATCH 4/9] Add updates-dialog extension
---
extensions/updates-dialog/extension.js | 504 ++++++++++++++++++
@ -45372,13 +45372,433 @@ index 0ed12762..10b1d517 100644
extensions/window-list/extension.js
extensions/window-list/org.gnome.shell.extensions.window-list.gschema.xml
--
2.41.0
2.55.0
From 5de33c69acd297659ac3182e85f0fe32771dd75e Mon Sep 17 00:00:00 2001
From f28cde648757165a8ae3bc138eccea7836fb7f6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 26 Mar 2019 19:44:43 +0100
Subject: [PATCH 5/9] Add window-grouper extension
---
extensions/window-grouper/extension.js | 109 +++++++++
extensions/window-grouper/meson.build | 8 +
extensions/window-grouper/metadata.json.in | 11 +
...hell.extensions.window-grouper.gschema.xml | 9 +
extensions/window-grouper/prefs.js | 207 ++++++++++++++++++
extensions/window-grouper/stylesheet.css | 1 +
meson.build | 3 +-
7 files changed, 347 insertions(+), 1 deletion(-)
create mode 100644 extensions/window-grouper/extension.js
create mode 100644 extensions/window-grouper/meson.build
create mode 100644 extensions/window-grouper/metadata.json.in
create mode 100644 extensions/window-grouper/org.gnome.shell.extensions.window-grouper.gschema.xml
create mode 100644 extensions/window-grouper/prefs.js
create mode 100644 extensions/window-grouper/stylesheet.css
diff --git a/extensions/window-grouper/extension.js b/extensions/window-grouper/extension.js
new file mode 100644
index 00000000..f66a7641
--- /dev/null
+++ b/extensions/window-grouper/extension.js
@@ -0,0 +1,109 @@
+// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
+/* exported init */
+
+const { Shell } = imports.gi;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+
+class WindowMover {
+ constructor() {
+ this._settings = ExtensionUtils.getSettings();
+ this._appSystem = Shell.AppSystem.get_default();
+ this._appConfigs = new Set();
+ this._appData = new Map();
+
+ this._appsChangedId = this._appSystem.connect(
+ 'installed-changed', this._updateAppData.bind(this));
+
+ this._settings.connect('changed', this._updateAppConfigs.bind(this));
+ this._updateAppConfigs();
+ }
+
+ _updateAppConfigs() {
+ this._appConfigs.clear();
+
+ this._settings.get_strv('application-list').forEach(appId => {
+ this._appConfigs.add(appId);
+ });
+
+ this._updateAppData();
+ }
+
+ _updateAppData() {
+ let ids = [...this._appConfigs.values()];
+ let removedApps = [...this._appData.keys()].filter(
+ a => !ids.includes(a.id)
+ );
+ removedApps.forEach(app => {
+ app.disconnect(this._appData.get(app).windowsChangedId);
+ this._appData.delete(app);
+ });
+
+ let addedApps = ids.map(id => this._appSystem.lookup_app(id)).filter(
+ app => app != null && !this._appData.has(app)
+ );
+ addedApps.forEach(app => {
+ let data = {
+ windows: app.get_windows(),
+ windowsChangedId: app.connect(
+ 'windows-changed', this._appWindowsChanged.bind(this))
+ };
+ this._appData.set(app, data);
+ });
+ }
+
+ destroy() {
+ if (this._appsChangedId) {
+ this._appSystem.disconnect(this._appsChangedId);
+ this._appsChangedId = 0;
+ }
+
+ if (this._settings) {
+ this._settings.run_dispose();
+ this._settings = null;
+ }
+
+ this._appConfigs.clear();
+ this._updateAppData();
+ }
+
+ _appWindowsChanged(app) {
+ let data = this._appData.get(app);
+ let windows = app.get_windows();
+
+ // If get_compositor_private() returns non-NULL on a removed windows,
+ // the window still exists and is just moved to a different workspace
+ // or something; assume it'll be added back immediately, so keep it
+ // to avoid moving it again
+ windows.push(...data.windows.filter(
+ w => !windows.includes(w) && w.get_compositor_private() != null
+ ));
+
+ windows.filter(w => !data.windows.includes(w)).forEach(window => {
+ let leader = data.windows.find(w => w.get_pid() == window.get_pid());
+ if (leader)
+ window.change_workspace(leader.get_workspace());
+ });
+ data.windows = windows;
+ }
+}
+
+class Extension {
+ constructor() {
+ this._winMover = null;
+ }
+
+ enable() {
+ this._winMover = new WindowMover();
+ }
+
+ disable() {
+ this._winMover.destroy();
+ this._winMover = null;
+ }
+}
+
+function init() {
+ ExtensionUtils.initTranslations();
+ return new Extension();
+}
diff --git a/extensions/window-grouper/meson.build b/extensions/window-grouper/meson.build
new file mode 100644
index 00000000..c55a7830
--- /dev/null
+++ b/extensions/window-grouper/meson.build
@@ -0,0 +1,8 @@
+extension_data += configure_file(
+ input: metadata_name + '.in',
+ output: metadata_name,
+ configuration: metadata_conf
+)
+
+extension_sources += files('prefs.js')
+extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
diff --git a/extensions/window-grouper/metadata.json.in b/extensions/window-grouper/metadata.json.in
new file mode 100644
index 00000000..aa202c8f
--- /dev/null
+++ b/extensions/window-grouper/metadata.json.in
@@ -0,0 +1,11 @@
+{
+ "extension-id": "@extension_id@",
+ "uuid": "@uuid@",
+ "settings-schema": "@gschemaname@",
+ "gettext-domain": "@gettext_domain@",
+ "name": "Window grouper",
+ "description": "Keep windows that belong to the same process on the same workspace.",
+ "shell-version": [ "@shell_current@" ],
+ "original-authors": [ "fmuellner@redhat.com" ],
+ "url": "@url@"
+}
diff --git a/extensions/window-grouper/org.gnome.shell.extensions.window-grouper.gschema.xml b/extensions/window-grouper/org.gnome.shell.extensions.window-grouper.gschema.xml
new file mode 100644
index 00000000..ee052a6e
--- /dev/null
+++ b/extensions/window-grouper/org.gnome.shell.extensions.window-grouper.gschema.xml
@@ -0,0 +1,9 @@
+<schemalist gettext-domain="gnome-shell-extensions">
+ <schema id="org.gnome.shell.extensions.window-grouper" path="/org/gnome/shell/extensions/window-grouper/">
+ <key name="application-list" type="as">
+ <default>[ ]</default>
+ <summary>Application that should be grouped</summary>
+ <description>A list of application ids</description>
+ </key>
+ </schema>
+</schemalist>
diff --git a/extensions/window-grouper/prefs.js b/extensions/window-grouper/prefs.js
new file mode 100644
index 00000000..422d9290
--- /dev/null
+++ b/extensions/window-grouper/prefs.js
@@ -0,0 +1,207 @@
+// -*- mode: js2; indent-tabs-mode: nil; js2-basic-offset: 4 -*-
+/* exported init buildPrefsWidget */
+
+const { Gio, GLib, GObject, Gtk, Pango } = imports.gi;
+
+const ExtensionUtils = imports.misc.extensionUtils;
+const Me = ExtensionUtils.getCurrentExtension();
+
+const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
+const _ = Gettext.gettext;
+
+const SETTINGS_KEY = 'application-list';
+
+const WindowGrouperSettingsWidget = GObject.registerClass(
+class WindowGrouperSettingsWidget extends Gtk.ScrolledWindow {
+ _init(params) {
+ super._init({
+ hscrollbar_policy: Gtk.PolicyType.NEVER,
+ });
+
+ const box = new Gtk.Box({
+ orientation: Gtk.Orientation.VERTICAL,
+ halign: Gtk.Align.CENTER,
+ spacing: 12,
+ margin_top: 36,
+ margin_bottom: 36,
+ margin_start: 36,
+ margin_end: 36,
+ });
+ this.set_child(box);
+
+ box.append(new Gtk.Label({
+ label: '<b>%s</b>'.format(_('Grouped Apps')),
+ use_markup: true,
+ halign: Gtk.Align.START,
+ }));
+
+ this._list = new Gtk.ListBox({
+ selection_mode: Gtk.SelectionMode.NONE,
+ valign: Gtk.Align.START,
+ show_separators: true,
+ });
+ box.append(this._list);
+
+ const context = this._list.get_style_context();
+ const cssProvider = new Gtk.CssProvider();
+ cssProvider.load_from_data(
+ 'list { min-width: 30em; }', -1);
+
+ context.add_provider(cssProvider,
+ Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+ context.add_class('frame');
+
+ this._list.append(new NewAppRow());
+
+ this._actionGroup = new Gio.SimpleActionGroup();
+ this._list.insert_action_group('apps', this._actionGroup);
+
+ let action;
+ action = new Gio.SimpleAction({name: 'add'});
+ action.connect('activate', this._onAddActivated.bind(this));
+ this._actionGroup.add_action(action);
+
+ action = new Gio.SimpleAction({
+ name: 'remove',
+ parameter_type: new GLib.VariantType('s'),
+ });
+ action.connect('activate', this._onRemoveActivated.bind(this));
+ this._actionGroup.add_action(action);
+
+ this._settings = ExtensionUtils.getSettings();
+ this._settings.connect('changed', this._refresh.bind(this));
+
+ this._refresh();
+ }
+
+ _onAddActivated() {
+ const dialog = new Gtk.AppChooserDialog({
+ heading: _('Select an application for which grouping should apply'),
+ transient_for: this.get_root(),
+ modal: true
+ });
+
+ dialog.get_widget().show_all = true;
+
+ dialog.connect('response', (dialog, id) => {
+ const appInfo = id === Gtk.ResponseType.OK
+ ? dialog.get_app_info() : null;
+
+ if (appInfo) {
+ this._settings.set_strv(SETTINGS_KEY, [
+ ...this._settings.get_strv(SETTINGS_KEY),
+ appInfo.get_id(),
+ ]);
+ }
+ dialog.destroy();
+ });
+ dialog.show();
+ }
+
+ _onRemoveActivated(action, param) {
+ const removed = param.deepUnpack();
+ this._settings.set_strv(SETTINGS_KEY,
+ this._settings.get_strv(SETTINGS_KEY).filter(id => id !== removed));
+ }
+
+ _refresh() {
+ const oldRows = [...this._list].filter(row => !!row.id);
+
+ const oldIds = oldRows.map(r => r.id);
+ const newIds = this._settings.get_strv(SETTINGS_KEY);
+
+ newIds.forEach((id, i) => {
+ if (oldIds.includes(id))
+ return;
+
+ const appInfo = Gio.DesktopAppInfo.new(id);
+ if (appInfo)
+ this._list.insert(new AppRow(appInfo), i);
+ });
+
+ oldRows.forEach(row => {
+ if (!newIds.includes(row.id))
+ this._list.remove(row);
+ });
+ }
+});
+
+const AppRow = GObject.registerClass({
+ Properties: {
+ 'id': GObject.ParamSpec.string(
+ 'id', 'id', 'id',
+ GObject.ParamFlags.READABLE,
+ ''),
+ },
+}, class AppRow extends Gtk.ListBoxRow {
+ _init(appInfo) {
+ super._init({
+ activatable: false,
+ });
+ this._appInfo = appInfo;
+
+ const box = new Gtk.Box({
+ spacing: 0,
+ margin_top: 6,
+ margin_bottom: 6,
+ margin_start: 6,
+ margin_end: 6,
+ });
+ this.child = box;
+
+ const icon = new Gtk.Image({
+ gicon: appInfo.get_icon(),
+ pixel_size: 32,
+ });
+ icon.get_style_context().add_class('icon-dropshadow');
+ box.append(icon);
+
+ const label = new Gtk.Label({
+ label: appInfo.get_display_name(),
+ halign: Gtk.Align.START,
+ hexpand: true,
+ max_width_chars: 20,
+ ellipsize: Pango.EllipsizeMode.END,
+ });
+ box.append(label);
+
+ const button = new Gtk.Button({
+ action_name: 'apps.remove',
+ action_target: new GLib.Variant('s', this.id),
+ icon_name: 'edit-delete-symbolic',
+ });
+ box.append(button);
+ }
+
+ get id() {
+ return this._appInfo.get_id();
+ }
+});
+
+const NewAppRow = GObject.registerClass(
+class NewAppRow extends Gtk.ListBoxRow {
+ _init() {
+ super._init({
+ action_name: 'apps.add',
+ child: new Gtk.Image({
+ icon_name: 'list-add-symbolic',
+ pixel_size: 16,
+ margin_top: 12,
+ margin_bottom: 12,
+ margin_start: 12,
+ margin_end: 12,
+ }),
+ });
+
+ this.update_property(
+ [Gtk.AccessibleProperty.LABEL], [_('Add App')]);
+ }
+});
+
+function init() {
+ ExtensionUtils.initTranslations();
+}
+
+function buildPrefsWidget() {
+ return new WindowGrouperSettingsWidget();
+}
diff --git a/extensions/window-grouper/stylesheet.css b/extensions/window-grouper/stylesheet.css
new file mode 100644
index 00000000..25134b65
--- /dev/null
+++ b/extensions/window-grouper/stylesheet.css
@@ -0,0 +1 @@
+/* This extensions requires no special styling */
diff --git a/meson.build b/meson.build
index c609ae52..81974203 100644
--- a/meson.build
+++ b/meson.build
@@ -49,7 +49,8 @@ all_extensions += [
'panel-favorites',
'top-icons',
'updates-dialog',
- 'user-theme'
+ 'user-theme',
+ 'window-grouper'
]
enabled_extensions = get_option('enable_extensions')
--
2.55.0
From b48930a2e60d56bc585ac4a56b904647a2440b4f Mon Sep 17 00:00:00 2001
From: Carlos Soriano <csoriano@gnome.org>
Date: Mon, 13 Aug 2018 17:28:41 +0200
Subject: [PATCH 5/8] Add desktop icons extension
Subject: [PATCH 6/9] Add desktop icons extension
---
.../desktop-icons/createFolderDialog.js | 165 +++
@ -56921,7 +57341,7 @@ index 00000000..a468f4ab
+ }
+}
diff --git a/meson.build b/meson.build
index c609ae52..b83f0795 100644
index 81974203..3b188d9a 100644
--- a/meson.build
+++ b/meson.build
@@ -28,6 +28,7 @@ uuid_suffix = '@gnome-shell-extensions.gcampax.github.com'
@ -66729,13 +67149,13 @@ index 14e60ccb..4bdf7154 100644
+#~ msgid "Huge"
+#~ msgstr "巨大圖示"
--
2.41.0
2.55.0
From 8e23a9d2a5e2f6050bc3cfcebac71565ab5aa1e0 Mon Sep 17 00:00:00 2001
From 16e7dd5407fb0462fa0d023036a6627126a3a904 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 8 Oct 2021 19:36:18 +0200
Subject: [PATCH 6/8] Add dash-to-panel
Subject: [PATCH 7/9] Add dash-to-panel
---
extensions/dash-to-panel/COPYING | 341 +
@ -89964,7 +90384,7 @@ index 00000000..45d08a04
+ return Utils.mergeObjects(opts || {}, defaults);
+}
diff --git a/meson.build b/meson.build
index b83f0795..b3212c34 100644
index 3b188d9a..d3cbfb5f 100644
--- a/meson.build
+++ b/meson.build
@@ -46,6 +46,7 @@ all_extensions = default_extensions
@ -115612,13 +116032,13 @@ index 4bdf7154..1fc6b171 100644
#~ msgstr "退出應用程式"
--
2.41.0
2.55.0
From 8ae915152f47068f7f7855edf5a80a3caac6b8ee Mon Sep 17 00:00:00 2001
From 6fc4565a0b3a5bd6bc751c062b9d5814bc681a59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 2 Dec 2021 19:39:50 +0100
Subject: [PATCH 7/8] Add classification-banner
Subject: [PATCH 8/9] Add classification-banner
---
extensions/classification-banner/adwShim.js | 202 ++++++++++++++++++
@ -116300,7 +116720,7 @@ index 00000000..fb6a697e
+.classification-message { font-weight: bold; }
+.classification-banner { font-size: 0.9em; }
diff --git a/meson.build b/meson.build
index b3212c34..c73261f7 100644
index d3cbfb5f..b6a91b07 100644
--- a/meson.build
+++ b/meson.build
@@ -45,6 +45,7 @@ default_extensions += [
@ -116312,13 +116732,13 @@ index b3212c34..c73261f7 100644
'dash-to-panel',
'native-window-placement',
--
2.41.0
2.55.0
From 55f40c6c9c3fffe27dab3490412e1a7268393814 Mon Sep 17 00:00:00 2001
From 6533b08df2a363690543185490817b9c31e86493 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 12 Jan 2023 19:43:52 +0100
Subject: [PATCH 8/8] Add custom-menu extension
Subject: [PATCH 9/9] Add custom-menu extension
---
extensions/custom-menu/config.js | 484 ++++++++++++++++++++++++
@ -117084,7 +117504,7 @@ index 00000000..25134b65
@@ -0,0 +1 @@
+/* This extensions requires no special styling */
diff --git a/meson.build b/meson.build
index c73261f7..fa9e622a 100644
index b6a91b07..0c9b190e 100644
--- a/meson.build
+++ b/meson.build
@@ -46,6 +46,7 @@ all_extensions = default_extensions
@ -117096,5 +117516,5 @@ index c73261f7..fa9e622a 100644
'dash-to-panel',
'native-window-placement',
--
2.41.0
2.55.0

View File

@ -1,4 +1,4 @@
From c5e26a4c25754dc74e5f2aa9953bc2e30cfea94e Mon Sep 17 00:00:00 2001
From db5a4d33df4d85a8c4e1fa794cde85662555b01b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 May 2017 19:13:50 +0200
Subject: [PATCH 1/6] extensions: Resurrect systemMonitor extension
@ -476,7 +476,7 @@ index 00000000..13f95ec7
+ font-weight: bold;
+}
diff --git a/meson.build b/meson.build
index fa9e622a..70dbf007 100644
index 0c9b190e..7b21b2e9 100644
--- a/meson.build
+++ b/meson.build
@@ -51,6 +51,7 @@ all_extensions += [
@ -486,12 +486,12 @@ index fa9e622a..70dbf007 100644
+ 'systemMonitor',
'top-icons',
'updates-dialog',
'user-theme'
'user-theme',
--
2.41.0
2.55.0
From efe89316c5ae1721306defcdbb80227fe61414c4 Mon Sep 17 00:00:00 2001
From 6c4adb80ea81e070b232dd2cb9fe65cd7f7c64c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 17 May 2019 22:55:48 +0000
Subject: [PATCH 2/6] systemMonitor: Modernise code
@ -1081,10 +1081,10 @@ index 7b09df01..f7c6a4a9 100644
function init() {
return new Extension();
--
2.41.0
2.55.0
From fe1916c1b29ab64c73179ab4c86e106ff69f977d Mon Sep 17 00:00:00 2001
From f686b3fc4bf9968f346c7f04c42369dfea5ecbf6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 26 May 2021 19:50:37 +0200
Subject: [PATCH 3/6] systemMonitor: Make label property private
@ -1187,10 +1187,10 @@ index f7c6a4a9..bde25a1d 100644
_initValues() {
--
2.41.0
2.55.0
From b8457707c2b05b88d443587b729e1893cf8b8d3d Mon Sep 17 00:00:00 2001
From c0f6679c43c3b680cad4270c77f45afb76f58665 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 May 2017 19:31:58 +0200
Subject: [PATCH 4/6] systemMonitor: Move indicators to calendar
@ -1448,10 +1448,10 @@ index 13f95ec7..978ac12a 100644
.extension-systemMonitor-indicator-label {
--
2.41.0
2.55.0
From bc05d47dbd45f761b14d90f60fd16259486bcb53 Mon Sep 17 00:00:00 2001
From 68ac2d06628254b4831ab3fd1e3687d05c509330 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 May 2017 16:20:07 +0200
Subject: [PATCH 5/6] systemMonitor: Handle clicks on section title
@ -1503,10 +1503,10 @@ index 1fd01ab4..57bdb51f 100644
for (let i = 0; i < INDICATORS.length; i++) {
let indicator = new INDICATORS[i]();
--
2.41.0
2.55.0
From 597086c27823a7eb0b2124bfbe2c0572bbd1783d Mon Sep 17 00:00:00 2001
From bfb43d952a0077ab35109518fb0040bfa26bbca7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 May 2017 18:00:17 +0200
Subject: [PATCH 6/6] systemMonitor: Provide classic styling
@ -1547,5 +1547,5 @@ index 48504f63..b6548b14 100644
+ extension_data += files('classic.css')
+endif
--
2.41.0
2.55.0

View File

@ -0,0 +1,147 @@
From 005d74cc09a1ab616a370af19377b615631f5621 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 43315280..069d4fca 100644
--- a/extensions/workspace-indicator/workspaceIndicator.js
+++ b/extensions/workspace-indicator/workspaceIndicator.js
@@ -564,7 +564,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) => {
@@ -589,7 +589,7 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
}
_updateWorkspaceLabels() {
- const items = [...this._workspacesSection.actor];
+ const items = [...this._workspacesSection.box];
items.forEach(
(item, i) => (item.label.text = Meta.prefs_get_workspace_name(i)));
}
@@ -598,7 +598,7 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
const {workspaceManager} = global;
const active = workspaceManager.get_active_workspace_index();
- const items = [...this._workspacesSection.actor];
+ const items = [...this._workspacesSection.box];
items.forEach((item, i) => {
item.setOrnament(i === active
? PopupMenu.Ornament.CHECK
--
2.53.0
From 60151f3feae952b796b51d527f6b69fc7e5db38a 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 069d4fca..b558bcbd 100644
--- a/extensions/workspace-indicator/workspaceIndicator.js
+++ b/extensions/workspace-indicator/workspaceIndicator.js
@@ -16,6 +16,7 @@ const DND = imports.ui.dnd;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const {ensureActorVisibleInScrollView} = imports.misc.util;
const TOOLTIP_OFFSET = 6;
const TOOLTIP_ANIMATION_TIME = 150;
@@ -530,6 +531,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());
@@ -579,6 +590,11 @@ class WorkspacesMenu extends PopupMenu.PopupMenu {
this._desktopSettings.set_strv('workspace-names',
[...newNames, ...oldNames.slice(nLabels)]);
});
+ item.connect('notify::active', () => {
+ const view = this._workspacesSection.actor;
+ if (item.active)
+ ensureActorVisibleInScrollView(view, item);
+ });
this._workspacesSection.addMenuItem(item);
}
--
2.53.0
From dac05ddafe3dff480299a724a12b68b19862d651 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 f0d7564f..76193b8c 100644
--- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js
@@ -1538,6 +1538,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

View File

@ -7,7 +7,7 @@
Name: gnome-shell-extensions
Version: 40.7
Release: 31%{?dist}
Release: 34%{?dist}
Summary: Modify and extend GNOME Shell functionality and behavior
License: GPLv2+
@ -54,6 +54,8 @@ Patch031: 0001-dash-to-panel-Remove-faulty-version-check.patch
Patch032: window-list-attention-indicator.patch
Patch033: 0001-dash-to-panel-Stop-messing-with-overview-allocation.patch
Patch034: improve-workspace-names.patch
Patch035: scrollable-workspace-menu.patch
Patch036: 0001-desktop-icons-Include-Desktop-Settings-in-background.patch
%description
GNOME Shell Extensions is a collection of extensions providing additional and
@ -79,6 +81,7 @@ Enabled extensions:
* top-icons
* updates-dialog
* user-theme
* window-grouper
* window-list
* windowsNavigator
* workspace-indicator
@ -306,6 +309,15 @@ This GNOME Shell extension enables loading a GNOME Shell theme from
~/.themes/<name>/gnome-shell/.
%package -n %{pkg_prefix}-window-grouper
Summary: Keep windows that belong to the same process on the same workspace
License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-window-grouper
This GNOME Shell extension keeps windows that belong to the same process on the same workspace.
%package -n %{pkg_prefix}-window-list
Summary: Display a window list at the bottom of the screen in GNOME Shell
License: GPLv2+
@ -458,6 +470,11 @@ workspaces.
%{_datadir}/gnome-shell/extensions/user-theme*/
%files -n %{pkg_prefix}-window-grouper
%{_datadir}/gnome-shell/extensions/window-grouper*/
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-grouper.gschema.xml
%files -n %{pkg_prefix}-window-list
%{_datadir}/gnome-shell/extensions/window-list*/
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml
@ -473,6 +490,18 @@ workspaces.
%changelog
* Thu Jul 09 2026 Florian Müllner <fmuellner@redhat.com> - 40.7-34
- Add "window-grouper" extension
Resolves: RHEL-193200
* Tue Apr 28 2026 Florian Müllner <fmuellner@redhat.com> - 40.7-33
- Include "Desktop Settings" in background menu
Resolves: RHEL-84188
* Tue Mar 03 2026 Florian Müllner <fmuellner@redhat.com> - 40.7-32
- Support scrolling in workspace menu
Resolves: RHEL-153023
* Tue Nov 18 2025 Florian Müllner <fmuellner@redhat.com> - 40.7-31
- Fix workspace indicator cleanups
Resolves: RHEL-129395