Add window-grouper extension

Resolves: https://redhat.atlassian.net/browse/RHEL-193200
This commit is contained in:
Florian Müllner 2026-07-09 17:27:56 +02:00
parent 66d17b8ff0
commit cc696100e6
No known key found for this signature in database
4 changed files with 484 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

@ -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

@ -7,7 +7,7 @@
Name: gnome-shell-extensions
Version: 40.7
Release: 33%{?dist}
Release: 34%{?dist}
Summary: Modify and extend GNOME Shell functionality and behavior
License: GPLv2+
@ -81,6 +81,7 @@ Enabled extensions:
* top-icons
* updates-dialog
* user-theme
* window-grouper
* window-list
* windowsNavigator
* workspace-indicator
@ -308,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+
@ -460,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
@ -475,6 +490,10 @@ 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

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