Compare commits

...

No commits in common. "c9-beta" and "c8" have entirely different histories.
c9-beta ... c8

49 changed files with 24650 additions and 69602 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/gnome-shell-extensions-40.7.tar.xz SOURCES/gnome-shell-extensions-3.32.1.tar.xz

View File

@ -1 +1 @@
a905a152407590d18e8dc14bb4133fbde0e03abb SOURCES/gnome-shell-extensions-40.7.tar.xz 51c1c16bcd0dc9125834b32d7c539c38fa9c4f52 SOURCES/gnome-shell-extensions-3.32.1.tar.xz

View File

@ -1,7 +1,7 @@
From cca3ca69a5b5a5551a9130ab4b9ea6909666108a Mon Sep 17 00:00:00 2001 From 2a498fef3ec02d834346b545aeacba0a6224494e Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build> From: rpm-build <rpm-build>
Date: Thu, 28 Jan 2021 00:06:12 +0100 Date: Thu, 28 Jan 2021 00:06:12 +0100
Subject: [PATCH 1/5] Add gesture-inhibitor extension Subject: [PATCH] Add gesture-inhibitor extension
This extension may disable default GNOME Shell gestures. This extension may disable default GNOME Shell gestures.
--- ---
@ -170,269 +170,17 @@ index 00000000..37b93f21
@@ -0,0 +1 @@ @@ -0,0 +1 @@
+/* Add your custom extension styling here */ +/* Add your custom extension styling here */
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index ec600041..615dc5b0 100644 index e163b84d..ba84f8f3 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -50,6 +50,7 @@ all_extensions += [ @@ -55,6 +55,7 @@ all_extensions += [
'custom-menu',
'dash-to-dock', 'dash-to-dock',
'dash-to-panel', 'dash-to-panel',
'disable-screenshield',
+ 'gesture-inhibitor', + 'gesture-inhibitor',
'native-window-placement', 'native-window-placement',
'no-hot-corner',
'panel-favorites', 'panel-favorites',
'systemMonitor',
-- --
2.41.0 2.32.0
From 45e88e7b5bb9537c44384a23af7d00f023d55793 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 Oct 2021 19:48:46 +0200
Subject: [PATCH 2/5] gesture-inhibitor: Fix up indentation
---
extensions/gesture-inhibitor/extension.js | 59 +++++++++++------------
1 file changed, 29 insertions(+), 30 deletions(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index e74ede2f..734d61cc 100644
--- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js
@@ -29,44 +29,43 @@ const Gio = imports.gi.Gio;
class Extension {
constructor() {
- this._settings = ExtensionUtils.getSettings();
- let actions = global.stage.get_actions();
+ this._settings = ExtensionUtils.getSettings();
+ let actions = global.stage.get_actions();
- actions.forEach(a => {
- if (a instanceof ViewSelector.ShowOverviewAction)
- this._showOverview = a;
- else if (a instanceof WindowManager.AppSwitchAction)
- this._appSwitch = a;
- else if (a instanceof EdgeDragAction.EdgeDragAction &&
- a._side == St.Side.BOTTOM)
- this._showOsk = a;
- else if (a instanceof EdgeDragAction.EdgeDragAction &&
- a._side == St.Side.TOP)
- this._unfullscreen = a;
- else if (a instanceof EdgeDragAction.EdgeDragAction)
- this._showAppGrid = a;
- });
+ actions.forEach(a => {
+ if (a instanceof ViewSelector.ShowOverviewAction)
+ this._showOverview = a;
+ else if (a instanceof WindowManager.AppSwitchAction)
+ this._appSwitch = a;
+ else if (a instanceof EdgeDragAction.EdgeDragAction &&
+ a._side == St.Side.BOTTOM)
+ this._showOsk = a;
+ else if (a instanceof EdgeDragAction.EdgeDragAction &&
+ a._side == St.Side.TOP)
+ this._unfullscreen = a;
+ else if (a instanceof EdgeDragAction.EdgeDragAction)
+ this._showAppGrid = a;
+ });
- this._map = [
- { setting: 'overview', action: this._showOverview },
- { setting: 'app-switch', action: this._appSwitch },
- { setting: 'show-osk', action: this._showOsk },
- { setting: 'unfullscreen', action: this._unfullscreen },
- { setting: 'show-app-grid', action: this._showAppGrid }
- ];
+ this._map = [
+ { setting: 'overview', action: this._showOverview },
+ { setting: 'app-switch', action: this._appSwitch },
+ { setting: 'show-osk', action: this._showOsk },
+ { setting: 'unfullscreen', action: this._unfullscreen },
+ { setting: 'show-app-grid', action: this._showAppGrid }
+ ];
}
enable() {
- this._map.forEach(m => {
- this._settings.bind(m.setting, m.action, 'enabled',
- Gio.SettingsBindFlags.DEFAULT);
- });
+ this._map.forEach(m => {
+ this._settings.bind(m.setting, m.action, 'enabled',
+ Gio.SettingsBindFlags.DEFAULT);
+ });
}
disable() {
- this._map.forEach(m => {
- m.action.enabled = true;
- });
+ this._map.forEach(
+ m => (m.action.enabled = true));
}
}
--
2.41.0
From fe0dd05f0c8c5cfeb5edbc6b9bb73417d42f6ee8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 Oct 2021 19:47:05 +0200
Subject: [PATCH 3/5] gesture-inhibitor: Adjust for GNOME 40 changes
---
extensions/gesture-inhibitor/extension.js | 11 +++--------
...ome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ----
2 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index 734d61cc..13586108 100644
--- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js
@@ -21,8 +21,8 @@
const Clutter = imports.gi.Clutter;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
-const ViewSelector = imports.ui.viewSelector;
const EdgeDragAction = imports.ui.edgeDragAction;
+const Main = imports.ui.main;
const WindowManager = imports.ui.windowManager;
const St = imports.gi.St;
const Gio = imports.gi.Gio;
@@ -33,9 +33,7 @@ class Extension {
let actions = global.stage.get_actions();
actions.forEach(a => {
- if (a instanceof ViewSelector.ShowOverviewAction)
- this._showOverview = a;
- else if (a instanceof WindowManager.AppSwitchAction)
+ if (a instanceof WindowManager.AppSwitchAction)
this._appSwitch = a;
else if (a instanceof EdgeDragAction.EdgeDragAction &&
a._side == St.Side.BOTTOM)
@@ -43,16 +41,13 @@ class Extension {
else if (a instanceof EdgeDragAction.EdgeDragAction &&
a._side == St.Side.TOP)
this._unfullscreen = a;
- else if (a instanceof EdgeDragAction.EdgeDragAction)
- this._showAppGrid = a;
});
this._map = [
- { setting: 'overview', action: this._showOverview },
+ { setting: 'overview', action: Main.overview._swipeTracker },
{ setting: 'app-switch', action: this._appSwitch },
{ setting: 'show-osk', action: this._showOsk },
{ setting: 'unfullscreen', action: this._unfullscreen },
- { setting: 'show-app-grid', action: this._showAppGrid }
];
}
diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
index 1d67dcc0..4bdf9260 100644
--- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
@@ -1,9 +1,5 @@
<schemalist>
<schema id="org.gnome.shell.extensions.gesture-inhibitor" path="/org/gnome/shell/extensions/gesture-inhibitor/">
- <key name="show-app-grid" type="b">
- <default>true</default>
- <summary>Show app grid gesture</summary>
- </key>
<key name="show-osk" type="b">
<default>true</default>
<summary>Show OSK gesture</summary>
--
2.41.0
From 952fa19311faecf50b02ab0f8807c2bc890848be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 Nov 2021 15:54:23 +0100
Subject: [PATCH 4/5] gesture-inhibitor: Unbind setting on disable
---
extensions/gesture-inhibitor/extension.js | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index 13586108..02b34ec4 100644
--- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js
@@ -59,8 +59,10 @@ class Extension {
}
disable() {
- this._map.forEach(
- m => (m.action.enabled = true));
+ this._map.forEach(m => {
+ Gio.Settings.unbind(m.action, 'enabled');
+ m.action.enabled = true;
+ });
}
}
--
2.41.0
From ef7a6cb1eac7b3d6d4d047174502d88f4e78959e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 Nov 2021 16:06:09 +0100
Subject: [PATCH 5/5] gesture-inhibitor: Override :enabled property
Otherwise gnome-shell can re-enable an inhibited gesture behind our
back.
---
extensions/gesture-inhibitor/extension.js | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index 02b34ec4..fb8a6dc0 100644
--- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js
@@ -49,18 +49,39 @@ class Extension {
{ setting: 'show-osk', action: this._showOsk },
{ setting: 'unfullscreen', action: this._unfullscreen },
];
+
+ this._enabledDesc = Object.getOwnPropertyDescriptor(
+ Clutter.ActorMeta.prototype, 'enabled');
+ }
+
+ _overrideEnabledSetter(obj, set) {
+ if (!(obj instanceof Clutter.ActorMeta))
+ return;
+
+ const desc = set
+ ? { ...this._enabledDesc, set }
+ : { ...this._enabledDesc };
+ Object.defineProperty(obj, 'enabled', desc);
}
enable() {
+ const settings = this._settings;
+
this._map.forEach(m => {
- this._settings.bind(m.setting, m.action, 'enabled',
+ settings.bind(m.setting, m.action, 'enabled',
Gio.SettingsBindFlags.DEFAULT);
+
+ this._overrideEnabledSetter(m.action, function (value) {
+ if (settings.get_boolean(m.setting))
+ this.set_enabled(value);
+ });
});
}
disable() {
this._map.forEach(m => {
Gio.Settings.unbind(m.action, 'enabled');
+ this._overrideEnabledSetter(m.action);
m.action.enabled = true;
});
}
--
2.41.0

View File

@ -1,101 +0,0 @@
From 13ea90a5f6f5e73d83a2ab04ea70c6263f6d8f5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 21 May 2024 19:01:30 +0200
Subject: [PATCH] Add move-clock extension
---
extensions/move-clock/extension.js | 38 ++++++++++++++++++++++++++
extensions/move-clock/meson.build | 5 ++++
extensions/move-clock/metadata.json.in | 10 +++++++
meson.build | 1 +
4 files changed, 54 insertions(+)
create mode 100644 extensions/move-clock/extension.js
create mode 100644 extensions/move-clock/meson.build
create mode 100644 extensions/move-clock/metadata.json.in
diff --git a/extensions/move-clock/extension.js b/extensions/move-clock/extension.js
new file mode 100644
index 00000000..571567f7
--- /dev/null
+++ b/extensions/move-clock/extension.js
@@ -0,0 +1,38 @@
+/* exported enable disable */
+const Main = imports.ui.main;
+const SessionMode = imports.ui.sessionMode;
+
+class MoveClockExtension {
+ enable() {
+ const panel = SessionMode._modes['user'].panel;
+
+ const clockIndex = panel.center.indexOf('dateMenu');
+ this._modified = clockIndex !== -1;
+
+ if (!this._modified)
+ return;
+
+ panel.center.splice(clockIndex, 1);
+ panel.right.splice(-1, 0, 'dateMenu');
+
+ Main.panel._updatePanel();
+ }
+
+ disable() {
+ if (!this._modified)
+ return;
+
+ const panel = SessionMode._modes['user'].panel;
+ const clockIndex = panel.right.indexOf('dateMenu');
+
+ if (clockIndex !== -1)
+ panel.right.splice(clockIndex, 1);
+ panel.center.unshift('dateMenu');
+
+ Main.panel._updatePanel();
+ }
+}
+
+function init() {
+ return new MoveClockExtension();
+}
diff --git a/extensions/move-clock/meson.build b/extensions/move-clock/meson.build
new file mode 100644
index 00000000..48504f63
--- /dev/null
+++ b/extensions/move-clock/meson.build
@@ -0,0 +1,5 @@
+extension_data += configure_file(
+ input: metadata_name + '.in',
+ output: metadata_name,
+ configuration: metadata_conf
+)
diff --git a/extensions/move-clock/metadata.json.in b/extensions/move-clock/metadata.json.in
new file mode 100644
index 00000000..d872ab63
--- /dev/null
+++ b/extensions/move-clock/metadata.json.in
@@ -0,0 +1,10 @@
+{
+"extension-id": "@extension_id@",
+"uuid": "@uuid@",
+"settings-schema": "@gschemaname@",
+"gettext-domain": "@gettext_domain@",
+"name": "Move notification menu",
+"description": "Move the notification menu to the right",
+"shell-version": [ "@shell_current@" ],
+"url": "@url@"
+}
diff --git a/meson.build b/meson.build
index 7e6ed3e8..ea6efb76 100644
--- a/meson.build
+++ b/meson.build
@@ -53,6 +53,7 @@ all_extensions += [
'dash-to-dock',
'dash-to-panel',
'gesture-inhibitor',
+ 'move-clock',
'native-window-placement',
'panel-favorites',
'systemMonitor',
--
2.45.1

View File

@ -1,4 +1,4 @@
From 1982ab4218fa3a7ff622fff5af7c15c2e11351f7 Mon Sep 17 00:00:00 2001 From a3db60786407481efbfc4875f887d03b58f0a7b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 23 Feb 2018 16:56:46 +0100 Date: Fri, 23 Feb 2018 16:56:46 +0100
Subject: [PATCH] Include top-icons in classic session Subject: [PATCH] Include top-icons in classic session
@ -8,10 +8,10 @@ Subject: [PATCH] Include top-icons in classic session
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index afc0133..78dee5b 100644 index 6764f9a..32743ed 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -31,6 +31,7 @@ classic_extensions = [ @@ -36,6 +36,7 @@ classic_extensions = [
'desktop-icons', 'desktop-icons',
'places-menu', 'places-menu',
'launch-new-instance', 'launch-new-instance',
@ -19,14 +19,14 @@ index afc0133..78dee5b 100644
'window-list' 'window-list'
] ]
@@ -49,7 +50,6 @@ all_extensions += [ @@ -56,7 +57,6 @@ all_extensions += [
'native-window-placement', 'no-hot-corner',
'panel-favorites', 'panel-favorites',
'systemMonitor', 'systemMonitor',
- 'top-icons', - 'top-icons',
'updates-dialog', 'updates-dialog',
'user-theme' 'user-theme',
] 'window-grouper'
-- --
2.32.0 2.21.0

View File

@ -0,0 +1,83 @@
From f5e47cd8ca32ae433f6906b01a509c5a304894d9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Sat, 24 Oct 2020 01:14:44 +0200
Subject: [PATCH] Update desktop-icons gettext domain
---
extensions/desktop-icons/createFolderDialog.js | 2 +-
extensions/desktop-icons/desktopGrid.js | 2 +-
extensions/desktop-icons/fileItem.js | 2 +-
extensions/desktop-icons/prefs.js | 8 +++++---
4 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/extensions/desktop-icons/createFolderDialog.js b/extensions/desktop-icons/createFolderDialog.js
index f3e40e9..5038762 100644
--- a/extensions/desktop-icons/createFolderDialog.js
+++ b/extensions/desktop-icons/createFolderDialog.js
@@ -21,7 +21,7 @@ const { Clutter, GObject, GLib, Gio, St } = imports.gi;
const Signals = imports.signals;
const Dialog = imports.ui.dialog;
-const Gettext = imports.gettext.domain('desktop-icons');
+const Gettext = imports.gettext.domain('gnome-shell-extensions');
const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry;
const Tweener = imports.ui.tweener;
diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js
index a2d1f12..94d2dfd 100644
--- a/extensions/desktop-icons/desktopGrid.js
+++ b/extensions/desktop-icons/desktopGrid.js
@@ -44,7 +44,7 @@ const Util = imports.misc.util;
const Clipboard = St.Clipboard.get_default();
const CLIPBOARD_TYPE = St.ClipboardType.CLIPBOARD;
-const Gettext = imports.gettext.domain('desktop-icons');
+const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 0c6a54d..d6d43c9 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -42,7 +42,7 @@ const Prefs = Me.imports.prefs;
const DBusUtils = Me.imports.dbusUtils;
const DesktopIconsUtil = Me.imports.desktopIconsUtil;
-const Gettext = imports.gettext.domain('desktop-icons');
+const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
diff --git a/extensions/desktop-icons/prefs.js b/extensions/desktop-icons/prefs.js
index 4b8d986..51daf15 100644
--- a/extensions/desktop-icons/prefs.js
+++ b/extensions/desktop-icons/prefs.js
@@ -26,7 +26,7 @@ const Gettext = imports.gettext;
const Config = imports.misc.config;
-var _ = Gettext.domain('desktop-icons').gettext;
+var _ = Gettext.domain('gnome-shell-extensions').gettext;
const SCHEMA_NAUTILUS = 'org.gnome.nautilus.preferences';
const SCHEMA_GTK = 'org.gtk.Settings.FileChooser';
@@ -51,11 +51,13 @@ var CLICK_POLICY_SINGLE = false;
function initTranslations() {
let extension = ExtensionUtils.getCurrentExtension();
+ let domain = extension.metadata['gettext-domain'] || 'desktop-icons';
+
let localedir = extension.dir.get_child('locale');
if (localedir.query_exists(null))
- Gettext.bindtextdomain('desktop-icons', localedir.get_path());
+ Gettext.bindtextdomain(domain, localedir.get_path());
else
- Gettext.bindtextdomain('desktop-icons', Config.LOCALEDIR);
+ Gettext.bindtextdomain(domain, Config.LOCALEDIR);
}
function init() {
--
2.21.1

View File

@ -1,19 +1,48 @@
From 9ca03a744552c43251523fd23292b243130e1f89 Mon Sep 17 00:00:00 2001 From e768ad73e2d68b3f1567051675ba0539a75e3105 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 24 May 2021 15:36:04 +0200 Date: Sat, 18 May 2019 19:37:05 +0200
Subject: [PATCH] Update style Subject: [PATCH] Update style
--- ---
data/gnome-shell-sass | 2 +- data/gnome-shell-sass | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
Submodule data/gnome-shell-sass 9d66f7d..60230f4: Submodule data/gnome-shell-sass 1a56956..8842e57:
diff --git a/data/gnome-shell-sass/widgets/_panel.scss b/data/gnome-shell-sass/widgets/_panel.scss diff --git a/data/gnome-shell-sass/_common.scss b/data/gnome-shell-sass/_common.scss
index 1f46507..ad638b2 100644 index a6357ba..62d9c82 100644
--- a/data/gnome-shell-sass/widgets/_panel.scss --- a/data/gnome-shell-sass/_common.scss
+++ b/data/gnome-shell-sass/widgets/_panel.scss +++ b/data/gnome-shell-sass/_common.scss
@@ -67,6 +67,11 @@ $panel_transition_duration: 250ms; // same as the overview transition duration @@ -571,6 +571,18 @@ StScrollBar {
app menu inside the main app window itself rather than the top bar
*/
+/*************
+ * App Icons *
+ *************/
+/* Outline for low res icons */
+.lowres-icon {
+ icon-shadow: 0 1px 2px rgba(0,0,0,0.3);
+}
+
+/* Drapshadow for large icons */
+.icon-dropshadow {
+ icon-shadow: 0 1px 2px rgba(0,0,0,0.4);
+}
/* OSD */
.osd-window {
@@ -680,7 +692,8 @@ StScrollBar {
spacing: 8px;
} }
- .ws-switcher-active-up, .ws-switcher-active-down {
+ .ws-switcher-active-up, .ws-switcher-active-down,
+ .ws-switcher-active-left, .ws-switcher-active-right {
height: 50px;
background-color: $selected_bg_color;
color: $selected_fg_color;
@@ -781,6 +794,11 @@ StScrollBar {
color: lighten($fg_color,10%);
} }
+ .panel-logo-icon { + .panel-logo-icon {
@ -21,23 +50,49 @@ index 1f46507..ad638b2 100644
+ icon-size: 1em; + icon-size: 1em;
+ } + }
+ +
// status area icons .system-status-icon { icon-size: 1.09em; padding: 0 5px; }
.system-status-icon { .unlock-screen &,
icon-size: $base_icon_size; .login-screen &,
diff --git a/data/gnome-classic.css b/data/gnome-classic.css @@ -1406,6 +1424,14 @@ StScrollBar {
index 52e5367..3be81e9 100644
--- a/data/gnome-classic.css }
+++ b/data/gnome-classic.css
@@ -1234,6 +1234,9 @@ StScrollBar { + .app-well-hover-text {
box-shadow: none; } + text-align: center;
#panel .panel-button.clock-display:hover .clock, #panel .panel-button.clock-display:active .clock, #panel .panel-button.clock-display:overview .clock, #panel .panel-button.clock-display:focus .clock, #panel .panel-button.clock-display:checked .clock { + color: $osd_fg_color;
box-shadow: inset 0 0 0 100px rgba(255, 255, 255, 0.2); } + background-color: $osd_bg_color;
+ #panel .panel-button .panel-logo-icon { + border-radius: 5px;
+ padding-right: .4em; + padding: 3px;
+ icon-size: 1em; } + }
#panel .panel-button .system-status-icon { +
icon-size: 1.09em; .app-well-app-running-dot { //running apps indicator
padding: 5px; width: 10px; height: 3px;
-- background-color: $selected_bg_color;
2.28.0 @@ -1801,7 +1827,12 @@ StScrollBar {
.login-dialog-banner { color: darken($osd_fg_color,10%); }
.login-dialog-button-box { spacing: 5px; }
.login-dialog-message-warning { color: $warning_color; }
- .login-dialog-message-hint { padding-top: 0; padding-bottom: 20px; }
+ .login-dialog-message-hint, .login-dialog-message {
+ color: darken($osd_fg_color, 20%);
+ padding-top: 0;
+ padding-bottom: 20px;
+ min-height: 2.75em;
+ }
.login-dialog-user-selection-box { padding: 100px 0px; }
.login-dialog-not-listed-label {
padding-left: 2px;
@@ -1856,6 +1887,10 @@ StScrollBar {
padding-bottom: 12px;
spacing: 8px;
width: 23em;
+ .login-dialog-timed-login-indicator {
+ height: 2px;
+ background-color: darken($fg_color,40%);
+ }
}
.login-dialog-prompt-label {
--
2.21.0

View File

@ -0,0 +1,33 @@
From 0bbeadadc41128b2be1f2b56c60b5a7a671d40da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 27 Jun 2019 03:57:53 +0200
Subject: [PATCH] apps-menu: Add missing chain-up
PanelMenu.Button is a bit weird in that it also "contains" its parent
actor. That container is supposed to be destroyed with the button, but
as we currently don't chain up to the parent class' _onDestroy(), we
leave behind an empty container every time the extension is disabled.
Fix this by adding the missing chain-up.
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/merge_requests/75
---
extensions/apps-menu/extension.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
index b9e7111..9803cc1 100644
--- a/extensions/apps-menu/extension.js
+++ b/extensions/apps-menu/extension.js
@@ -433,6 +433,8 @@ class ApplicationsButton extends PanelMenu.Button {
}
_onDestroy() {
+ super._onDestroy();
+
Main.overview.disconnect(this._showingId);
Main.overview.disconnect(this._hidingId);
appSys.disconnect(this._installedChangedId);
--
2.21.0

View File

@ -1,4 +1,4 @@
From fe13aa54e7c104f63689fcd15957ab16ffc0c3ef Mon Sep 17 00:00:00 2001 From 52ee25effa3debb21307e33ac223cf48ac7bc57a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 17 Mar 2016 17:15:38 +0100 Date: Thu, 17 Mar 2016 17:15:38 +0100
Subject: [PATCH] apps-menu: Explicitly set label_actor Subject: [PATCH] apps-menu: Explicitly set label_actor
@ -6,24 +6,35 @@ Subject: [PATCH] apps-menu: Explicitly set label_actor
For some reason orca fails to pick up the label of category items, For some reason orca fails to pick up the label of category items,
so set the label_actor explicitly as workaround. so set the label_actor explicitly as workaround.
--- ---
extensions/apps-menu/extension.js | 4 +++- extensions/apps-menu/extension.js | 8 ++++++--
1 file changed, 3 insertions(+), 1 deletion(-) 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
index 983a4e7..f8cef41 100644 index d62e3d7..cc399c6 100644
--- a/extensions/apps-menu/extension.js --- a/extensions/apps-menu/extension.js
+++ b/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js
@@ -113,7 +113,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem { @@ -29,7 +29,9 @@ class ActivitiesMenuItem extends PopupMenu.PopupBaseMenuItem {
constructor(button) {
super();
this._button = button;
- this.actor.add_child(new St.Label({ text: _('Activities Overview') }));
+ let label = new St.Label({ text: _('Activities Overview') });
+ this.actor.add_child(label);
+ this.actor.label_actor = label;
}
activate(event) {
@@ -120,7 +122,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
else else
name = _('Favorites'); name = _('Favorites');
- this.add_child(new St.Label({ text: name })); - this.actor.add_child(new St.Label({ text: name }));
+ const label = new St.Label({ text: name }); + let label = new St.Label({ text: name });
+ this.add_child(label); + this.actor.add_child(label);
+ this.actor.label_actor = label; + this.actor.label_actor = label;
this.connect('motion-event', this._onMotionEvent.bind(this)); this.actor.connect('motion-event', this._onMotionEvent.bind(this));
this.connect('notify::active', this._onActiveChanged.bind(this));
} }
--
2.32.0 --
2.21.0

View File

@ -1,66 +1,32 @@
From 08e720c793baa0cb12ed99c4333c75df46e3a9ed Mon Sep 17 00:00:00 2001 From 3e3634b59455da0cbae1de4af0ce5cf97be8b80d Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Tue, 21 Jan 2014 16:48:17 -0500 Date: Tue, 21 Jan 2014 16:48:17 -0500
Subject: [PATCH] apps-menu: add logo icon to Applications menu Subject: [PATCH] apps-menu: add logo icon to Applications menu
Brand requested it. Brand requested it.
--- ---
extensions/apps-menu/extension.js | 22 +++++++++++++++++++++- extensions/apps-menu/extension.js | 8 ++++++++
1 file changed, 21 insertions(+), 1 deletion(-) 1 file changed, 8 insertions(+)
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
index e36b0fe..983a4e7 100644 index d7ba570..d62e3d7 100644
--- a/extensions/apps-menu/extension.js --- a/extensions/apps-menu/extension.js
+++ b/extensions/apps-menu/extension.js +++ b/extensions/apps-menu/extension.js
@@ -364,13 +364,24 @@ class ApplicationsButton extends PanelMenu.Button { @@ -390,6 +390,14 @@ class ApplicationsButton extends PanelMenu.Button {
// role ATK_ROLE_MENU like other elements of the panel.
this.accessible_role = Atk.Role.LABEL;
+ const hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' }); let hbox = new St.BoxLayout({ style_class: 'panel-status-menu-box' });
+
+ const iconFile = Gio.File.new_for_path( + let iconFile = Gio.File.new_for_path(
+ '/usr/share/icons/hicolor/scalable/apps/start-here.svg'); + '/usr/share/icons/hicolor/scalable/apps/start-here.svg');
+ this._icon = new St.Icon({ + this._icon = new St.Icon({
+ gicon: new Gio.FileIcon({ file: iconFile }), + gicon: new Gio.FileIcon({ file: iconFile }),
+ style_class: 'panel-logo-icon', + style_class: 'panel-logo-icon'
+ }); + });
+ hbox.add_actor(this._icon); + hbox.add_actor(this._icon);
+ +
this._label = new St.Label({ this._label = new St.Label({
text: _('Applications'), text: _('Applications'),
y_expand: true, y_expand: true,
y_align: Clutter.ActorAlign.CENTER,
});
+ hbox.add_actor(this._label);
- this.add_actor(this._label);
+ this.add_actor(hbox);
this.name = 'panelApplications';
this.label_actor = this._label;
@@ -404,6 +415,14 @@ class ApplicationsButton extends PanelMenu.Button {
this._display();
this._installedChangedId = appSys.connect('installed-changed',
this._onTreeChanged.bind(this));
+ this._sessionUpdatedId = Main.sessionMode.connect('updated',
+ this._sessionUpdated.bind(this));
+ this._sessionUpdated();
+ }
+
+ _sessionUpdated() {
+ this._icon.visible =
+ !Main.sessionMode.panel.left.includes('activities');
}
_onTreeChanged() {
@@ -429,6 +448,7 @@ class ApplicationsButton extends PanelMenu.Button {
Main.overview.disconnect(this._showingId);
Main.overview.disconnect(this._hidingId);
+ Main.sessionMode.disconnect(this._sessionUpdatedId);
appSys.disconnect(this._installedChangedId);
this._tree.disconnect(this._treeChangedId);
this._tree = null;
-- --
2.32.0 2.21.0

View File

@ -0,0 +1,33 @@
From 8a5e793b3d984f3acc378cf8914410311e9dde0e Mon Sep 17 00:00:00 2001
From: Daniel van Vugt <daniel.van.vugt@canonical.com>
Date: Thu, 28 Jan 2021 16:33:50 +0800
Subject: [PATCH] auto-move-windows: Don't move windows already on all
workspaces
This fixes a particular case of mutter#992.
Although gnome-shell will also be softened to not crash in future, it's
also a good idea for the extension to explicitly decide how it wants to
handle windows that are already on all workspaces.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/157>
---
extensions/auto-move-windows/extension.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/auto-move-windows/extension.js b/extensions/auto-move-windows/extension.js
index b9bc3a0..3859809 100644
--- a/extensions/auto-move-windows/extension.js
+++ b/extensions/auto-move-windows/extension.js
@@ -72,7 +72,7 @@ class WindowMover {
}
_moveWindow(window, workspaceNum) {
- if (window.skip_taskbar)
+ if (window.skip_taskbar || window.is_on_all_workspaces())
return;
// ensure we have the required number of workspaces
--
2.37.1

View File

@ -1,4 +1,4 @@
From ffba821e1142c3cb96b9ced24dd1f161f0609d2a Mon Sep 17 00:00:00 2001 From 3d32ab1848011a3a7af97255307b3541a7553b09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 14 Dec 2022 16:55:51 +0100 Date: Wed, 14 Dec 2022 16:55:51 +0100
Subject: [PATCH] classification-banner: Handle fullscreen monitors Subject: [PATCH] classification-banner: Handle fullscreen monitors
@ -11,7 +11,7 @@ screen.
1 file changed, 18 insertions(+), 4 deletions(-) 1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/extensions/classification-banner/extension.js b/extensions/classification-banner/extension.js diff --git a/extensions/classification-banner/extension.js b/extensions/classification-banner/extension.js
index cc046e01..ea788022 100644 index 6c2fe007..1cf03b3f 100644
--- a/extensions/classification-banner/extension.js --- a/extensions/classification-banner/extension.js
+++ b/extensions/classification-banner/extension.js +++ b/extensions/classification-banner/extension.js
@@ -27,16 +27,19 @@ const Main = imports.ui.main; @@ -27,16 +27,19 @@ const Main = imports.ui.main;
@ -35,10 +35,10 @@ index cc046e01..ea788022 100644
+ global.display.disconnect(this._fullscreenChangedId); + global.display.disconnect(this._fullscreenChangedId);
+ delete this._fullscreenChangedId; + delete this._fullscreenChangedId;
+ +
this._settings?.run_dispose(); if (this._settings)
this._settings.run_dispose();
this._settings = null; this._settings = null;
}); @@ -95,6 +98,11 @@ class ClassificationBanner extends Clutter.Actor {
@@ -94,6 +97,11 @@ class ClassificationBanner extends Clutter.Actor {
userLabel, 'visible', userLabel, 'visible',
Gio.SettingsBindFlags.GET); Gio.SettingsBindFlags.GET);
@ -50,7 +50,7 @@ index cc046e01..ea788022 100644
this._settings.connect('changed::color', this._settings.connect('changed::color',
() => this._updateStyles()); () => this._updateStyles());
this._settings.connect('changed::background-color', this._settings.connect('changed::background-color',
@@ -110,6 +118,12 @@ class ClassificationBanner extends Clutter.Actor { @@ -111,6 +119,12 @@ class ClassificationBanner extends Clutter.Actor {
return `${key}: rgba(${red},${green},${blue},${alpha / 255});`; return `${key}: rgba(${red},${green},${blue},${alpha / 255});`;
} }

View File

@ -0,0 +1,208 @@
From 3c62051c0a154ae987bb0126e8adb6cd86aa69a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 24 Feb 2020 16:17:05 +0100
Subject: [PATCH] dashToDock: Handle no-overview case
There is no longer an overview in GNOME Classic, so in order to be
used in that environment, the extension must deal with that case.
---
extensions/dash-to-dock/docking.js | 122 ++++++++++++++++-------------
1 file changed, 68 insertions(+), 54 deletions(-)
diff --git a/extensions/dash-to-dock/docking.js b/extensions/dash-to-dock/docking.js
index d35094b..2b8353a 100644
--- a/extensions/dash-to-dock/docking.js
+++ b/extensions/dash-to-dock/docking.js
@@ -233,7 +233,7 @@ var DockedDash = class DashToDock {
// Create a new dash object
this.dash = new MyDash.MyDash(this._settings, this._remoteModel, this._monitorIndex);
- if (!this._settings.get_boolean('show-show-apps-button'))
+ if (Main.overview.isDummy || !this._settings.get_boolean('show-show-apps-button'))
this.dash.hideShowAppsButton();
// Create the main actor and the containers for sliding in and out and
@@ -272,45 +272,11 @@ var DockedDash = class DashToDock {
this.dash.actor.add_constraint(this.constrainSize);
this._signalsHandler.add([
- Main.overview,
- 'item-drag-begin',
- this._onDragStart.bind(this)
- ], [
- Main.overview,
- 'item-drag-end',
- this._onDragEnd.bind(this)
- ], [
- Main.overview,
- 'item-drag-cancelled',
- this._onDragEnd.bind(this)
- ], [
// update when workarea changes, for instance if other extensions modify the struts
//(like moving th panel at the bottom)
global.display,
'workareas-changed',
this._resetPosition.bind(this)
- ], [
- Main.overview,
- 'showing',
- this._onOverviewShowing.bind(this)
- ], [
- Main.overview,
- 'hiding',
- this._onOverviewHiding.bind(this)
- ], [
- // Hide on appview
- Main.overview.viewSelector,
- 'page-changed',
- this._pageChanged.bind(this)
- ], [
- Main.overview.viewSelector,
- 'page-empty',
- this._onPageEmpty.bind(this)
- ], [
- // Ensure the ShowAppsButton status is kept in sync
- Main.overview.viewSelector._showAppsButton,
- 'notify::checked',
- this._syncShowAppsButtonToggled.bind(this)
], [
global.display,
'in-fullscreen-changed',
@@ -325,15 +291,6 @@ var DockedDash = class DashToDock {
this.dash,
'icon-size-changed',
() => { Main.overview.dashIconSize = this.dash.iconSize; }
- ], [
- // This duplicate the similar signal which is in owerview.js.
- // Being connected and thus executed later this effectively
- // overwrite any attempt to use the size of the default dash
- //which given the customization is usually much smaller.
- // I can't easily disconnect the original signal
- Main.overview._controls.dash,
- 'icon-size-changed',
- () => { Main.overview.dashIconSize = this.dash.iconSize; }
], [
// sync hover after a popupmenu is closed
this.dash,
@@ -341,6 +298,53 @@ var DockedDash = class DashToDock {
() => { this._box.sync_hover() }
]);
+ if (!Main.overview.isDummy) {
+ this._signalsHandler.add([
+ Main.overview,
+ 'item-drag-begin',
+ this._onDragStart.bind(this)
+ ], [
+ Main.overview,
+ 'item-drag-end',
+ this._onDragEnd.bind(this)
+ ], [
+ Main.overview,
+ 'item-drag-cancelled',
+ this._onDragEnd.bind(this)
+ ], [
+ Main.overview,
+ 'showing',
+ this._onOverviewShowing.bind(this)
+ ], [
+ Main.overview,
+ 'hiding',
+ this._onOverviewHiding.bind(this)
+ ], [
+ // Hide on appview
+ Main.overview.viewSelector,
+ 'page-changed',
+ this._pageChanged.bind(this)
+ ], [
+ Main.overview.viewSelector,
+ 'page-empty',
+ this._onPageEmpty.bind(this)
+ ], [
+ // Ensure the ShowAppsButton status is kept in sync
+ Main.overview.viewSelector._showAppsButton,
+ 'notify::checked',
+ this._syncShowAppsButtonToggled.bind(this)
+ ], [
+ // This duplicate the similar signal which is in owerview.js.
+ // Being connected and thus executed later this effectively
+ // overwrite any attempt to use the size of the default dash
+ //which given the customization is usually much smaller.
+ // I can't easily disconnect the original signal
+ Main.overview._controls.dash,
+ 'icon-size-changed',
+ () => { Main.overview.dashIconSize = this.dash.iconSize; }
+ ]);
+ }
+
this._injectionsHandler = new Utils.InjectionsHandler();
this._themeManager = new Theming.ThemeManager(this._settings, this);
@@ -370,14 +374,17 @@ var DockedDash = class DashToDock {
this._dashSpacer = new OverviewControls.DashSpacer();
this._dashSpacer.setDashActor(this._box);
- if (this._position == St.Side.LEFT)
- Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? -1 : 0); // insert on first
- else if (this._position == St.Side.RIGHT)
- Main.overview._controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? 0 : -1); // insert on last
- else if (this._position == St.Side.TOP)
- Main.overview._overview.insert_child_at_index(this._dashSpacer, 0);
- else if (this._position == St.Side.BOTTOM)
- Main.overview._overview.insert_child_at_index(this._dashSpacer, -1);
+ if (!Main.overview.isDummy) {
+ const { _controls, _overview } = Main.overview;
+ if (this._position == St.Side.LEFT)
+ _controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? -1 : 0); // insert on first
+ else if (this._position == St.Side.RIGHT)
+ _controls._group.insert_child_at_index(this._dashSpacer, this._rtl ? 0 : -1); // insert on last
+ else if (this._position == St.Side.TOP)
+ _overview.insert_child_at_index(this._dashSpacer, 0);
+ else if (this._position == St.Side.BOTTOM)
+ _overview.insert_child_at_index(this._dashSpacer, -1);
+ }
// Add dash container actor and the container to the Chrome.
this.actor.set_child(this._slider);
@@ -412,7 +419,7 @@ var DockedDash = class DashToDock {
// Since Gnome 3.8 dragging an app without having opened the overview before cause the attemp to
//animate a null target since some variables are not initialized when the viewSelector is created
- if (Main.overview.viewSelector._activePage == null)
+ if (!Main.overview.isDummy && Main.overview.viewSelector._activePage == null)
Main.overview.viewSelector._activePage = Main.overview.viewSelector._workspacesPage;
this._updateVisibilityMode();
@@ -493,7 +500,8 @@ var DockedDash = class DashToDock {
this._settings,
'changed::show-show-apps-button',
() => {
- if (this._settings.get_boolean('show-show-apps-button'))
+ if (!Main.overview.isDummy &&
+ this._settings.get_boolean('show-show-apps-button'))
this.dash.showShowAppsButton();
else
this.dash.hideShowAppsButton();
@@ -1681,6 +1689,9 @@ var DockManager = class DashToDock_DockManager {
// set stored icon size to the new dash
Main.overview.dashIconSize = this._allDocks[0].dash.iconSize;
+ if (Main.overview.isDummy)
+ return;
+
// Hide usual Dash
Main.overview._controls.dash.actor.hide();
@@ -1707,6 +1718,9 @@ var DockManager = class DashToDock_DockManager {
}
_restoreDash() {
+ if (Main.overview.isDummy)
+ return;
+
Main.overview._controls.dash.actor.show();
Main.overview._controls.dash.actor.set_width(-1); //reset default dash size
// This force the recalculation of the icon size
--
2.25.0

View File

@ -1,33 +0,0 @@
From 8bea7c892c24694efda753ad1d76ab470032c6fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 15 Dec 2022 17:09:45 +0100
Subject: [PATCH] desktop-icons: Don't grab focus on click
We will move keyboard focus away immediately, either when opening
the context menu or when starting the rubberband.
In theory the grab is still useful, because it will move keyboard
focus to the grid when restoring focus after ending the rubberband
or closing the menu, however as keyboard navigation support is
lacking, all it does is preventing the focus to return to the
focus window after the operation.
---
extensions/desktop-icons/desktopGrid.js | 2 --
1 file changed, 2 deletions(-)
diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js
index 002803c7..9a89d5a3 100644
--- a/extensions/desktop-icons/desktopGrid.js
+++ b/extensions/desktop-icons/desktopGrid.js
@@ -559,8 +559,6 @@ var DesktopGrid = GObject.registerClass({
let button = event.get_button();
let [x, y] = event.get_coords();
- this._grid.grab_key_focus();
-
if (button == 1) {
let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
--
2.38.1

View File

@ -1,4 +1,4 @@
From b48dae39341a3ba24eb3d142f99eb37d6b14ab41 Mon Sep 17 00:00:00 2001 From 0f13a5e00d9115b4d1518c91aa45c88f3e7e7c27 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 2 Nov 2023 20:51:45 +0100 Date: Thu, 2 Nov 2023 20:51:45 +0100
Subject: [PATCH] desktop-icons: Don't try spawn with non-existent workdir Subject: [PATCH] desktop-icons: Don't try spawn with non-existent workdir
@ -15,10 +15,10 @@ to work.
1 file changed, 3 insertions(+) 1 file changed, 3 insertions(+)
diff --git a/extensions/desktop-icons/desktopIconsUtil.js b/extensions/desktop-icons/desktopIconsUtil.js diff --git a/extensions/desktop-icons/desktopIconsUtil.js b/extensions/desktop-icons/desktopIconsUtil.js
index 57bedc13..c3fe5977 100644 index 0aea6542..c1a0dda3 100644
--- a/extensions/desktop-icons/desktopIconsUtil.js --- a/extensions/desktop-icons/desktopIconsUtil.js
+++ b/extensions/desktop-icons/desktopIconsUtil.js +++ b/extensions/desktop-icons/desktopIconsUtil.js
@@ -50,6 +50,9 @@ function launchTerminal(workdir) { @@ -49,6 +49,9 @@ function launchTerminal(workdir) {
* https://gitlab.gnome.org/GNOME/gnome-shell/blob/gnome-3-30/js/misc/util.js * https://gitlab.gnome.org/GNOME/gnome-shell/blob/gnome-3-30/js/misc/util.js
*/ */

View File

@ -1,17 +1,17 @@
From 2a1dd773a529c89b5f9577b53ae3c88aea2efc48 Mon Sep 17 00:00:00 2001 From 93e3e938b322433aff862bbc46f80c60ab7dc2ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 17 Jan 2023 20:31:21 +0100 Date: Tue, 17 Jan 2023 20:31:21 +0100
Subject: [PATCH] desktop-icons: Don't use blocking IO Subject: [PATCH] desktop-icons: Don't use blocking IO
--- ---
extensions/desktop-icons/desktopManager.js | 45 +++++++++++++++------- extensions/desktop-icons/desktopManager.js | 35 +++++++++++++++++-----
1 file changed, 32 insertions(+), 13 deletions(-) 1 file changed, 28 insertions(+), 7 deletions(-)
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 74d0e6bd..75b2a22a 100644 index 399aee03..2ce6eefb 100644
--- a/extensions/desktop-icons/desktopManager.js --- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js +++ b/extensions/desktop-icons/desktopManager.js
@@ -54,6 +54,21 @@ function findMonitorIndexForPos(x, y) { @@ -53,6 +53,21 @@ function findMonitorIndexForPos(x, y) {
return getDpy().get_monitor_index_for_rect(new Meta.Rectangle({x, y})); return getDpy().get_monitor_index_for_rect(new Meta.Rectangle({x, y}));
} }
@ -33,7 +33,7 @@ index 74d0e6bd..75b2a22a 100644
var DesktopManager = GObject.registerClass({ var DesktopManager = GObject.registerClass({
Properties: { Properties: {
@@ -272,9 +287,7 @@ var DesktopManager = GObject.registerClass({ @@ -221,9 +236,7 @@ var DesktopManager = GObject.registerClass({
if (!this._unixMode) { if (!this._unixMode) {
let desktopDir = DesktopIconsUtil.getDesktopDir(); let desktopDir = DesktopIconsUtil.getDesktopDir();
@ -44,16 +44,7 @@ index 74d0e6bd..75b2a22a 100644
this._unixMode = fileInfo.get_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE); this._unixMode = fileInfo.get_attribute_uint32(Gio.FILE_ATTRIBUTE_UNIX_MODE);
this._setWritableByOthers((this._unixMode & S_IWOTH) != 0); this._setWritableByOthers((this._unixMode & S_IWOTH) != 0);
} }
@@ -283,7 +296,7 @@ var DesktopManager = GObject.registerClass({ @@ -268,14 +281,22 @@ var DesktopManager = GObject.registerClass({
let items = [];
for (let item of await this._enumerateDesktop())
items.push(item);
- for (let item of this._getMounts())
+ for (let item of await this._getMounts())
items.push(item);
let tmpFileItems = new Map();
@@ -328,14 +341,22 @@ var DesktopManager = GObject.registerClass({
Gio.FileQueryInfoFlags.NONE, Gio.FileQueryInfoFlags.NONE,
GLib.PRIORITY_DEFAULT, GLib.PRIORITY_DEFAULT,
this._desktopEnumerateCancellable, this._desktopEnumerateCancellable,
@ -80,29 +71,6 @@ index 74d0e6bd..75b2a22a 100644
while ((info = fileEnum.next_file(null))) while ((info = fileEnum.next_file(null)))
yield [fileEnum.get_child(info), info, Prefs.FileType.NONE]; yield [fileEnum.get_child(info), info, Prefs.FileType.NONE];
}.bind(this); }.bind(this);
@@ -359,19 +380,17 @@ var DesktopManager = GObject.registerClass({
this._monitorDesktopDir.connect('changed', (obj, file, otherFile, eventType) => this._updateDesktopIfChanged(file, otherFile, eventType));
}
- _getMounts() {
+ async _getMounts() {
let files = [];
if (!Prefs.settings.get_boolean('show-mount'))
return files;
- this._mountMonitor.get_mounts().forEach( mount => {
+ this._mountMonitor.get_mounts().forEach(async mount => {
if (this._isNetworkMount(mount))
return;
let file = mount.get_root();
- let info = file.query_info(DesktopIconsUtil.DEFAULT_ATTRIBUTES,
- Gio.FileQueryInfoFlags.NONE,
- null);
+ let info = await queryInfo(file);
files.push([file, info, Prefs.FileType.MOUNT_DISK]);
});
-- --
2.38.1 2.38.1

View File

@ -1,4 +1,4 @@
From 73000f25e578b3ce6654fdf0d3da2ec3d9b95dd2 Mon Sep 17 00:00:00 2001 From b334c8c248f849be996963cdafb1b0b69476bdf1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com> From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@redhat.com>
Date: Tue, 2 Nov 2021 09:20:11 +0100 Date: Tue, 2 Nov 2021 09:20:11 +0100
Subject: [PATCH] desktop-icons: Fix stuck grab issue with rubber banding Subject: [PATCH] desktop-icons: Fix stuck grab issue with rubber banding
@ -24,37 +24,37 @@ We also start to end the rubber band if for any reason the grab it had
was released. was released.
--- ---
extensions/desktop-icons/desktopGrid.js | 1 + extensions/desktop-icons/desktopGrid.js | 1 +
extensions/desktop-icons/desktopManager.js | 109 ++++++++++++--------- extensions/desktop-icons/desktopManager.js | 75 ++++++++++++++--------
extensions/desktop-icons/fileItem.js | 1 + extensions/desktop-icons/fileItem.js | 1 +
3 files changed, 67 insertions(+), 44 deletions(-) 3 files changed, 49 insertions(+), 28 deletions(-)
diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js
index 002803c..c7846bf 100644 index 602fa7f..bd27e2a 100644
--- a/extensions/desktop-icons/desktopGrid.js --- a/extensions/desktop-icons/desktopGrid.js
+++ b/extensions/desktop-icons/desktopGrid.js +++ b/extensions/desktop-icons/desktopGrid.js
@@ -388,6 +388,7 @@ var DesktopGrid = GObject.registerClass({ @@ -365,6 +365,7 @@ var DesktopGrid = class {
} }
_openMenu(x, y) { _openMenu(x, y) {
+ Extension.desktopManager.endRubberBand(); + Extension.desktopManager.endRubberBand();
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0); Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
this._submenu.menu.removeAll(); this.actor._desktopBackgroundMenu.open(BoxPointer.PopupAnimation.NONE);
let templates = Extension.templateManager.getTemplates(); /* Since the handler is in the press event it needs to ignore the release event
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 10e3ce0..08bc82b 100644 index a70cd98..c37e1e7 100644
--- a/extensions/desktop-icons/desktopManager.js --- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js +++ b/extensions/desktop-icons/desktopManager.js
@@ -81,6 +81,7 @@ var DesktopManager = GObject.registerClass({ @@ -79,6 +79,7 @@ var DesktopManager = GObject.registerClass({
this._queryFileInfoCancellable = null;
this._unixMode = null; this._unixMode = null;
this._writableByOthers = null; this._writableByOthers = null;
this._discreteGpuAvailable = false;
+ this._rubberBandActive = false; + this._rubberBandActive = false;
this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons()); this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons());
this._rubberBand = new St.Widget({ style_class: 'rubber-band' }); this._rubberBand = new St.Widget({ style_class: 'rubber-band' });
@@ -94,6 +95,20 @@ var DesktopManager = GObject.registerClass({ @@ -86,6 +87,20 @@ var DesktopManager = GObject.registerClass({
this._mountRemovedId = this._mountMonitor.connect('mount-removed', (monitor, mount) => { Main.layoutManager._backgroundGroup.add_child(this._rubberBand);
this._recreateDesktopIcons(); }); this._grabHelper = new GrabHelper.GrabHelper(global.stage);
+ let origCapturedEvent = this._grabHelper.onCapturedEvent; + let origCapturedEvent = this._grabHelper.onCapturedEvent;
+ this._grabHelper.onCapturedEvent = (event) => { + this._grabHelper.onCapturedEvent = (event) => {
@ -73,8 +73,8 @@ index 10e3ce0..08bc82b 100644
this._addDesktopIcons(); this._addDesktopIcons();
this._monitorDesktopFolder(); this._monitorDesktopFolder();
@@ -133,57 +148,67 @@ var DesktopManager = GObject.registerClass({ @@ -108,30 +123,15 @@ var DesktopManager = GObject.registerClass({
this._rubberBandInitialY = y; this._initRubberBandColor();
this._updateRubberBand(x, y); this._updateRubberBand(x, y);
this._rubberBand.show(); this._rubberBand.show();
- this._grabHelper.grab({ actor: global.stage }); - this._grabHelper.grab({ actor: global.stage });
@ -87,7 +87,7 @@ index 10e3ce0..08bc82b 100644
this._stageReleaseEventId = global.stage.connect('button-release-event', (actor, event) => { this._stageReleaseEventId = global.stage.connect('button-release-event', (actor, event) => {
this.endRubberBand(); this.endRubberBand();
}); });
this._rubberBandId = global.stage.connect('motion-event', (actor, event) => { - this._rubberBandId = global.stage.connect('motion-event', (actor, event) => {
- /* In some cases, when the user starts a rubberband selection and ends it - /* In some cases, when the user starts a rubberband selection and ends it
- * (by releasing the left button) over a window instead of doing it over - * (by releasing the left button) over a window instead of doing it over
- * the desktop, the stage doesn't receive the "button-release" event. - * the desktop, the stage doesn't receive the "button-release" event.
@ -104,26 +104,13 @@ index 10e3ce0..08bc82b 100644
- } - }
- [x, y] = event.get_coords(); - [x, y] = event.get_coords();
- this._updateRubberBand(x, y); - this._updateRubberBand(x, y);
- let x0, y0, x1, y1; - this._updateSelection(x, y);
- if (x >= this._rubberBandInitialX) { - });
- x0 = this._rubberBandInitialX; this._rubberBandTouchId = global.stage.connect('touch-event', (actor, event) => {
- x1 = x; // Let x11 pointer emulation do the job on X11
- } else { if (!Meta.is_wayland_compositor())
- x1 = this._rubberBandInitialX; @@ -175,14 +175,37 @@ var DesktopManager = GObject.registerClass({
- x0 = x; }
- }
- if (y >= this._rubberBandInitialY) {
- y0 = this._rubberBandInitialY;
- y1 = y;
- } else {
- y1 = this._rubberBandInitialY;
- y0 = y;
- }
- for (let [fileUri, fileItem] of this._fileItems) {
- fileItem.emit('selected', true, true,
- fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0));
- }
});
} }
- endRubberBand() { - endRubberBand() {
@ -144,25 +131,7 @@ index 10e3ce0..08bc82b 100644
+ } + }
+ let [x, y] = event.get_coords(); + let [x, y] = event.get_coords();
+ this._updateRubberBand(x, y); + this._updateRubberBand(x, y);
+ let x0, y0, x1, y1; + this._updateSelection(x, y);
+ if (x >= this._rubberBandInitialX) {
+ x0 = this._rubberBandInitialX;
+ x1 = x;
+ } else {
+ x1 = this._rubberBandInitialX;
+ x0 = x;
+ }
+ if (y >= this._rubberBandInitialY) {
+ y0 = this._rubberBandInitialY;
+ y1 = y;
+ } else {
+ y1 = this._rubberBandInitialY;
+ y0 = y;
+ }
+ for (let [fileUri, fileItem] of this._fileItems) {
+ fileItem.emit('selected', true, true,
+ fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0));
+ }
+ } + }
+ +
+ endRubberBand(ungrab=true) { + endRubberBand(ungrab=true) {
@ -176,12 +145,13 @@ index 10e3ce0..08bc82b 100644
- global.stage.disconnect(this._rubberBandId); - global.stage.disconnect(this._rubberBandId);
+ if (ungrab) + if (ungrab)
+ this._grabHelper.ungrab(); + this._grabHelper.ungrab();
global.stage.disconnect(this._rubberBandTouchId);
global.stage.disconnect(this._stageReleaseEventId); global.stage.disconnect(this._stageReleaseEventId);
- this._rubberBandId = 0; - this._rubberBandId = 0;
this._rubberBandTouchId = 0;
this._stageReleaseEventId = 0; this._stageReleaseEventId = 0;
this._selection = new Set([...this._selection, ...this._currentSelection]); @@ -760,10 +783,6 @@ var DesktopManager = GObject.registerClass({
@@ -825,10 +850,6 @@ var DesktopManager = GObject.registerClass({
global.stage.disconnect(this._stageReleaseEventId); global.stage.disconnect(this._stageReleaseEventId);
this._stageReleaseEventId = 0; this._stageReleaseEventId = 0;
@ -189,20 +159,20 @@ index 10e3ce0..08bc82b 100644
- global.stage.disconnect(this._rubberBandId); - global.stage.disconnect(this._rubberBandId);
- this._rubberBandId = 0; - this._rubberBandId = 0;
- -
this._rubberBand.destroy(); if (this._rubberBandTouchId)
global.stage.disconnect(this._rubberBandTouchId);
if (this._queryFileInfoCancellable) this._rubberBandTouchId = 0;
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 1e8ea89..37ee54d 100644 index 1cb47e8..90f326d 100644
--- a/extensions/desktop-icons/fileItem.js --- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js +++ b/extensions/desktop-icons/fileItem.js
@@ -747,6 +747,7 @@ var FileItem = GObject.registerClass({ @@ -676,6 +676,7 @@ var FileItem = class {
} }
_onPressButton(actor, event) { _onPressButton(actor, event) {
+ Extension.desktopManager.endRubberBand(); + Extension.desktopManager.endRubberBand();
this._updateClickState(event); this._updateClickState(event);
let button = event.get_button(); let button = this._eventButton(event);
if (button == 3) { if (button == 3) {
-- --
2.31.1 2.31.1

View File

@ -1,242 +0,0 @@
From a796215ddce14ebe80774b99e29d0d28109c818b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 6 Mar 2024 20:14:14 +0100
Subject: [PATCH] desktop-icons: Handle touch events
File icons currently only deal with button events. Split up the
current handlers and use them to handle touch events as well.
---
extensions/desktop-icons/fileItem.js | 181 +++++++++++++++++++--------
1 file changed, 128 insertions(+), 53 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 37ee54db..26afddb2 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -140,6 +140,7 @@ var FileItem = GObject.registerClass({
this._container.connect('leave-event', (actor, event) => this._onLeave(actor, event));
this._container.connect('enter-event', (actor, event) => this._onEnter(actor, event));
this._container.connect('button-release-event', (actor, event) => this._onReleaseButton(actor, event));
+ this._container.connect('touch-event', (actor, event) => this._onTouchEvent(actor, event));
/* Set the metadata and update relevant UI */
this._updateMetadataFromFileInfo(fileInfo);
@@ -229,6 +230,10 @@ var FileItem = GObject.registerClass({
if (this._iconAllocationIdleId)
GLib.source_remove(this._iconAllocationIdleId);
+ if (this._longPressTimeoutId)
+ GLib.source_remove(this._longPressTimeoutId);
+ delete this._longPressTimeoutId;
+
/* Menu */
this._removeMenu();
}
@@ -731,58 +736,141 @@ var FileItem = GObject.registerClass({
}
_updateClickState(event) {
+ const eventType = event.type();
+ const isButton =
+ eventType === Clutter.EventType.BUTTON_PRESS ||
+ eventType === Clutter.EventType.BUTTON_RELEASE;
+ const button = isButton ? event.get_button() : 0;
+ const time = event.get_time();
+
let settings = Clutter.Settings.get_default();
- if ((event.get_button() == this._lastClickButton) &&
- ((event.get_time() - this._lastClickTime) < settings.double_click_time))
+ if (button === this._lastClickButton &&
+ (time - this._lastClickTime) < settings.double_click_time)
this._clickCount++;
else
this._clickCount = 1;
- this._lastClickTime = event.get_time();
- this._lastClickButton = event.get_button();
+ this._lastClickTime = time;
+ this._lastClickButton = button;
}
_getClickCount() {
return this._clickCount;
}
+ _handlePressEvent(event) {
+ const pressSequence = event.get_event_sequence();
+ if (this._pressSequence &&
+ pressSequence?.get_slot() !== this._pressSequence.get_slot())
+ return Clutter.EVENT_PROPAGATE;
+
+ this._primaryButtonPressed = true;
+ this._pressSequence = pressSequence;
+ this._pressDevice = event.get_device();
+
+ if (this._getClickCount() !== 1)
+ return Clutter.EVENT_STOP;
+
+ const [x, y] = event.get_coords();
+ this._buttonPressInitialX = x;
+ this._buttonPressInitialY = y;
+
+ const shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
+ const controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
+ if (controlPressed || shiftPressed)
+ this.emit('selected', true, false, !this._isSelected);
+ else if (!this._isSelected)
+ this.emit('selected', false, false, true);
+
+ return Clutter.EVENT_STOP;
+ }
+
+ _handleSecondaryPress() {
+ if (!this.isSelected)
+ this.emit('selected', false, false, true);
+ this._ensureMenu().toggle();
+ if (this._actionOpenWith) {
+ let allowOpenWith = Extension.desktopManager.getNumberOfSelectedItems() === 1;
+ this._actionOpenWith.setSensitive(allowOpenWith);
+ }
+ const specialFilesSelected =
+ Extension.desktopManager.checkIfSpecialFilesAreSelected();
+ if (this._actionCut)
+ this._actionCut.setSensitive(!specialFilesSelected);
+ if (this._actionCopy)
+ this._actionCopy.setSensitive(!specialFilesSelected);
+ if (this._actionTrash)
+ this._actionTrash.setSensitive(!specialFilesSelected);
+ return Clutter.EVENT_STOP;
+ }
+
+ _handleReleaseEvent(event) {
+ if (this._longPressTimeoutId)
+ GLib.source_remove(this._longPressTimeoutId);
+ delete this._longPressTimeoutId;
+
+ if (!this._primaryButtonPressed || this._pressDevice !== event.get_device())
+ return Clutter.EVENT_PROPAGATE;
+
+ const pressSequence = event.get_event_sequence();
+ if (this._pressSequence &&
+ pressSequence?.get_slot() !== this._pressSequence.get_slot())
+ return Clutter.EVENT_PROPAGATE;
+
+ // primaryButtonPressed is TRUE only if the user has pressed the button
+ // over an icon, and if (s)he has not started a drag&drop operation
+ this._primaryButtonPressed = false;
+ delete this._pressDevice;
+ delete this._pressSequence;
+
+ let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
+ let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
+ if (!controlPressed && !shiftPressed)
+ this.emit('selected', false, false, true);
+ if (this._getClickCount() === 1 && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && !controlPressed)
+ this.doOpen();
+ if (this._getClickCount() === 2 && !Prefs.CLICK_POLICY_SINGLE)
+ this.doOpen();
+ return Clutter.EVENT_STOP;
+ }
+
+ _onTouchEvent(actor, event) {
+ // on X11, let pointer emulation deal with touch
+ if (!Meta.is_wayland_compositor())
+ return Clutter.EVENT_PROPAGATE;
+
+ const type = event.type();
+ if (type === Clutter.EventType.TOUCH_BEGIN) {
+ Extension.desktopManager.endRubberBand();
+ this._updateClickState(event);
+
+ if (!this._handlePressEvent(event))
+ return Clutter.EVENT_PROPAGATE;
+
+ const { longPressDuration } = Clutter.Settings.get_default();
+ this._longPressTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
+ longPressDuration,
+ () => {
+ this._handleSecondaryPress();
+ delete this._longPressTimeoutId;
+ return GLib.SOURCE_REMOVE;
+ });
+
+ return Clutter.EVENT_STOP;
+ } else if (type === Clutter.EventType.TOUCH_END) {
+ return this._handleReleaseEvent(event);
+ }
+ return Clutter.EVENT_PROPAGATE;
+ }
+
_onPressButton(actor, event) {
Extension.desktopManager.endRubberBand();
this._updateClickState(event);
let button = event.get_button();
- if (button == 3) {
- if (!this.isSelected)
- this.emit('selected', false, false, true);
- this._ensureMenu().toggle();
- if (this._actionOpenWith) {
- let allowOpenWith = (Extension.desktopManager.getNumberOfSelectedItems() == 1);
- this._actionOpenWith.setSensitive(allowOpenWith);
- }
- let specialFilesSelected = Extension.desktopManager.checkIfSpecialFilesAreSelected();
- if (this._actionCut)
- this._actionCut.setSensitive(!specialFilesSelected);
- if (this._actionCopy)
- this._actionCopy.setSensitive(!specialFilesSelected);
- if (this._actionTrash)
- this._actionTrash.setSensitive(!specialFilesSelected);
- return Clutter.EVENT_STOP;
- } else if (button == 1) {
- if (this._getClickCount() == 1) {
- let [x, y] = event.get_coords();
- this._primaryButtonPressed = true;
- this._buttonPressInitialX = x;
- this._buttonPressInitialY = y;
- let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
- let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
- if (controlPressed || shiftPressed) {
- this.emit('selected', true, false, !this._isSelected);
- } else {
- if (!this._isSelected)
- this.emit('selected', false, false, true);
- }
- }
- return Clutter.EVENT_STOP;
- }
+ if (button == 3)
+ return this._handleSecondaryPress();
+ if (button == 1)
+ return this._handlePressEvent(event);
return Clutter.EVENT_PROPAGATE;
}
@@ -821,22 +909,9 @@ var FileItem = GObject.registerClass({
_onReleaseButton(actor, event) {
let button = event.get_button();
- if (button == 1) {
- // primaryButtonPressed is TRUE only if the user has pressed the button
- // over an icon, and if (s)he has not started a drag&drop operation
- if (this._primaryButtonPressed) {
- this._primaryButtonPressed = false;
- let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
- let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
- if (!controlPressed && !shiftPressed)
- this.emit('selected', false, false, true);
- if ((this._getClickCount() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && !controlPressed)
- this.doOpen();
- return Clutter.EVENT_STOP;
- }
- if ((this._getClickCount() == 2) && (!Prefs.CLICK_POLICY_SINGLE))
- this.doOpen();
- }
+ if (button == 1)
+ return this._handleReleaseEvent(event);
+
return Clutter.EVENT_PROPAGATE;
}
--
2.44.0

View File

@ -1,40 +0,0 @@
From 8389801814c84c797a29f986f15e7ea4dd27bccc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 6 Mar 2024 13:48:49 +0100
Subject: [PATCH] desktop-icons: Notify icon drags
Components like the message tray will use the signal to hide
their layout actor from picks, so that it does no interfere
with the DND operation.
---
extensions/desktop-icons/desktopManager.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 75b2a22a..c3b3f7e4 100644
--- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js
@@ -547,17 +547,20 @@ var DesktopManager = GObject.registerClass({
this._draggableContainer.allocate_preferred_size(0, 0);
this._draggable.startDrag(x, y, global.get_current_time(), event.get_event_sequence());
+ Main.overview.beginItemDrag(this._draggableContainer);
}
_onDragCancelled() {
let event = Clutter.get_current_event();
let [x, y] = event.get_coords();
this._dragCancelled = true;
+ Main.overview.cancelledItemDrag(this._draggableContainer);
}
_onDragEnd() {
this._inDrag = false;
Main.layoutManager.uiGroup.remove_child(this._draggableContainer);
+ Main.overview.endItemDrag(this._draggableContainer);
}
_dragActorDropped(event) {
--
2.44.0

View File

@ -1,19 +1,21 @@
From ba4208c00504439bad19de4680fac68210767798 Mon Sep 17 00:00:00 2001 From 0a7248c75c084a83852aa3d0e7a36ccebd365b81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 27 Jan 2021 11:51:28 +0100 Date: Wed, 27 Jan 2021 11:51:28 +0100
Subject: [PATCH] desktop-icons: Update Japanese translation Subject: [PATCH] desktop-icons: Update Japanese translation
--- ---
po/ja.po | 6 +----- po/ja.po | 7 +------
1 file changed, 1 insertion(+), 5 deletions(-) 1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/po/ja.po b/po/ja.po diff --git a/po/ja.po b/po/ja.po
index 8eb7725..ddf1eb7 100644 index df5646d..4d780b9 100644
--- a/po/ja.po --- a/po/ja.po
+++ b/po/ja.po +++ b/po/ja.po
@@ -897,11 +897,7 @@ msgstr "押し込み量 (ピクセル)" @@ -293,13 +293,8 @@ msgid "Workspace %d"
#: desktopGrid.js:359 msgstr "ワークスペース %d"
#, fuzzy
#: desktopGrid.js:334
-#, fuzzy
msgid "Display Settings" msgid "Display Settings"
-msgstr "" -msgstr ""
-"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n" -"#-#-#-#-# ja.po (gnome-shell-extensions master) #-#-#-#-#\n"
@ -25,5 +27,5 @@ index 8eb7725..ddf1eb7 100644
#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11 #: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11
#, fuzzy #, fuzzy
-- --
2.32.0 2.29.2

View File

@ -0,0 +1,28 @@
From 81b5163b43b7d45ca8bc9205476ef67789e283a4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 29 Nov 2021 16:48:53 +0100
Subject: [PATCH] desktop-icons: Use a single unique name to access nautilus
... otherwise dbus-daemon will assume that activating one of the
services failed, because its executable exits early (after activating
the primary instance).
---
extensions/desktop-icons/dbusUtils.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/desktop-icons/dbusUtils.js b/extensions/desktop-icons/dbusUtils.js
index 19fe9878..b44ffa59 100644
--- a/extensions/desktop-icons/dbusUtils.js
+++ b/extensions/desktop-icons/dbusUtils.js
@@ -64,7 +64,7 @@ function init() {
FreeDesktopFileManagerProxy = new FreeDesktopFileManagerProxyInterface(
Gio.DBus.session,
- 'org.freedesktop.FileManager1',
+ 'org.gnome.Nautilus',
'/org/freedesktop/FileManager1',
(proxy, error) => {
if (error) {
--
2.33.1

View File

@ -1,60 +0,0 @@
From 62289dff5cb2e615a277b72f034fa42f45aad639 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 15 Dec 2022 15:14:08 +0100
Subject: [PATCH] desktopManager: Hook into LayoutManager to create grids
Right now we track the `monitors-changed` signal to recreate the
per-monitor grids. Usually that's enough, but if something else
causes backgrounds to update, we'll end up without desktop icons
until some other change (settings, mounts, monitor/resolution
changes, ...) results in a reload of the grid.
To address this, hook into LayoutManager to always create the grid
when backgrounds are updated.
---
extensions/desktop-icons/desktopManager.js | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 08bc82b7..74d0e6bd 100644
--- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js
@@ -83,7 +83,6 @@ var DesktopManager = GObject.registerClass({
this._discreteGpuAvailable = false;
this._rubberBandActive = false;
- this._monitorsChangedId = Main.layoutManager.connect('monitors-changed', () => this._recreateDesktopIcons());
this._rubberBand = new St.Widget({ style_class: 'rubber-band' });
this._rubberBand.hide();
Main.layoutManager._backgroundGroup.add_child(this._rubberBand);
@@ -109,6 +108,13 @@ var DesktopManager = GObject.registerClass({
return origCapturedEvent.bind(this._grabHelper)(event);
};
+ this._origUpdateBackgrounds =
+ Main.layoutManager._updateBackgrounds;
+ Main.layoutManager._updateBackgrounds = () => {
+ this._origUpdateBackgrounds.call(Main.layoutManager);
+ this._recreateDesktopIcons();
+ };
+
this._addDesktopIcons();
this._monitorDesktopFolder();
@@ -843,9 +849,10 @@ var DesktopManager = GObject.registerClass({
GLib.source_remove(this._deleteChildrenId);
this._deleteChildrenId = 0;
- if (this._monitorsChangedId)
- Main.layoutManager.disconnect(this._monitorsChangedId);
- this._monitorsChangedId = 0;
+ if (this._origUpdateBackgrounds)
+ Main.layoutManager._updateBackgrounds = this._origUpdateBackgrounds;
+ delete this._origUpdateBackgrounds;
+
if (this._stageReleaseEventId)
global.stage.disconnect(this._stageReleaseEventId);
this._stageReleaseEventId = 0;
--
2.38.1

View File

@ -1,29 +0,0 @@
From 3edf3c0be7638bf9161c0d192dd3c2de1e3b9845 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 14 Dec 2023 14:41:04 +0100
Subject: [PATCH] docking: Only remove spacer if necessary
There may not be a main dock at the time when restoring the dash.
Handle that case by not removing a non-existent spacer, instead of
triggering an error.
---
extensions/dash-to-dock/docking.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/dash-to-dock/docking.js b/extensions/dash-to-dock/docking.js
index daa9de59..14e2ced6 100644
--- a/extensions/dash-to-dock/docking.js
+++ b/extensions/dash-to-dock/docking.js
@@ -1796,7 +1796,7 @@ var DockManager = class DashToDock_DockManager {
let overviewControls = Main.overview._overview._controls;
Main.overview._overview._controls.layout_manager._dash = this._oldDash;
- if (this.mainDock._dashSpacer) {
+ if (this.mainDock?._dashSpacer) {
Main.overview._overview._controls.remove_child(this.mainDock._dashSpacer);
}
--
2.43.0

View File

@ -0,0 +1,83 @@
From f78b19068654412ca9e73a229e1537d080759c47 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Wed, 27 Jan 2021 16:55:10 +0100
Subject: [PATCH] fileItem: Ignore double click distance clicking on items
Imitate the behavior of Nautilus canvas WRT double clicks being
handled on all of the icon(s) without accounting for the double
click distance. As the extension does already lean on Nautilus
look & feel, it seems to make sense doing this.
This is not as crucial for mice as it is for touchscreens, where
the default 5px limit may be a bit on the short side depending
on device sensitivity.
---
extensions/desktop-icons/fileItem.js | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index d6d43c9..5d3195f 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -65,6 +65,9 @@ var FileItem = class {
this._setMetadataCancellable = null;
this._queryFileInfoCancellable = null;
this._isSpecial = this._fileExtra != Prefs.FileType.NONE;
+ this._lastClickTime = 0;
+ this._lastClickButton = 0;
+ this._clickCount = 0;
this._file = file;
@@ -642,7 +645,24 @@ var FileItem = class {
DesktopIconsUtil.launchTerminal(this.file.get_path());
}
+ _updateClickState(event) {
+ let settings = Clutter.Settings.get_default();
+ if ((event.get_button() == this._lastClickButton) &&
+ ((event.get_time() - this._lastClickTime) < settings.double_click_time))
+ this._clickCount++;
+ else
+ this._clickCount = 1;
+
+ this._lastClickTime = event.get_time();
+ this._lastClickButton = event.get_button();
+ }
+
+ _getClickCount() {
+ return this._clickCount;
+ }
+
_onPressButton(actor, event) {
+ this._updateClickState(event);
let button = event.get_button();
if (button == 3) {
if (!this.isSelected)
@@ -661,7 +681,7 @@ var FileItem = class {
this._actionTrash.setSensitive(!specialFilesSelected);
return Clutter.EVENT_STOP;
} else if (button == 1) {
- if (event.get_click_count() == 1) {
+ if (this._getClickCount() == 1) {
let [x, y] = event.get_coords();
this._primaryButtonPressed = true;
this._buttonPressInitialX = x;
@@ -710,12 +730,12 @@ var FileItem = class {
this._primaryButtonPressed = false;
let shiftPressed = !!(event.get_state() & Clutter.ModifierType.SHIFT_MASK);
let controlPressed = !!(event.get_state() & Clutter.ModifierType.CONTROL_MASK);
- if ((event.get_click_count() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && !controlPressed)
+ if ((this._getClickCount() == 1) && Prefs.CLICK_POLICY_SINGLE && !shiftPressed && !controlPressed)
this.doOpen();
this.emit('selected', shiftPressed || controlPressed, false, true);
return Clutter.EVENT_STOP;
}
- if ((event.get_click_count() == 2) && (!Prefs.CLICK_POLICY_SINGLE))
+ if ((this._getClickCount() == 2) && (!Prefs.CLICK_POLICY_SINGLE))
this.doOpen();
}
return Clutter.EVENT_PROPAGATE;
--
2.29.2

View File

@ -0,0 +1,31 @@
From 506c6d69eaa5e056d9580a28e9c200586b0e1fb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 2 Dec 2022 15:20:40 +0100
Subject: [PATCH] fileItem: Just destroy menus
The menu manager is smart enough to remove the menu automatically,
and the actor will be destroyed alongside the menu. Not doing those
actions explicitly allows the automatic handling to proceed without
confusing the grab state.
---
extensions/desktop-icons/fileItem.js | 4 ----
1 file changed, 4 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 44a93352..f2f03440 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -575,10 +575,6 @@ var FileItem = class {
_removeMenu() {
if (this._menu != null) {
- if (this._menuManager != null)
- this._menuManager.removeMenu(this._menu);
-
- Main.layoutManager.uiGroup.remove_child(this._menu.actor);
this._menu.destroy();
this._menu = null;
}
--
2.38.1

View File

@ -0,0 +1,147 @@
From be4ab59a3f2bb9829dde390db3dd8868a08840eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 2 Dec 2022 19:28:54 +0100
Subject: [PATCH] fileItem: Support .desktop files of type Link
Gio only has direct support for .desktop files of type Application.
However in the context of desktop icons (and file managers), shortcuts
of URLs are useful as well, so add explicit support for .desktop files
of type Link.
---
extensions/desktop-icons/fileItem.js | 71 +++++++++++++++++++++++-----
1 file changed, 60 insertions(+), 11 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index f2f03440..1c9a1e55 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -239,12 +239,32 @@ var FileItem = class {
log(`desktop-icons: File ${this._displayName} is writable by others - will not allow launching`);
if (this._isDesktopFile) {
- this._desktopFile = Gio.DesktopAppInfo.new_from_filename(this._file.get_path());
- if (!this._desktopFile) {
- log(`Couldnt parse ${this._displayName} as a desktop file, will treat it as a regular file.`);
+ try {
+ const keyFile = new GLib.KeyFile();
+ keyFile.load_from_file(this._file.get_path(), GLib.KeyFileFlags.NONE);
+
+ const type = keyFile.get_string(
+ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_TYPE);
+ switch (type) {
+ case GLib.KEY_FILE_DESKTOP_TYPE_APPLICATION:
+ this._desktopFile = Gio.DesktopAppInfo.new_from_keyfile(keyFile);
+ if (!this._desktopFile) {
+ log(`Couldnt parse ${this._displayName} as a desktop file, will treat it as a regular file.`);
+ this._isValidDesktopFile = false;
+ } else {
+ this._isValidDesktopFile = true;
+ }
+ break;
+ case GLib.KEY_FILE_DESKTOP_TYPE_LINK:
+ const url = keyFile.get_string(
+ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_URL);
+ if (url)
+ this._linkFile = keyFile;
+ default: // fall-through
+ this._isValidDesktopFile = false;
+ }
+ } catch (e) {
this._isValidDesktopFile = false;
- } else {
- this._isValidDesktopFile = true;
}
} else {
this._isValidDesktopFile = false;
@@ -356,8 +376,17 @@ var FileItem = class {
if (this._isBrokenSymlink) {
this._icon.child = this._createEmblemedStIcon(null, 'text-x-generic');
} else {
- if (this.trustedDesktopFile && this._desktopFile.has_key('Icon'))
- this._icon.child = this._createEmblemedStIcon(null, this._desktopFile.get_string('Icon'));
+ let iconName = null;
+
+ try {
+ if (this.trustedDesktopFile)
+ iconName = this._desktopFile.get_string('Icon');
+ else if (this._linkFile)
+ iconName = this._linkFile.get_string(GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_ICON);
+ } catch (e) {}
+
+ if (iconName)
+ this._icon.child = this._createEmblemedStIcon(null, iconName);
else
this._icon.child = this._createEmblemedStIcon(this._fileInfo.get_icon(), null);
}
@@ -411,7 +440,7 @@ var FileItem = class {
itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-unreadable')));
else
itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link')));
- } else if (this.trustedDesktopFile) {
+ } else if (this.trustedDesktopFile || this._linkFile) {
itemIcon.add_emblem(Gio.Emblem.new(Gio.ThemedIcon.new('emblem-symbolic-link')));
}
@@ -440,6 +469,12 @@ var FileItem = class {
return;
}
+ if (this._linkFile) {
+ this._openUri(this._linkFile.get_string(
+ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_URL));
+ return;
+ }
+
if (this._attributeCanExecute &&
!this._isDirectory &&
!this._isValidDesktopFile &&
@@ -449,13 +484,17 @@ var FileItem = class {
return;
}
- Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(),
+ this._openUri(this.file.get_uri());
+ }
+
+ _openUri(uri) {
+ Gio.AppInfo.launch_default_for_uri_async(uri,
null, null,
(source, result) => {
try {
Gio.AppInfo.launch_default_for_uri_finish(result);
} catch (e) {
- log('Error opening file ' + this.file.get_uri() + ': ' + e.message);
+ log('Error opening file ' + uri + ': ' + e.message);
}
}
);
@@ -555,7 +594,9 @@ var FileItem = class {
}
canRename() {
- return !this.trustedDesktopFile && this._fileExtra == Prefs.FileType.NONE;
+ return !this.trustedDesktopFile &&
+ !this._linkFile &&
+ this._fileExtra == Prefs.FileType.NONE;
}
_doOpenWith() {
@@ -819,6 +860,14 @@ var FileItem = class {
if (this.trustedDesktopFile)
return this._desktopFile.get_name();
+ if (this._linkFile) {
+ try {
+ const name = this._linkFile.get_string(
+ GLib.KEY_FILE_DESKTOP_GROUP, GLib.KEY_FILE_DESKTOP_KEY_NAME);
+ return name;
+ } catch (e) {}
+ }
+
return this._displayName || null;
}
--
2.38.1

View File

@ -0,0 +1,45 @@
From ee89a91a9ac235b69ff3c47af14d702c0309e892 Mon Sep 17 00:00:00 2001
From: Sergio Costas <raster@rastersoft.com>
Date: Thu, 25 Jul 2019 00:12:09 +0200
Subject: [PATCH] general: launch only executable files
Until now, if a file has the "execute" flag, clicking on it will try
to execute it, no matter if it is really an executable. This means
that a non-executable file (like a JPEG picture, or a text file)
won't be opened with its desired application if it has set the
executable flag.
This patch fixes this, by ensuring that the only files that can be
executed when the "execute" flag is set, are the ones that makes
sense to execute.
Fixes https://gitlab.gnome.org/World/ShellExtensions/desktop-icons/issues/144
---
extensions/desktop-icons/fileItem.js | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index d6d43c9f..44a93352 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -440,10 +440,13 @@ var FileItem = class {
return;
}
- if (this._attributeCanExecute && !this._isDirectory && !this._isValidDesktopFile) {
- if (this._execLine)
- Util.spawnCommandLine(this._execLine);
- return;
+ if (this._attributeCanExecute &&
+ !this._isDirectory &&
+ !this._isValidDesktopFile &&
+ Gio.content_type_can_be_executable(this._attributeContentType)) {
+ if (this._execLine)
+ Util.spawnCommandLine(this._execLine);
+ return;
}
Gio.AppInfo.launch_default_for_uri_async(this.file.get_uri(),
--
2.31.1

View File

@ -1,30 +1,41 @@
From c70a1fa37f68687b8c0a013d2328e6262f8419d0 Mon Sep 17 00:00:00 2001 From ce75829479b1e7bf99e74bf835174e91c8da2276 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 9 Dec 2022 15:31:08 +0100 Date: Fri, 9 Dec 2022 15:31:08 +0100
Subject: [PATCH] gesture-inhibitor: Allow inhibiting workspace switch gesture Subject: [PATCH] gesture-inhibitor: Allow inhibiting workspace switch gesture
--- ---
extensions/gesture-inhibitor/extension.js | 1 + extensions/gesture-inhibitor/extension.js | 5 ++++-
.../org.gnome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ++++ .../org.gnome.shell.extensions.gesture-inhibitor.gschema.xml | 4 ++++
2 files changed, 5 insertions(+) 2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index fb8a6dc0..d103d5b8 100644 index e74ede2f..bf02d075 100644
--- a/extensions/gesture-inhibitor/extension.js --- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js +++ b/extensions/gesture-inhibitor/extension.js
@@ -48,6 +48,7 @@ class Extension { @@ -37,6 +37,8 @@ class Extension {
this._showOverview = a;
else if (a instanceof WindowManager.AppSwitchAction)
this._appSwitch = a;
+ else if (a instanceof WindowManager.WorkspaceSwitchAction)
+ this._workspaceSwitch = a;
else if (a instanceof EdgeDragAction.EdgeDragAction &&
a._side == St.Side.BOTTOM)
this._showOsk = a;
@@ -52,7 +54,8 @@ class Extension {
{ setting: 'app-switch', action: this._appSwitch }, { setting: 'app-switch', action: this._appSwitch },
{ setting: 'show-osk', action: this._showOsk }, { setting: 'show-osk', action: this._showOsk },
{ setting: 'unfullscreen', action: this._unfullscreen }, { setting: 'unfullscreen', action: this._unfullscreen },
+ { setting: 'workspace-switch', action: Main.wm._workspaceAnimation._swipeTracker }, - { setting: 'show-app-grid', action: this._showAppGrid }
+ { setting: 'show-app-grid', action: this._showAppGrid },
+ { setting: 'workspace-switch', action: this._workspaceSwitch },
]; ];
}
this._enabledDesc = Object.getOwnPropertyDescriptor(
diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml diff --git a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
index 4bdf9260..b06d027a 100644 index 1d67dcc0..a5e97a3d 100644
--- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml --- a/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
+++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml +++ b/extensions/gesture-inhibitor/org.gnome.shell.extensions.gesture-inhibitor.gschema.xml
@@ -12,6 +12,10 @@ @@ -16,6 +16,10 @@
<default>true</default> <default>true</default>
<summary>Application switch gesture</summary> <summary>Application switch gesture</summary>
</key> </key>

View File

@ -0,0 +1,41 @@
From dfdd10b46d670674d5e0e38f7adcd007f5884822 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Wed, 29 Sep 2021 14:33:25 +0200
Subject: [PATCH] gesture-inhibitor: Put a foot down with self-enabling
gestures
If a gesture (unfullscreen, I'm looking at you) controls its 'enabled'
property, it will bypass the will of this extension. Make it sure that
gestures are forced-off if the extension says so.
---
extensions/gesture-inhibitor/extension.js | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/extensions/gesture-inhibitor/extension.js b/extensions/gesture-inhibitor/extension.js
index e74ede2..66c706e 100644
--- a/extensions/gesture-inhibitor/extension.js
+++ b/extensions/gesture-inhibitor/extension.js
@@ -59,13 +59,19 @@ class Extension {
enable() {
this._map.forEach(m => {
this._settings.bind(m.setting, m.action, 'enabled',
- Gio.SettingsBindFlags.DEFAULT);
+ Gio.SettingsBindFlags.GET);
+ m.handler = m.action.connect('notify::enabled', () => {
+ if (m.action.enabled && !this._settings.get_boolean(m.setting))
+ m.action.enabled = this._settings.get_boolean(m.setting);
+ });
});
}
disable() {
this._map.forEach(m => {
m.action.enabled = true;
+ if (m.handler > 0)
+ m.action.disconnect(m.handler);
});
}
}
--
2.31.1

View File

@ -1,19 +1,19 @@
From 8beb3b27486fd50f74c15d2cf9ed8ca22fb546c2 Mon Sep 17 00:00:00 2001 From 8da1760af68496c6073be4d6b3c8266b64347925 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com> From: Ray Strode <rstrode@redhat.com>
Date: Tue, 24 Aug 2021 15:03:57 -0400 Date: Tue, 24 Aug 2021 15:03:57 -0400
Subject: [PATCH] heads-up-display: Add extension for showing persistent heads Subject: [PATCH] heads-up-display: Add extension for showing persistent heads
up display message up display message
--- ---
extensions/heads-up-display/extension.js | 436 ++++++++++++++++++ extensions/heads-up-display/extension.js | 320 ++++++++++++++++++
extensions/heads-up-display/headsUpMessage.js | 170 +++++++ extensions/heads-up-display/headsUpMessage.js | 150 ++++++++
extensions/heads-up-display/meson.build | 8 + extensions/heads-up-display/meson.build | 8 +
extensions/heads-up-display/metadata.json.in | 11 + extensions/heads-up-display/metadata.json.in | 11 +
...ll.extensions.heads-up-display.gschema.xml | 54 +++ ...ll.extensions.heads-up-display.gschema.xml | 54 +++
extensions/heads-up-display/prefs.js | 194 ++++++++ extensions/heads-up-display/prefs.js | 175 ++++++++++
extensions/heads-up-display/stylesheet.css | 32 ++ extensions/heads-up-display/stylesheet.css | 32 ++
meson.build | 1 + meson.build | 1 +
8 files changed, 906 insertions(+) 8 files changed, 751 insertions(+)
create mode 100644 extensions/heads-up-display/extension.js create mode 100644 extensions/heads-up-display/extension.js
create mode 100644 extensions/heads-up-display/headsUpMessage.js create mode 100644 extensions/heads-up-display/headsUpMessage.js
create mode 100644 extensions/heads-up-display/meson.build create mode 100644 extensions/heads-up-display/meson.build
@ -24,12 +24,13 @@ Subject: [PATCH] heads-up-display: Add extension for showing persistent heads
diff --git a/extensions/heads-up-display/extension.js b/extensions/heads-up-display/extension.js diff --git a/extensions/heads-up-display/extension.js b/extensions/heads-up-display/extension.js
new file mode 100644 new file mode 100644
index 00000000..7cebfa99 index 00000000..e4ef9e85
--- /dev/null --- /dev/null
+++ b/extensions/heads-up-display/extension.js +++ b/extensions/heads-up-display/extension.js
@@ -0,0 +1,436 @@ @@ -0,0 +1,320 @@
+/* exported init enable disable */ +/* exported init enable disable */
+ +
+
+const Signals = imports.signals; +const Signals = imports.signals;
+ +
+const { +const {
@ -40,59 +41,10 @@ index 00000000..7cebfa99
+const Me = ExtensionUtils.getCurrentExtension(); +const Me = ExtensionUtils.getCurrentExtension();
+ +
+const Main = imports.ui.main; +const Main = imports.ui.main;
+const Layout = imports.ui.layout;
+const HeadsUpMessage = Me.imports.headsUpMessage; +const HeadsUpMessage = Me.imports.headsUpMessage;
+ +
+const _ = ExtensionUtils.gettext; +const Gettext = imports.gettext.domain('gnome-shell-extensions');
+ +const _ = Gettext.gettext;
+var HeadsUpConstraint = GObject.registerClass({
+ Properties: {
+ 'offset': GObject.ParamSpec.int('offset',
+ 'Offset', 'offset',
+ GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE,
+ -1, 0, -1),
+ 'active': GObject.ParamSpec.boolean('active',
+ 'Active', 'active',
+ GObject.ParamFlags.READABLE | GObject.ParamFlags.WRITABLE,
+ true),
+ },
+}, class HeadsUpConstraint extends Layout.MonitorConstraint {
+ _init(props) {
+ super._init(props);
+ this._offset = 0;
+ this._active = true;
+ }
+
+ get offset() {
+ return this._offset;
+ }
+
+ set offset(o) {
+ this._offset = o
+ }
+
+ get active() {
+ return this._active;
+ }
+
+ set active(a) {
+ this._active = a;
+ }
+
+ vfunc_update_allocation(actor, actorBox) {
+ if (!Main.layoutManager.primaryMonitor)
+ return;
+
+ if (!this.active)
+ return;
+
+ if (actor.has_allocation())
+ return;
+
+ const workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
+ actorBox.init_rect(workArea.x, workArea.y + this.offset, workArea.width, workArea.height - this.offset);
+ }
+});
+ +
+class Extension { +class Extension {
+ constructor() { + constructor() {
@ -101,6 +53,7 @@ index 00000000..7cebfa99
+ +
+ enable() { + enable() {
+ this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.heads-up-display'); + this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.heads-up-display');
+ this._idleTimeoutChangedId = this._settings.connect('changed::idle-timeout', this._onIdleTimeoutChanged.bind(this));
+ this._settingsChangedId = this._settings.connect('changed', this._updateMessage.bind(this)); + this._settingsChangedId = this._settings.connect('changed', this._updateMessage.bind(this));
+ +
+ this._idleMonitor = Meta.IdleMonitor.get_core(); + this._idleMonitor = Meta.IdleMonitor.get_core();
@ -118,7 +71,10 @@ index 00000000..7cebfa99
+ disable() { + disable() {
+ this._dismissMessage(); + this._dismissMessage();
+ +
+ this._stopWatchingForIdle(); + if (this._idleWatchId) {
+ this._idleMonitor.remove_watch(this._idleWatchId);
+ this._idleWatchId = 0;
+ }
+ +
+ if (this._sessionModeUpdatedId) { + if (this._sessionModeUpdatedId) {
+ Main.sessionMode.disconnect(this._sessionModeUpdatedId); + Main.sessionMode.disconnect(this._sessionModeUpdatedId);
@ -135,11 +91,6 @@ index 00000000..7cebfa99
+ this._overviewHiddenId = 0; + this._overviewHiddenId = 0;
+ } + }
+ +
+ if (this._screenShieldVisibleId) {
+ Main.screenShield._dialog._clock.disconnect(this._screenShieldVisibleId);
+ this._screenShieldVisibleId = 0;
+ }
+
+ if (this._panelConnectionId) { + if (this._panelConnectionId) {
+ Main.layoutManager.panelBox.disconnect(this._panelConnectionId); + Main.layoutManager.panelBox.disconnect(this._panelConnectionId);
+ this._panelConnectionId = 0; + this._panelConnectionId = 0;
@ -167,8 +118,8 @@ index 00000000..7cebfa99
+ } + }
+ +
+ _onWindowMap(shellwm, actor) { + _onWindowMap(shellwm, actor) {
+ const windowObject = actor.meta_window; + let windowObject = actor.meta_window;
+ const windowType = windowObject.get_window_type(); + let windowType = windowObject.get_window_type();
+ +
+ if (windowType != Meta.WindowType.NORMAL) + if (windowType != Meta.WindowType.NORMAL)
+ return; + return;
@ -176,8 +127,8 @@ index 00000000..7cebfa99
+ if (!this._message || !this._message.visible) + if (!this._message || !this._message.visible)
+ return; + return;
+ +
+ const messageRect = new Meta.Rectangle({ x: this._message.x, y: this._message.y, width: this._message.width, height: this._message.height }); + let messageRect = new Meta.Rectangle({ x: this._message.x, y: this._message.y, width: this._message.width, height: this._message.height });
+ const windowRect = windowObject.get_frame_rect(); + let windowRect = windowObject.get_frame_rect();
+ +
+ if (windowRect.intersect(messageRect)) { + if (windowRect.intersect(messageRect)) {
+ windowObject.move_frame(false, windowRect.x, this._message.y + this._message.height); + windowObject.move_frame(false, windowRect.x, this._message.y + this._message.height);
@ -196,50 +147,17 @@ index 00000000..7cebfa99
+ _onSessionModeUpdated() { + _onSessionModeUpdated() {
+ if (!Main.sessionMode.hasWindows) + if (!Main.sessionMode.hasWindows)
+ this._messageInhibitedUntilIdle = false; + this._messageInhibitedUntilIdle = false;
+
+ const dialog = Main.screenShield._dialog;
+ if (!Main.sessionMode.isGreeter && dialog && !this._screenShieldVisibleId) {
+ this._screenShieldVisibleId = dialog._clock.connect('notify::visible',
+ this._updateMessage.bind(this));
+ this._screenShieldDestroyId = dialog._clock.connect('destroy', () => {
+ this._screenShieldVisibleId = 0;
+ this._screenShieldDestroyId = 0;
+ });
+ }
+ this._updateMessage(); + this._updateMessage();
+ } + }
+ +
+ _stopWatchingForIdle() { + _onIdleTimeoutChanged() {
+ if (this._idleWatchId) { + if (this._idleWatchId) {
+ this._idleMonitor.remove_watch(this._idleWatchId); + this._idleMonitor.remove_watch(this._idleWatchId);
+ this._idleWatchId = 0; + this._idleWatchId = 0;
+ } + }
+
+ if (this._idleTimeoutChangedId) {
+ this._settings.disconnect(this._idleTimeoutChangedId);
+ this._idleTimeoutChangedId = 0;
+ }
+ }
+
+ _onIdleTimeoutChanged() {
+ this._stopWatchingForIdle();
+ this._messageInhibitedUntilIdle = false; + this._messageInhibitedUntilIdle = false;
+ } + }
+ +
+ _onUserIdle() {
+ this._messageInhibitedUntilIdle = false;
+ this._updateMessage();
+ }
+
+ _watchForIdle() {
+ this._stopWatchingForIdle();
+
+ const idleTimeout = this._settings.get_uint('idle-timeout');
+
+ this._idleTimeoutChangedId = this._settings.connect('changed::idle-timeout', this._onIdleTimeoutChanged.bind(this));
+ this._idleWatchId = this._idleMonitor.add_idle_watch(idleTimeout * 1000, this._onUserIdle.bind(this));
+ }
+
+ _updateMessage() { + _updateMessage() {
+ if (this._messageInhibitedUntilIdle) { + if (this._messageInhibitedUntilIdle) {
+ if (this._message) + if (this._message)
@ -247,7 +165,10 @@ index 00000000..7cebfa99
+ return; + return;
+ } + }
+ +
+ this._stopWatchingForIdle(); + if (this._idleWatchId) {
+ this._idleMonitor.remove_watch(this._idleWatchId);
+ this._idleWatchId = 0;
+ }
+ +
+ if (Main.sessionMode.hasOverview && Main.overview.visible) { + if (Main.sessionMode.hasOverview && Main.overview.visible) {
+ this._dismissMessage(); + this._dismissMessage();
@ -264,10 +185,12 @@ index 00000000..7cebfa99
+ if (this._settings.get_boolean('show-when-unlocked')) + if (this._settings.get_boolean('show-when-unlocked'))
+ supportedModes.push('user'); + supportedModes.push('user');
+ +
+ if (this._settings.get_boolean('show-when-unlocking') || + if (this._settings.get_boolean('show-when-unlocking'))
+ this._settings.get_boolean('show-when-locked'))
+ supportedModes.push('unlock-dialog'); + supportedModes.push('unlock-dialog');
+ +
+ if (this._settings.get_boolean('show-when-locked'))
+ supportedModes.push('lock-screen');
+
+ if (this._settings.get_boolean('show-on-login-screen')) + if (this._settings.get_boolean('show-on-login-screen'))
+ supportedModes.push('gdm'); + supportedModes.push('gdm');
+ +
@ -277,25 +200,8 @@ index 00000000..7cebfa99
+ return; + return;
+ } + }
+ +
+ if (Main.sessionMode.currentMode === 'unlock-dialog') { + let heading = this._settings.get_string('message-heading');
+ const dialog = Main.screenShield._dialog; + let body = this._settings.get_string('message-body');
+ if (!this._settings.get_boolean('show-when-locked')) {
+ if (dialog._clock.visible) {
+ this._dismissMessage();
+ return;
+ }
+ }
+
+ if (!this._settings.get_boolean('show-when-unlocking')) {
+ if (!dialog._clock.visible) {
+ this._dismissMessage();
+ return;
+ }
+ }
+ }
+
+ const heading = this._settings.get_string('message-heading');
+ const body = this._settings.get_string('message-body');
+ +
+ if (!heading && !body) { + if (!heading && !body) {
+ this._dismissMessage(); + this._dismissMessage();
@ -325,11 +231,22 @@ index 00000000..7cebfa99
+ if (!Main.sessionMode.hasWindows) + if (!Main.sessionMode.hasWindows)
+ return; + return;
+ +
+ this._watchForIdle(); + if (this._idleWatchId) {
+ this._idleMonitor.remove_watch(this._idleWatchId);
+ this._idleWatchId = 0;
+ }
+
+ let idleTimeout = this._settings.get_uint('idle-timeout');
+ this._idleWatchId = this._idleMonitor.add_idle_watch(idleTimeout * 1000, this._onUserIdle.bind(this));
+ this._messageInhibitedUntilIdle = true; + this._messageInhibitedUntilIdle = true;
+ this._updateMessage(); + this._updateMessage();
+ } + }
+ +
+ _onUserIdle() {
+ this._messageInhibitedUntilIdle = false;
+ this._updateMessage();
+ }
+
+ _dismissMessage() { + _dismissMessage() {
+ if (!this._message) { + if (!this._message) {
+ return; + return;
@ -346,15 +263,7 @@ index 00000000..7cebfa99
+ if (!Main.messageTray) + if (!Main.messageTray)
+ return; + return;
+ +
+ if (this._updateMessageTrayId) { + Main.messageTray.actor.set_translation(0, 0, 0);
+ global.stage.disconnect(this._updateMessageTrayId);
+ this._updateMessageTrayId = 0;
+ }
+
+ if (this._messageTrayConstraint) {
+ Main.messageTray.remove_constraint(this._messageTrayConstraint);
+ this._messageTrayConstraint = null;
+ }
+ } + }
+ +
+ _alignMessageTray() { + _alignMessageTray() {
@ -366,27 +275,10 @@ index 00000000..7cebfa99
+ return; + return;
+ } + }
+ +
+ if (this._updateMessageTrayId) + let panelBottom = Main.layoutManager.panelBox.y + Main.layoutManager.panelBox.height;
+ return; + let messageBottom = this._message.y + this._message.height;
+ +
+ this._updateMessageTrayId = global.stage.connect('before-update', () => { + Main.messageTray.actor.set_translation(0, messageBottom - panelBottom, 0);
+ if (!this._messageTrayConstraint) {
+ this._messageTrayConstraint = new HeadsUpConstraint({ primary: true });
+
+ Main.layoutManager.panelBox.bind_property('visible',
+ this._messageTrayConstraint, 'active',
+ GObject.BindingFlags.SYNC_CREATE);
+
+ Main.messageTray.add_constraint(this._messageTrayConstraint);
+ }
+
+ const panelBottom = Main.layoutManager.panelBox.y + Main.layoutManager.panelBox.height;
+ const messageBottom = this._message.y + this._message.height;
+
+ this._messageTrayConstraint.offset = messageBottom - panelBottom;
+ global.stage.disconnect(this._updateMessageTrayId);
+ this._updateMessageTrayId = 0;
+ });
+ } + }
+ +
+ _resetLoginDialog() { + _resetLoginDialog() {
@ -396,22 +288,15 @@ index 00000000..7cebfa99
+ if (!Main.screenShield || !Main.screenShield._dialog) + if (!Main.screenShield || !Main.screenShield._dialog)
+ return; + return;
+ +
+ const dialog = Main.screenShield._dialog; + let dialog = Main.screenShield._dialog;
+ +
+ if (this._authPromptAllocatedId) { + if (this._authPromptAllocatedId) {
+ dialog.disconnect(this._authPromptAllocatedId); + dialog.disconnect(this._authPromptAllocatedId);
+ this._authPromptAllocatedId = 0; + this._authPromptAllocatedId = 0;
+ } + }
+ +
+ if (this._updateLoginDialogId) { + dialog.style = null;
+ global.stage.disconnect(this._updateLoginDialogId); + dialog._bannerView.style = null;
+ this._updateLoginDialogId = 0;
+ }
+
+ if (this._loginDialogConstraint) {
+ dialog.remove_constraint(this._loginDialogConstraint);
+ this._loginDialogConstraint = null;
+ }
+ } + }
+ +
+ _adaptLoginDialogForMessage() { + _adaptLoginDialogForMessage() {
@ -426,26 +311,25 @@ index 00000000..7cebfa99
+ return; + return;
+ } + }
+ +
+ const dialog = Main.screenShield._dialog; + let dialog = Main.screenShield._dialog;
+ +
+ if (this._updateLoginDialogId)
+ return;
+
+ this._updateLoginDialogId = global.stage.connect('before-update', () => {
+ let messageHeight = this._message.y + this._message.height; + let messageHeight = this._message.y + this._message.height;
+ if (dialog._logoBin.visible) + if (dialog._logoBin.visible)
+ messageHeight -= dialog._logoBin.height; + messageHeight -= dialog._logoBin.height;
+ +
+ if (!this._logindDialogConstraint) { + if (messageHeight <= 0) {
+ this._loginDialogConstraint = new HeadsUpConstraint({ primary: true }); + dialog.style = null;
+ dialog.add_constraint(this._loginDialogConstraint); + dialog._bannerView.style = null;
+ } else {
+ dialog.style = `margin-top: ${messageHeight}px;`;
+
+ let bannerOnSide = dialog._bannerView.x + dialog._bannerView.width < dialog._authPrompt.actor.x;
+
+ if (bannerOnSide)
+ dialog._bannerView.style = `margin-bottom: ${messageHeight}px;`;
+ else
+ dialog._bannerView.style = `margin-top: ${messageHeight}px`;
+ } + }
+
+ this._loginDialogConstraint.offset = messageHeight;
+
+ global.stage.disconnect(this._updateLoginDialogId);
+ this._updateLoginDialogId = 0;
+ });
+ } + }
+ +
+ _adaptSessionForMessage() { + _adaptSessionForMessage() {
@ -454,8 +338,8 @@ index 00000000..7cebfa99
+ if (Main.sessionMode.isGreeter) { + if (Main.sessionMode.isGreeter) {
+ this._adaptLoginDialogForMessage(); + this._adaptLoginDialogForMessage();
+ if (!this._authPromptAllocatedId) { + if (!this._authPromptAllocatedId) {
+ const dialog = Main.screenShield._dialog; + let dialog = Main.screenShield._dialog;
+ this._authPromptAllocatedId = dialog._authPrompt.connect('notify::allocation', this._adaptLoginDialogForMessage.bind(this)); + this._authPromptAllocatedId = dialog._authPrompt.actor.connect("notify::allocation", this._adaptLoginDialogForMessage.bind(this));
+ } + }
+ } + }
+ } + }
@ -466,11 +350,11 @@ index 00000000..7cebfa99
+} +}
diff --git a/extensions/heads-up-display/headsUpMessage.js b/extensions/heads-up-display/headsUpMessage.js diff --git a/extensions/heads-up-display/headsUpMessage.js b/extensions/heads-up-display/headsUpMessage.js
new file mode 100644 new file mode 100644
index 00000000..87a8c8ba index 00000000..d828d8c9
--- /dev/null --- /dev/null
+++ b/extensions/heads-up-display/headsUpMessage.js +++ b/extensions/heads-up-display/headsUpMessage.js
@@ -0,0 +1,170 @@ @@ -0,0 +1,150 @@
+const { Atk, Clutter, GLib, GObject, Pango, St } = imports.gi; +const { Atk, Clutter, GObject, Pango, St } = imports.gi;
+const Layout = imports.ui.layout; +const Layout = imports.ui.layout;
+const Main = imports.ui.main; +const Main = imports.ui.main;
+const Signals = imports.signals; +const Signals = imports.signals;
@ -480,64 +364,48 @@ index 00000000..87a8c8ba
+ _init(params) { + _init(params) {
+ super._init(params); + super._init(params);
+ +
+ this._widthCoverage = 0.75;
+ this._heightCoverage = 0.25;
+
+ this._workAreasChangedId = global.display.connect('workareas-changed', this._getWorkAreaAndMeasureLineHeight.bind(this));
+ }
+
+ _getWorkAreaAndMeasureLineHeight() {
+ if (!this.get_parent())
+ return;
+
+ this._workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
+
+ this.clutter_text.single_line_mode = true;
+ this.clutter_text.line_wrap = false;
+
+ this._lineHeight = super.vfunc_get_preferred_height(-1)[0];
+
+ this.clutter_text.single_line_mode = false; + this.clutter_text.single_line_mode = false;
+ this.clutter_text.line_wrap = true; + this.clutter_text.line_wrap = true;
+ } + }
+ +
+ vfunc_parent_set(oldParent) {
+ this._getWorkAreaAndMeasureLineHeight();
+ }
+
+ vfunc_get_preferred_width(forHeight) { + vfunc_get_preferred_width(forHeight) {
+ const maxWidth = this._widthCoverage * this._workArea.width + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
+ +
+ let [labelMinimumWidth, labelNaturalWidth] = super.vfunc_get_preferred_width(forHeight); + let [labelMinimumWidth, labelNaturalWidth] = super.vfunc_get_preferred_width(forHeight);
+ +
+ labelMinimumWidth = Math.min(labelMinimumWidth, maxWidth); + labelMinimumWidth = Math.min(labelMinimumWidth, .75 * workArea.width);
+ labelNaturalWidth = Math.min(labelNaturalWidth, maxWidth); + labelNaturalWidth = Math.min(labelNaturalWidth, .75 * workArea.width);
+ +
+ return [labelMinimumWidth, labelNaturalWidth]; + return [labelMinimumWidth, labelNaturalWidth];
+ } + }
+ +
+ vfunc_get_preferred_height(forWidth) { + vfunc_get_preferred_height(forWidth) {
+ const labelHeightUpperBound = this._heightCoverage * this._workArea.height; + let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
+ const numberOfLines = Math.floor(labelHeightUpperBound / this._lineHeight); + let labelHeightUpperBound = .25 * workArea.height;
+ this._numberOfLines = Math.max(numberOfLines, 1);
+ +
+ const maxHeight = this._lineHeight * this._numberOfLines; + this.clutter_text.single_line_mode = true;
+ this.clutter_text.line_wrap = false;
+ let [lineHeight] = super.vfunc_get_preferred_height(-1);
+ let numberOfLines = Math.floor(labelHeightUpperBound / lineHeight);
+ numberOfLines = Math.max(numberOfLines, 1);
+ +
+ let labelHeight = lineHeight * numberOfLines;
+
+ this.clutter_text.single_line_mode = false;
+ this.clutter_text.line_wrap = true;
+ let [labelMinimumHeight, labelNaturalHeight] = super.vfunc_get_preferred_height(forWidth); + let [labelMinimumHeight, labelNaturalHeight] = super.vfunc_get_preferred_height(forWidth);
+ +
+ labelMinimumHeight = Math.min(labelMinimumHeight, maxHeight); + labelMinimumHeight = Math.min(labelMinimumHeight, labelHeight);
+ labelNaturalHeight = Math.min(labelNaturalHeight, maxHeight); + labelNaturalHeight = Math.min(labelNaturalHeight, labelHeight);
+ +
+ return [labelMinimumHeight, labelNaturalHeight]; + return [labelMinimumHeight, labelNaturalHeight];
+ } + }
+ +
+ destroy() { + vfunc_allocate(box, flags) {
+ if (this._workAreasChangedId) { + if (!this.visible)
+ global.display.disconnect(this._workAreasChangedId); + return;
+ this._workAreasChangedId = 0;
+ }
+ +
+ super.destroy(); + super.vfunc_allocate(box, flags);
+ } + }
+}); +});
+ +
@ -548,17 +416,28 @@ index 00000000..87a8c8ba
+ style_class: 'message', + style_class: 'message',
+ accessible_role: Atk.Role.NOTIFICATION, + accessible_role: Atk.Role.NOTIFICATION,
+ can_focus: false, + can_focus: false,
+ opacity: 0,
+ }); + });
+ +
+ Main.layoutManager.addChrome(this, { affectsInputRegion: true }); + Main.layoutManager.addChrome(this, { affectsInputRegion: true });
+ +
+ this.add_style_class_name('heads-up-display-message'); + this.add_style_class_name('heads-up-display-message');
+ +
+ this._panelAllocationId = Main.layoutManager.panelBox.connect('notify::allocation', this._alignWithPanel.bind(this)); + this._panelAllocationId = Main.layoutManager.panelBox.connect ("notify::allocation", this._alignWithPanel.bind(this));
+ this.connect('notify::allocation', this._alignWithPanel.bind(this)); + this.connect("notify::allocation", this._alignWithPanel.bind(this));
+ +
+ const contentsBox = new St.BoxLayout({ style_class: 'heads-up-message-content', + this._messageTraySnappingId = Main.messageTray.connect ("notify::y", () => {
+ if (!this.visible)
+ return;
+
+ if (!Main.messageTray.visible)
+ return;
+
+ if (Main.messageTray.y >= this.y && Main.messageTray.y < this.y + this.height)
+ Main.messageTray.y = this.y + this.height;
+ });
+
+
+ let contentsBox = new St.BoxLayout({ style_class: 'heads-up-message-content',
+ vertical: true, + vertical: true,
+ x_align: Clutter.ActorAlign.CENTER }); + x_align: Clutter.ActorAlign.CENTER });
+ this.add_actor(contentsBox); + this.add_actor(contentsBox);
@ -576,34 +455,24 @@ index 00000000..87a8c8ba
+ contentsBox.add_actor(this.bodyLabel); + contentsBox.add_actor(this.bodyLabel);
+ +
+ this.setBody(body); + this.setBody(body);
+ } + this.bodyLabel.clutter_text.label = this.bodyLabel;
+
+ vfunc_parent_set(oldParent) {
+ this._alignWithPanel();
+ } + }
+ +
+ _alignWithPanel() { + _alignWithPanel() {
+ if (this._afterUpdateId) + if (!this.visible)
+ return; + return;
+ +
+ this._afterUpdateId = global.stage.connect('before-update', () => { + this.x = Main.panel.actor.x;
+ let x = Main.panel.x; + this.x += Main.panel.actor.width / 2;
+ let y = Main.panel.y + Main.panel.height; + this.x -= this.width / 2;
+ + this.x = Math.floor(this.x);
+ x += Main.panel.width / 2; + this.y = Main.panel.actor.y + Main.panel.actor.height;
+ x -= this.width / 2; + this.queue_relayout();
+ x = Math.floor(x);
+ this.set_position(x,y);
+ this.opacity = 255;
+
+ global.stage.disconnect(this._afterUpdateId);
+ this._afterUpdateId = 0;
+ });
+ } + }
+ +
+ setHeading(text) { + setHeading(text) {
+ if (text) { + if (text) {
+ const heading = text ? text.replace(/\n/g, ' ') : ''; + let heading = text ? text.replace(/\n/g, ' ') : '';
+ this.headingLabel.text = heading; + this.headingLabel.text = heading;
+ this.headingLabel.visible = true; + this.headingLabel.visible = true;
+ } else { + } else {
@ -627,14 +496,9 @@ index 00000000..87a8c8ba
+ this._panelAllocationId = 0; + this._panelAllocationId = 0;
+ } + }
+ +
+ if (this._afterUpdateId) { + if (this._messageTraySnappingId) {
+ global.stage.disconnect(this._afterUpdateId); + Main.messageTray.disconnect(this._messageTraySnappingId);
+ this._afterUpdateId = 0; + this._messageTraySnappingId = 0;
+ }
+
+ if (this.bodyLabel) {
+ this.bodyLabel.destroy();
+ this.bodyLabel = null;
+ } + }
+ +
+ super.destroy(); + super.destroy();
@ -733,10 +597,10 @@ index 00000000..ea1f3774
+</schemalist> +</schemalist>
diff --git a/extensions/heads-up-display/prefs.js b/extensions/heads-up-display/prefs.js diff --git a/extensions/heads-up-display/prefs.js b/extensions/heads-up-display/prefs.js
new file mode 100644 new file mode 100644
index 00000000..a7106e07 index 00000000..b4b6f94c
--- /dev/null --- /dev/null
+++ b/extensions/heads-up-display/prefs.js +++ b/extensions/heads-up-display/prefs.js
@@ -0,0 +1,194 @@ @@ -0,0 +1,175 @@
+ +
+/* Desktop Icons GNOME Shell extension +/* Desktop Icons GNOME Shell extension
+ * + *
@ -780,10 +644,6 @@ index 00000000..a7106e07
+ padding-bottom: 8px; + padding-bottom: 8px;
+ } + }
+ +
+ .contents {
+ padding: 20px;
+ }
+
+ .message-label { + .message-label {
+ font-weight: bold; + font-weight: bold;
+ } + }
@ -793,82 +653,74 @@ index 00000000..a7106e07
+ +
+function init() { +function init() {
+ settings = ExtensionUtils.getSettings("org.gnome.shell.extensions.heads-up-display"); + settings = ExtensionUtils.getSettings("org.gnome.shell.extensions.heads-up-display");
+ const cssProvider = new Gtk.CssProvider(); + let cssProvider = new Gtk.CssProvider();
+ cssProvider.load_from_data(cssData); + cssProvider.load_from_data(cssData);
+ +
+ const display = Gdk.Display.get_default(); + let screen = Gdk.Screen.get_default();
+ Gtk.StyleContext.add_provider_for_display(display, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION); + Gtk.StyleContext.add_provider_for_screen(screen, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
+} +}
+ +
+function buildPrefsWidget() { +function buildPrefsWidget() {
+ ExtensionUtils.initTranslations(); + ExtensionUtils.initTranslations();
+ +
+ const contents = new Gtk.Box({ + let contents = new Gtk.Box({
+ orientation: Gtk.Orientation.VERTICAL, + orientation: Gtk.Orientation.VERTICAL,
+ border_width: 20,
+ spacing: 10, + spacing: 10,
+ visible: true,
+ }); + });
+ +
+ contents.append(buildSwitch('show-when-locked', _("Show message when screen is locked"))); + contents.add(buildSwitch('show-when-locked', _("Show message when screen is locked")));
+ contents.append(buildSwitch('show-when-unlocking', _("Show message on unlock screen"))); + contents.add(buildSwitch('show-when-unlocking', _("Show message on unlock screen")));
+ contents.append(buildSwitch('show-when-unlocked', _("Show message when screen is unlocked"))); + contents.add(buildSwitch('show-when-unlocked', _("Show message when screen is unlocked")));
+ contents.append(buildSpinButton('idle-timeout', _("Seconds after user goes idle before reshowing message"))); + contents.add(buildSpinButton('idle-timeout', _("Seconds after user goes idle before reshowing message")));
+ contents.get_style_context().add_class("contents");
+ +
+ const outerMessageBox = new Gtk.Box({ + let outerMessageBox = new Gtk.Box({
+ orientation: Gtk.Orientation.VERTICAL, + orientation: Gtk.Orientation.VERTICAL,
+ border_width: 0,
+ spacing: 5, + spacing: 5,
+ visible: true,
+ }); + });
+ contents.append(outerMessageBox); + contents.add(outerMessageBox);
+ +
+ const messageLabel = new Gtk.Label({ + let messageLabel = new Gtk.Label({
+ label: 'Message', + label: 'Message',
+ halign: Gtk.Align.START, + halign: Gtk.Align.START,
+ visible: true,
+ }); + });
+ messageLabel.get_style_context().add_class("message-label"); + messageLabel.get_style_context().add_class("message-label");
+ outerMessageBox.append(messageLabel); + outerMessageBox.add(messageLabel);
+ +
+ const innerMessageBox = new Gtk.Box({ + let innerMessageBox = new Gtk.Box({
+ orientation: Gtk.Orientation.VERTICAL, + orientation: Gtk.Orientation.VERTICAL,
+ border_width: 0,
+ spacing: 0, + spacing: 0,
+ visible: true,
+ }); + });
+ innerMessageBox.get_style_context().add_class("border"); + innerMessageBox.get_style_context().add_class("border");
+ outerMessageBox.append(innerMessageBox); + outerMessageBox.add(innerMessageBox);
+ +
+ innerMessageBox.append(buildEntry('message-heading', _("Message Heading"))); + innerMessageBox.add(buildEntry('message-heading', _("Message Heading")));
+ innerMessageBox.append(buildTextView('message-body', _("Message Body"))); + innerMessageBox.add(buildTextView('message-body', _("Message Body")));
+ contents.show_all();
+ return contents; + return contents;
+} +}
+ +
+function buildTextView(key, labelText) { +function buildTextView(key, labelText) {
+ const textView = new Gtk.TextView({ + let textView = new Gtk.TextView({
+ accepts_tab: false, + accepts_tab: false,
+ visible: true,
+ wrap_mode: Gtk.WrapMode.WORD, + wrap_mode: Gtk.WrapMode.WORD,
+ }); + });
+
+ settings.bind(key, textView.get_buffer(), 'text', Gio.SettingsBindFlags.DEFAULT); + settings.bind(key, textView.get_buffer(), 'text', Gio.SettingsBindFlags.DEFAULT);
+ +
+ const scrolledWindow = new Gtk.ScrolledWindow({ + let scrolledWindow = new Gtk.ScrolledWindow({
+ hexpand: true, + expand: true,
+ vexpand: true,
+ visible: true,
+ }); + });
+ const styleContext = scrolledWindow.get_style_context(); + let styleContext = scrolledWindow.get_style_context();
+ styleContext.add_class("margins"); + styleContext.add_class("margins");
+ +
+ scrolledWindow.set_child(textView); + scrolledWindow.add(textView);
+ return scrolledWindow; + return scrolledWindow;
+} +}
+function buildEntry(key, labelText) { +function buildEntry(key, labelText) {
+ const entry = new Gtk.Entry({ + let entry = new Gtk.Entry({ placeholder_text: labelText });
+ placeholder_text: labelText, + let styleContext = entry.get_style_context();
+ visible: true,
+ });
+ const styleContext = entry.get_style_context();
+ styleContext.add_class("no-border"); + styleContext.add_class("no-border");
+ settings.bind(key, entry, 'text', Gio.SettingsBindFlags.DEFAULT); + settings.bind(key, entry, 'text', Gio.SettingsBindFlags.DEFAULT);
+ +
@ -878,18 +730,15 @@ index 00000000..a7106e07
+} +}
+ +
+function buildSpinButton(key, labelText) { +function buildSpinButton(key, labelText) {
+ const hbox = new Gtk.Box({ + let hbox = new Gtk.Box({
+ orientation: Gtk.Orientation.HORIZONTAL, + orientation: Gtk.Orientation.HORIZONTAL,
+ spacing: 10, + spacing: 10,
+ visible: true,
+ }); + });
+ const label = new Gtk.Label({ + let label = new Gtk.Label({
+ hexpand: true,
+ label: labelText, + label: labelText,
+ visible: true,
+ xalign: 0, + xalign: 0,
+ }); + });
+ const adjustment = new Gtk.Adjustment({ + let adjustment = new Gtk.Adjustment({
+ value: 0, + value: 0,
+ lower: 0, + lower: 0,
+ upper: 2147483647, + upper: 2147483647,
@ -897,38 +746,34 @@ index 00000000..a7106e07
+ page_increment: 60, + page_increment: 60,
+ page_size: 60, + page_size: 60,
+ }); + });
+ const spinButton = new Gtk.SpinButton({ + let spinButton = new Gtk.SpinButton({
+ adjustment: adjustment, + adjustment: adjustment,
+ climb_rate: 1.0, + climb_rate: 1.0,
+ digits: 0, + digits: 0,
+ max_width_chars: 3, + max_width_chars: 3,
+ visible: true,
+ width_chars: 3, + width_chars: 3,
+ }); + });
+ settings.bind(key, spinButton, 'value', Gio.SettingsBindFlags.DEFAULT); + settings.bind(key, spinButton, 'value', Gio.SettingsBindFlags.DEFAULT);
+ hbox.append(label); + hbox.pack_start(label, true, true, 0);
+ hbox.append(spinButton); + hbox.add(spinButton);
+ return hbox; + return hbox;
+} +}
+ +
+function buildSwitch(key, labelText) { +function buildSwitch(key, labelText) {
+ const hbox = new Gtk.Box({ + let hbox = new Gtk.Box({
+ orientation: Gtk.Orientation.HORIZONTAL, + orientation: Gtk.Orientation.HORIZONTAL,
+ spacing: 10, + spacing: 10,
+ visible: true,
+ }); + });
+ const label = new Gtk.Label({ + let label = new Gtk.Label({
+ hexpand: true,
+ label: labelText, + label: labelText,
+ visible: true,
+ xalign: 0, + xalign: 0,
+ }); + });
+ const switcher = new Gtk.Switch({ + let switcher = new Gtk.Switch({
+ active: settings.get_boolean(key), + active: settings.get_boolean(key),
+ }); + });
+ settings.bind(key, switcher, 'active', Gio.SettingsBindFlags.DEFAULT); + settings.bind(key, switcher, 'active', Gio.SettingsBindFlags.DEFAULT);
+ hbox.append(label); + hbox.pack_start(label, true, true, 0);
+ hbox.append(switcher); + hbox.add(switcher);
+ return hbox; + return hbox;
+} +}
diff --git a/extensions/heads-up-display/stylesheet.css b/extensions/heads-up-display/stylesheet.css diff --git a/extensions/heads-up-display/stylesheet.css b/extensions/heads-up-display/stylesheet.css
@ -970,10 +815,10 @@ index 00000000..93034469
+ text-align: center; + text-align: center;
+} +}
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index 582535c4..ecc86fc8 100644 index ba84f8f3..c5fc86ef 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -39,6 +39,7 @@ classic_extensions = [ @@ -44,6 +44,7 @@ classic_extensions = [
default_extensions = classic_extensions default_extensions = classic_extensions
default_extensions += [ default_extensions += [
'drive-menu', 'drive-menu',
@ -982,5 +827,5 @@ index 582535c4..ecc86fc8 100644
'windowsNavigator', 'windowsNavigator',
'workspace-indicator' 'workspace-indicator'
-- --
2.33.1 2.32.0

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
From f0e4618bf0752aaf094d78b4c810ebda817ccaad Mon Sep 17 00:00:00 2001 From ce48dc2f4fba6a7084540df256cb5b3eb0da43da Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 2 Jun 2021 17:32:21 +0200 Date: Wed, 2 Jun 2021 17:32:21 +0200
Subject: [PATCH] top-icons: Don't use wm_class as role Subject: [PATCH] top-icons: Don't use wm_class as role
@ -10,7 +10,7 @@ which may be desirable in some circumstances.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js
index 79e2f42..3dfba46 100644 index 79e2f423..3dfba469 100644
--- a/extensions/top-icons/extension.js --- a/extensions/top-icons/extension.js
+++ b/extensions/top-icons/extension.js +++ b/extensions/top-icons/extension.js
@@ -63,7 +63,7 @@ class SysTray { @@ -63,7 +63,7 @@ class SysTray {
@ -23,5 +23,5 @@ index 79e2f42..3dfba46 100644
} }
-- --
2.32.0 2.31.1

View File

@ -1,46 +0,0 @@
From a31f4b6ca703faab25c306dc33056763642a83cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 30 Sep 2022 18:16:16 +0200
Subject: [PATCH] window-list: Explicitly dispose settings on destroy
This will not only disconnect the signal handler, but also remove
any bindings. This works around a crash that happens if a setting
that triggers the binding changes at the same time as a setting
that rebuilds the window list; in that case, the binding handler
runs after gjs has dropped its wrapper object, but before the
binding is removed automaticalled when the object is finalized.
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/416
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/243>
---
extensions/window-list/extension.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
index 89413818..91ee3e6b 100644
--- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js
@@ -842,8 +842,8 @@ class WindowList extends St.Widget {
this._dndWindow = null;
this._settings = ExtensionUtils.getSettings();
- this._groupingModeChangedId = this._settings.connect(
- 'changed::grouping-mode', this._groupingModeChanged.bind(this));
+ this._settings.connect('changed::grouping-mode',
+ () => this._groupingModeChanged());
this._grouped = undefined;
this._groupingModeChanged();
}
@@ -1112,7 +1112,7 @@ class WindowList extends St.Widget {
Main.xdndHandler.disconnect(this._dragBeginId);
Main.xdndHandler.disconnect(this._dragEndId);
- this._settings.disconnect(this._groupingModeChangedId);
+ this._settings.run_dispose();
let windows = global.get_window_actors();
for (let i = 0; i < windows.length; i++)
--
2.39.1

View File

@ -0,0 +1,55 @@
From b4eeaf7ea12fa7d9713e80371490d8060396b3cb Mon Sep 17 00:00:00 2001
From: Milan Crha <mcrha@redhat.com>
Date: Fri, 17 Apr 2020 09:21:42 +0200
Subject: [PATCH] window-list: Invalid current mode selected in Preferences
It seems that gtk+ resets the active radio whenever a new radio button
is added into the group, thus rather restore the current mode after
the group is fully populated.
https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/119
---
extensions/window-list/prefs.js | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/extensions/window-list/prefs.js b/extensions/window-list/prefs.js
index 78792b5..17e9799 100644
--- a/extensions/window-list/prefs.js
+++ b/extensions/window-list/prefs.js
@@ -50,6 +50,7 @@ class WindowListPrefsWidget extends Gtk.Grid {
};
let radio = null;
+ let currentRadio = null;
for (let i = 0; i < modes.length; i++) {
let mode = modes[i];
let label = modeLabels[mode];
@@ -59,18 +60,24 @@ class WindowListPrefsWidget extends Gtk.Grid {
}
radio = new Gtk.RadioButton({
- active: currentMode == mode,
+ active: !i,
label: label,
group: radio
});
grid.add(radio);
+ if (currentMode === mode)
+ currentRadio = radio;
+
radio.connect('toggled', button => {
if (button.active)
this._settings.set_string('grouping-mode', mode);
});
}
+ if (currentRadio)
+ currentRadio.active = true;
+
let check = new Gtk.CheckButton({
label: _('Show on all monitors'),
margin_top: 6
--
2.26.2

View File

@ -0,0 +1,30 @@
From ee25c2aac70b86f31c91f6491dad4c67a59bc261 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 26 Jan 2021 21:14:47 +0100
Subject: [PATCH] window-list: Leave "fake overview" when destroyed
Otherwise we leave an incomplete overview-like state around, which
can cause issues later when the extension is re-enabled (for example
when coming back from screen lock).
https://bugzilla.redhat.com/show_bug.cgi?id=1904371
---
extensions/window-list/windowPicker.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/extensions/window-list/windowPicker.js b/extensions/window-list/windowPicker.js
index 12a7627..afb5d27 100644
--- a/extensions/window-list/windowPicker.js
+++ b/extensions/window-list/windowPicker.js
@@ -210,6 +210,8 @@ var WindowPicker = class {
}
_onDestroy() {
+ this._fakeOverviewVisible(false);
+
if (this._monitorsChangedId)
Main.layoutManager.disconnect(this._monitorsChangedId);
this._monitorsChangedId = 0;
--
2.31.1

View File

@ -1,51 +0,0 @@
From 64d4841a77293a45e769b868e1109b63811be7d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 2 Jul 2024 19:04:10 +0200
Subject: [PATCH] workspace-indicator: Re-fittsify workspace previews
For the window-list extension, it is important that the workspace
previews extend to the bottom edge for easier click targets.
That broke while merging the code with the workspace-indicator,
fix it again by moving the padding from the parent box into the
thumbnail children.
---
.../workspace-indicator/stylesheet-dark.css | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/extensions/workspace-indicator/stylesheet-dark.css b/extensions/workspace-indicator/stylesheet-dark.css
index fb0e8b1a..017d844a 100644
--- a/extensions/workspace-indicator/stylesheet-dark.css
+++ b/extensions/workspace-indicator/stylesheet-dark.css
@@ -11,7 +11,6 @@
}
.workspace-indicator .workspaces-box {
- padding: 5px;
spacing: 3px;
}
@@ -20,6 +19,20 @@
spacing: 6px;
}
+.workspace-indicator .workspace-box {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+.workspace-indicator StButton:first-child:ltr > .workspace-box,
+.workspace-indicator StButton:last-child:rtl > .workspace-box {
+ padding-left: 5px;
+}
+.workspace-indicator StButton:last-child:ltr > .workspace-box,
+.workspace-indicator StButton:first-child:rtl > .workspace-box {
+ padding-right: 5px;
+}
+
.workspace-indicator-menu .workspace-box {
spacing: 6px;
}
--
2.45.2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,176 @@
From b87a0085342b9828e7e57e8db892b79e345bfbc3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 Jan 2021 20:18:39 +0100
Subject: [PATCH 1/2] workspace-indicator: Add tooltips to workspace thumbnails
When showing previews instead of the menu, the workspace names from
our preferences don't appear anywhere. Some users care strongly about
those, so expose them as tooltip on hover.
---
extensions/workspace-indicator/extension.js | 40 +++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/extensions/workspace-indicator/extension.js b/extensions/workspace-indicator/extension.js
index 69eef88c..d377f288 100644
--- a/extensions/workspace-indicator/extension.js
+++ b/extensions/workspace-indicator/extension.js
@@ -8,6 +8,7 @@ const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
@@ -15,6 +16,9 @@ const _ = Gettext.gettext;
const WORKSPACE_SCHEMA = 'org.gnome.desktop.wm.preferences';
const WORKSPACE_KEY = 'workspace-names';
+const TOOLTIP_OFFSET = 6;
+const TOOLTIP_ANIMATION_TIME = 150;
+
let WindowPreview = GObject.registerClass({
GTypeName: 'WorkspaceIndicatorWindowPreview'
}, class WindowPreview extends St.Button {
@@ -117,7 +121,14 @@ let WorkspaceThumbnail = GObject.registerClass({
y_fill: true
});
+ this._tooltip = new St.Label({
+ style_class: 'dash-label',
+ visible: false,
+ });
+ Main.uiGroup.add_child(this._tooltip);
+
this.connect('destroy', this._onDestroy.bind(this));
+ this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
@@ -204,7 +215,36 @@ let WorkspaceThumbnail = GObject.registerClass({
ws.activate(global.get_current_time());
}
+ _syncTooltip() {
+ if (this.hover) {
+ this._tooltip.text = Meta.prefs_get_workspace_name(this._index);
+ this._tooltip.opacity = 0;
+ this._tooltip.show();
+
+ const [stageX, stageY] = this.get_transformed_position();
+ const thumbWidth = this.allocation.get_width();
+ const thumbHeight = this.allocation.get_height();
+ const tipWidth = this._tooltip.width;
+ const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
+ const monitor = Main.layoutManager.findMonitorForActor(this);
+ const x = Math.min(
+ Math.max(stageX + xOffset, monitor.x),
+ monitor.x + monitor.width - tipWidth);
+ const y = stageY + thumbHeight + TOOLTIP_OFFSET;
+ this._tooltip.set_position(x, y);
+ }
+
+ Tweener.addTween(this._tooltip, {
+ opacity: this.hover ? 255 : 0,
+ time: TOOLTIP_ANIMATION_TIME / 1000,
+ transition: 'easeOutQuad',
+ onComplete: () => (this._tooltip.visible = this.hover),
+ });
+ }
+
_onDestroy() {
+ this._tooltip.destroy();
+
this._workspace.disconnect(this._windowAddedId);
this._workspace.disconnect(this._windowRemovedId);
global.display.disconnect(this._restackedId);
--
2.44.0
From 36f2762c8c6cda512f164ea22b62d10d03a369b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 Jan 2021 20:29:01 +0100
Subject: [PATCH 2/2] window-list: Add tooltips to workspace thumbnails
When showing previews instead of the menu, the workspace names
don't appear anywhere. Some users care strongly about those, so
expose them as tooltip on hover.
---
extensions/window-list/workspaceIndicator.js | 40 ++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/extensions/window-list/workspaceIndicator.js b/extensions/window-list/workspaceIndicator.js
index ca476111..8ae9b288 100644
--- a/extensions/window-list/workspaceIndicator.js
+++ b/extensions/window-list/workspaceIndicator.js
@@ -5,10 +5,14 @@ const DND = imports.ui.dnd;
const Main = imports.ui.main;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
+const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext;
+const TOOLTIP_OFFSET = 6;
+const TOOLTIP_ANIMATION_TIME = 150;
+
let WindowPreview = GObject.registerClass({
GTypeName: 'WindowListWindowPreview'
}, class WindowPreview extends St.Button {
@@ -111,7 +115,14 @@ let WorkspaceThumbnail = GObject.registerClass({
y_fill: true
});
+ this._tooltip = new St.Label({
+ style_class: 'dash-label',
+ visible: false,
+ });
+ Main.uiGroup.add_child(this._tooltip);
+
this.connect('destroy', this._onDestroy.bind(this));
+ this.connect('notify::hover', this._syncTooltip.bind(this));
this._index = index;
this._delegate = this; // needed for DND
@@ -198,7 +209,36 @@ let WorkspaceThumbnail = GObject.registerClass({
ws.activate(global.get_current_time());
}
+ _syncTooltip() {
+ if (this.hover) {
+ this._tooltip.text = Meta.prefs_get_workspace_name(this._index);
+ this._tooltip.opacity = 0;
+ this._tooltip.show();
+
+ const [stageX, stageY] = this.get_transformed_position();
+ const thumbWidth = this.allocation.get_width();
+ const tipWidth = this._tooltip.width;
+ const tipHeight = this._tooltip.height;
+ const xOffset = Math.floor((thumbWidth - tipWidth) / 2);
+ const monitor = Main.layoutManager.findMonitorForActor(this);
+ const x = Math.min(
+ Math.max(stageX + xOffset, monitor.x),
+ monitor.x + monitor.width - tipWidth);
+ const y = stageY - tipHeight - TOOLTIP_OFFSET;
+ this._tooltip.set_position(x, y);
+ }
+
+ Tweener.addTween(this._tooltip, {
+ opacity: this.hover ? 255 : 0,
+ time: TOOLTIP_ANIMATION_TIME / 1000,
+ transition: 'easeOutQuad',
+ onComplete: () => (this._tooltip.visible = this.hover),
+ });
+ }
+
_onDestroy() {
+ this._tooltip.destroy();
+
this._workspace.disconnect(this._windowAddedId);
this._workspace.disconnect(this._windowRemovedId);
global.display.disconnect(this._restackedId);
--
2.44.0

View File

@ -1,231 +0,0 @@
From afa394114c57197e96f18e7942729634ece5d3c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 19 May 2021 16:46:59 +0200
Subject: [PATCH 1/2] desktop-icons: Revert "Use GTK-Theme CSS for selected
file-item and rubberband"
GtkStyleContext requires a (X11) display connection, which may not
be available with xwayland-on-demand. Better use some hardcoded
colors than crashing the session.
This reverts commit 8dc524aa4efd6a3fbad67480bd6c904b0c0c99d6.
---
extensions/desktop-icons/desktopIconsUtil.js | 11 ----------
extensions/desktop-icons/desktopManager.js | 12 -----------
extensions/desktop-icons/fileItem.js | 22 ++++----------------
extensions/desktop-icons/stylesheet.css | 9 ++++++++
4 files changed, 13 insertions(+), 41 deletions(-)
diff --git a/extensions/desktop-icons/desktopIconsUtil.js b/extensions/desktop-icons/desktopIconsUtil.js
index 696c945..57bedc1 100644
--- a/extensions/desktop-icons/desktopIconsUtil.js
+++ b/extensions/desktop-icons/desktopIconsUtil.js
@@ -16,7 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-const Gtk = imports.gi.Gtk;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const ExtensionUtils = imports.misc.extensionUtils;
@@ -114,16 +113,6 @@ function getFileExtensionOffset(filename, isDirectory) {
return offset;
}
-function getGtkClassBackgroundColor(classname, state) {
- let widget = new Gtk.WidgetPath();
- widget.append_type(Gtk.Widget);
-
- let context = new Gtk.StyleContext();
- context.set_path(widget);
- context.add_class(classname);
- return context.get_background_color(state);
-}
-
// Reference the extension org.gnome.shell.extensions.drive-menu
function eject(mount) {
let unmountArgs = [
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 1aad8c6..10e3ce0 100644
--- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js
@@ -16,7 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-const Gtk = imports.gi.Gtk;
const Clutter = imports.gi.Clutter;
const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio;
@@ -132,7 +131,6 @@ var DesktopManager = GObject.registerClass({
startRubberBand(x, y) {
this._rubberBandInitialX = x;
this._rubberBandInitialY = y;
- this._initRubberBandColor();
this._updateRubberBand(x, y);
this._rubberBand.show();
this._grabHelper.grab({ actor: global.stage });
@@ -235,16 +233,6 @@ var DesktopManager = GObject.registerClass({
this._desktopGrids = {};
}
- /**
- * Initialize rubberband color from the GTK rubberband class
- * */
- _initRubberBandColor() {
- let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('rubberband', Gtk.StateFlags.NORMAL);
- let background_color =
- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.4)';
- this._rubberBand.set_style('background-color: ' + background_color);
- }
-
async _scanFiles() {
for (let [fileItem, fileItemHandler] of this._fileItemHandlers)
Object.values(fileItemHandler).forEach(id => fileItem.disconnect(id));
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 9987e7f..1e8ea89 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -16,7 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-const Gtk = imports.gi.Gtk;
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
@@ -649,17 +648,6 @@ var FileItem = GObject.registerClass({
DBusUtils.openFileWithOtherApplication(this.file.get_path());
}
- _getSelectionStyle() {
- let rgba = DesktopIconsUtil.getGtkClassBackgroundColor('view', Gtk.StateFlags.SELECTED);
- let background_color =
- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.6)';
- let border_color =
- 'rgba(' + rgba.red * 255 + ', ' + rgba.green * 255 + ', ' + rgba.blue * 255 + ', 0.8)';
-
- return 'background-color: ' + background_color + ';' +
- 'border-color: ' + border_color + ';';
- }
-
get menu() {
return this._menu;
}
@@ -901,12 +889,10 @@ var FileItem = GObject.registerClass({
if (isSelected == this._isSelected)
return;
- if (isSelected) {
- this._container.set_style(this._getSelectionStyle());
- } else {
- this._container.set_style('background-color: transparent');
- this._container.set_style('border-color: transparent');
- }
+ if (isSelected)
+ this._container.add_style_pseudo_class('selected');
+ else
+ this._container.remove_style_pseudo_class('selected');
this._isSelected = isSelected;
}
diff --git a/extensions/desktop-icons/stylesheet.css b/extensions/desktop-icons/stylesheet.css
index 61b4ce8..4fd31c3 100644
--- a/extensions/desktop-icons/stylesheet.css
+++ b/extensions/desktop-icons/stylesheet.css
@@ -8,6 +8,15 @@
background-color: rgba(238, 238, 238, 0.2);
}
+.file-item:selected {
+ background-color: rgba(74, 144, 217, 0.6);
+ border-color: rgba(74, 144, 217, 0.8);
+}
+
+.rubber-band {
+ background-color: rgba(74, 144, 238, 0.4);
+}
+
.name-label {
text-shadow: 1px 1px black;
color: white;
--
2.32.0
From ca050d098240b3e757f172d2012f7d1b91db3ff6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 21 May 2021 00:50:52 +0200
Subject: [PATCH 2/2] desktop-icons: Port prefs to GTK4
... for compatibility with GNOME 40.
---
extensions/desktop-icons/prefs.js | 32 ++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/extensions/desktop-icons/prefs.js b/extensions/desktop-icons/prefs.js
index 890bcdb..c390aa8 100644
--- a/extensions/desktop-icons/prefs.js
+++ b/extensions/desktop-icons/prefs.js
@@ -98,23 +98,29 @@ function get_schema(schema) {
function buildPrefsWidget() {
initTranslations();
- let frame = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, border_width: 10, spacing: 10 });
-
- frame.add(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") }));
- frame.add(buildSwitcher('show-home', _("Show the personal folder in the desktop")));
- frame.add(buildSwitcher('show-trash', _("Show the trash icon in the desktop")));
- frame.add(buildSwitcher('show-mount', _("Show mounted drives in the desktop")));
- frame.show_all();
+ let frame = new Gtk.Box({
+ orientation: Gtk.Orientation.VERTICAL,
+ margin_top: 10,
+ margin_bottom: 10,
+ margin_start: 10,
+ margin_end: 10,
+ spacing: 10,
+ });
+
+ frame.append(buildSelector('icon-size', _("Size for the desktop icons"), { 'small': _("Small"), 'standard': _("Standard"), 'large': _("Large") }));
+ frame.append(buildSwitcher('show-home', _("Show the personal folder in the desktop")));
+ frame.append(buildSwitcher('show-trash', _("Show the trash icon in the desktop")));
+ frame.append(buildSwitcher('show-mount', _("Show mounted drives in the desktop")));
return frame;
}
function buildSwitcher(key, labelText) {
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 });
- let label = new Gtk.Label({ label: labelText, xalign: 0 });
+ let label = new Gtk.Label({ label: labelText, xalign: 0, hexpand: true });
let switcher = new Gtk.Switch({ active: settings.get_boolean(key) });
settings.bind(key, switcher, 'active', 3);
- hbox.pack_start(label, true, true, 0);
- hbox.add(switcher);
+ hbox.append(label);
+ hbox.append(switcher);
return hbox;
}
@@ -131,15 +137,15 @@ function buildSelector(key, labelText, elements) {
listStore.set (iter, [0, 1], [visibleText, val]);
}
let hbox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, spacing: 10 });
- let label = new Gtk.Label({ label: labelText, xalign: 0 });
+ let label = new Gtk.Label({ label: labelText, xalign: 0, hexpand: true });
let combo = new Gtk.ComboBox({model: listStore});
let rendererText = new Gtk.CellRendererText();
combo.pack_start (rendererText, false);
combo.add_attribute (rendererText, 'text', 0);
combo.set_id_column(1);
settings.bind(key, combo, 'active-id', 3);
- hbox.pack_start(label, true, true, 0);
- hbox.add(combo);
+ hbox.append(label);
+ hbox.append(combo);
return hbox;
}
--
2.32.0

View File

@ -0,0 +1,267 @@
From bcbf9709802e7644c5911615dabdee7d8ca07719 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Mon, 31 May 2021 19:29:34 +0200
Subject: [PATCH 1/3] desktopManager: Handle TOUCH_UPDATE/END events explicitly
for rubberband
These events need specific handling for Wayland, as we do not get emulated
pointer events in that platform. Handle these for rubberband selection.
---
extensions/desktop-icons/desktopManager.js | 67 ++++++++++++++++------
1 file changed, 48 insertions(+), 19 deletions(-)
diff --git a/extensions/desktop-icons/desktopManager.js b/extensions/desktop-icons/desktopManager.js
index 399aee0..a70cd98 100644
--- a/extensions/desktop-icons/desktopManager.js
+++ b/extensions/desktop-icons/desktopManager.js
@@ -130,26 +130,49 @@ var DesktopManager = GObject.registerClass({
}
[x, y] = event.get_coords();
this._updateRubberBand(x, y);
- let x0, y0, x1, y1;
- if (x >= this._rubberBandInitialX) {
- x0 = this._rubberBandInitialX;
- x1 = x;
- } else {
- x1 = this._rubberBandInitialX;
- x0 = x;
- }
- if (y >= this._rubberBandInitialY) {
- y0 = this._rubberBandInitialY;
- y1 = y;
- } else {
- y1 = this._rubberBandInitialY;
- y0 = y;
- }
- for (let [fileUri, fileItem] of this._fileItems) {
- fileItem.emit('selected', true, true,
- fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0));
- }
+ this._updateSelection(x, y);
});
+ this._rubberBandTouchId = global.stage.connect('touch-event', (actor, event) => {
+ // Let x11 pointer emulation do the job on X11
+ if (!Meta.is_wayland_compositor())
+ return Clutter.EVENT_PROPAGATE;
+ if (!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
+ return Clutter.EVENT_PROPAGATE;
+
+ if (event.type() == Clutter.EventType.TOUCH_END) {
+ this.endRubberBand();
+ return Clutter.EVENT_STOP;
+ } else if (event.type() == Clutter.EventType.TOUCH_UPDATE) {
+ [x, y] = event.get_coords();
+ this._updateRubberBand(x, y);
+ this._updateSelection(x, y);
+ return Clutter.EVENT_STOP;
+ }
+
+ return Clutter.EVENT_PROPAGATE;
+ });
+ }
+
+ _updateSelection(x, y) {
+ let x0, y0, x1, y1;
+ if (x >= this._rubberBandInitialX) {
+ x0 = this._rubberBandInitialX;
+ x1 = x;
+ } else {
+ x1 = this._rubberBandInitialX;
+ x0 = x;
+ }
+ if (y >= this._rubberBandInitialY) {
+ y0 = this._rubberBandInitialY;
+ y1 = y;
+ } else {
+ y1 = this._rubberBandInitialY;
+ y0 = y;
+ }
+ for (let [fileUri, fileItem] of this._fileItems) {
+ fileItem.emit('selected', true, true,
+ fileItem.intersectsWith(x0, y0, x1 - x0, y1 - y0));
+ }
}
endRubberBand() {
@@ -157,8 +180,10 @@ var DesktopManager = GObject.registerClass({
Extension.lockActivitiesButton = false;
this._grabHelper.ungrab();
global.stage.disconnect(this._rubberBandId);
+ global.stage.disconnect(this._rubberBandTouchId);
global.stage.disconnect(this._stageReleaseEventId);
this._rubberBandId = 0;
+ this._rubberBandTouchId = 0;
this._stageReleaseEventId = 0;
this._selection = new Set([...this._selection, ...this._currentSelection]);
@@ -739,6 +764,10 @@ var DesktopManager = GObject.registerClass({
global.stage.disconnect(this._rubberBandId);
this._rubberBandId = 0;
+ if (this._rubberBandTouchId)
+ global.stage.disconnect(this._rubberBandTouchId);
+ this._rubberBandTouchId = 0;
+
this._rubberBand.destroy();
if (this._queryFileInfoCancellable)
--
2.31.1
From 0733004ffeb517f7a80ff41e7181027e8b92b17e Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Mon, 31 May 2021 19:31:03 +0200
Subject: [PATCH 2/3] desktopGrid: Handle TOUCH_BEGIN events explicitly
We do not get pointer emulated events on Wayland, so touch events should
be handled explicitly there. Handle starting rubberband selection via
touch.
---
extensions/desktop-icons/desktopGrid.js | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/extensions/desktop-icons/desktopGrid.js b/extensions/desktop-icons/desktopGrid.js
index 94d2dfd..602fa7f 100644
--- a/extensions/desktop-icons/desktopGrid.js
+++ b/extensions/desktop-icons/desktopGrid.js
@@ -21,6 +21,7 @@ const Clutter = imports.gi.Clutter;
const St = imports.gi.St;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
+const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Signals = imports.signals;
@@ -123,6 +124,7 @@ var DesktopGrid = class {
() => this._backgroundDestroyed());
this._grid.connect('button-press-event', (actor, event) => this._onPressButton(actor, event));
+ this._grid.connect('touch-event', (actor, event) => this._onTouchEvent(actor, event));
this._grid.connect('key-press-event', this._onKeyPress.bind(this));
@@ -506,6 +508,23 @@ var DesktopGrid = class {
return Clutter.EVENT_PROPAGATE;
}
+ _onTouchEvent(actor, event) {
+ // Let x11 pointer emulation do the job on X11
+ if (!Meta.is_wayland_compositor())
+ return Clutter.EVENT_PROPAGATE;
+
+ if (event.type() == Clutter.EventType.TOUCH_BEGIN &&
+ global.display.is_pointer_emulating_sequence(event.get_event_sequence())) {
+ Extension.desktopManager.clearSelection();
+ let [x, y] = event.get_coords();
+ let [gridX, gridY] = this._grid.get_transformed_position();
+ Extension.desktopManager.startRubberBand(x, y, gridX, gridY);
+ return Clutter.EVENT_STOP;
+ }
+
+ return Clutter.EVENT_PROPAGATE;
+ }
+
_addDesktopBackgroundMenu() {
this.actor._desktopBackgroundMenu = this._createDesktopBackgroundMenu();
this.actor._desktopBackgroundManager = new PopupMenu.PopupMenuManager({ actor: this.actor });
--
2.31.1
From 2d978ffc58562c4f4d00b1afb03da58be3102e29 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <carlosg@gnome.org>
Date: Mon, 31 May 2021 19:31:50 +0200
Subject: [PATCH 3/3] fileItem: Handle (multi) touch explicitly via touch
events
Wayland does not get pointer emulated events, so we must handle TOUCH_BEGIN/
END here for file clicking/tapping to work there.
---
extensions/desktop-icons/fileItem.js | 34 ++++++++++++++++++++++++----
1 file changed, 30 insertions(+), 4 deletions(-)
diff --git a/extensions/desktop-icons/fileItem.js b/extensions/desktop-icons/fileItem.js
index 143cb9b..1cb47e8 100644
--- a/extensions/desktop-icons/fileItem.js
+++ b/extensions/desktop-icons/fileItem.js
@@ -117,6 +117,7 @@ var FileItem = class {
this._container.connect('motion-event', (actor, event) => this._onMotion(actor, event));
this._container.connect('leave-event', (actor, event) => this._onLeave(actor, event));
this._container.connect('button-release-event', (actor, event) => this._onReleaseButton(actor, event));
+ this._container.connect('touch-event', (actor, event) => this._onTouchEvent(actor, event));
/* Set the metadata and update relevant UI */
this._updateMetadataFromFileInfo(fileInfo);
@@ -648,16 +649,26 @@ var FileItem = class {
DesktopIconsUtil.launchTerminal(this.file.get_path());
}
+ _eventButton(event) {
+ // Emulate button1 press on touch events
+ if (event.type() == Clutter.EventType.TOUCH_BEGIN ||
+ event.type() == Clutter.EventType.TOUCH_END ||
+ event.type() == Clutter.EventType.TOUCH_UPDATE)
+ return 1;
+
+ return event.get_button();
+ }
+
_updateClickState(event) {
let settings = Clutter.Settings.get_default();
- if ((event.get_button() == this._lastClickButton) &&
+ if ((this._eventButton(event) == this._lastClickButton) &&
((event.get_time() - this._lastClickTime) < settings.double_click_time))
this._clickCount++;
else
this._clickCount = 1;
this._lastClickTime = event.get_time();
- this._lastClickButton = event.get_button();
+ this._lastClickButton = this._eventButton(event);
}
_getClickCount() {
@@ -666,7 +677,7 @@ var FileItem = class {
_onPressButton(actor, event) {
this._updateClickState(event);
- let button = event.get_button();
+ let button = this._eventButton(event);
if (button == 3) {
if (!this.isSelected)
this.emit('selected', false, false, true);
@@ -725,7 +736,7 @@ var FileItem = class {
}
_onReleaseButton(actor, event) {
- let button = event.get_button();
+ let button = this._eventButton(event);
if (button == 1) {
// primaryButtonPressed is TRUE only if the user has pressed the button
// over an icon, and if (s)he has not started a drag&drop operation
@@ -744,6 +755,21 @@ var FileItem = class {
return Clutter.EVENT_PROPAGATE;
}
+ _onTouchEvent(actor, event) {
+ // Let x11 pointer emulation do the job on X11
+ if (!Meta.is_wayland_compositor())
+ return Clutter.EVENT_PROPAGATE;
+ if (!global.display.is_pointer_emulating_sequence(event.get_event_sequence()))
+ return Clutter.EVENT_PROPAGATE;
+
+ if (event.type() == Clutter.EventType.TOUCH_BEGIN)
+ this._onPressButton(actor, event);
+ else if (event.type() == Clutter.EventType.TOUCH_UPDATE)
+ this._onMotion(actor, event);
+ else if (event.type() == Clutter.EventType.TOUCH_END)
+ this._onReleaseButton(actor, event);
+ }
+
get savedCoordinates() {
return this._savedCoordinates;
}
--
2.31.1

View File

@ -0,0 +1,27 @@
[Desktop Entry]
Name[de]=Klassisch (Wayland Anzeige-Server)
Name[es]=Clásico (servidor gráfico Wayland)
Name[fr]=Classic (serveur affichage Wayland)
Name[it]=Classico (server grafico Wayland)
Name[ja]= (Wayland )
Name[ko]= (Wayland )
Name[pt_BR]=Clássico (servidor de exibição Wayland)
Name[ru]=Классический (дисплейный сервер Wayland)
Name[zh_CN]=Wayland
Name[zh_TW]=Wayland
Name=Classic (Wayland display server)
Comment[de]=Diese Sitzung meldet Sie in GNOME Classic an
Comment[es]=Esta sesión inicia GNOME clásico
Comment[fr]=Cette session vous connnecte à GNOME Classique
Comment[it]=Questa sessione si avvia con GNOME classico
Comment[ja]=GNOME
Comment[ko]=
Comment[pt_BR]=Essa sessão se inicia como GNOME Clássico
Comment[ru]=Данный сеанс использует классический рабочий стол GNOME
Comment[zh_CN]=GNOME
Comment[zh_TW]= GNOME Classic
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;

View File

@ -1,158 +0,0 @@
From 1692d4a91d95fecd5642b0c92bc2c5b0dbcb4184 Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa@fedoraproject.org>
Date: Fri, 29 Oct 2021 09:37:33 -0400
Subject: [PATCH] classic: Install the session for Wayland and ship override
sessions
The regular GNOME session ships with three options:
* GNOME
* GNOME on Wayland (available when GDM starts in X11)
* GNOME on Xorg (available when GDM starts in Wayland)
The main GNOME session is set up so it works to match how GDM starts,
so GNOME is on Wayland if GDM is (or GNOME is on X11 if GDM is).
For GNOME Classic, we are missing this setup, so port this behavior
over from the GNOME session setup.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/195>
---
data/gnome-classic-wayland.desktop.in | 8 ++++++
data/gnome-classic-xorg.desktop.in | 8 ++++++
data/meson.build | 40 +++++++++++++++++++++------
meson.build | 5 ++++
meson/session-post-install.py | 20 ++++++++++++++
5 files changed, 72 insertions(+), 9 deletions(-)
create mode 100644 data/gnome-classic-wayland.desktop.in
create mode 100644 data/gnome-classic-xorg.desktop.in
create mode 100755 meson/session-post-install.py
diff --git a/data/gnome-classic-wayland.desktop.in b/data/gnome-classic-wayland.desktop.in
new file mode 100644
index 00000000..7287c689
--- /dev/null
+++ b/data/gnome-classic-wayland.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=GNOME Classic on Wayland
+Comment=This session logs you into GNOME Classic
+Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
+TryExec=gnome-session
+Type=Application
+DesktopNames=GNOME-Classic;GNOME;
+X-GDM-SessionRegisters=true
diff --git a/data/gnome-classic-xorg.desktop.in b/data/gnome-classic-xorg.desktop.in
new file mode 100644
index 00000000..5fb338a1
--- /dev/null
+++ b/data/gnome-classic-xorg.desktop.in
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Name=GNOME Classic on Xorg
+Comment=This session logs you into GNOME Classic
+Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session
+TryExec=gnome-session
+Type=Application
+DesktopNames=GNOME-Classic;GNOME;
+X-GDM-SessionRegisters=true
diff --git a/data/meson.build b/data/meson.build
index 27f42872..47fe798e 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -1,12 +1,34 @@
-session_desktop = 'gnome-classic.desktop'
-i18n.merge_file('',
- input: session_desktop + '.in',
- output: session_desktop,
- po_dir: '../po',
- install: true,
- install_dir: xsessiondir,
- type: 'desktop'
-)
+session_desktop_base = 'gnome-classic'
+
+session_desktops = [
+ session_desktop_base,
+ session_desktop_base + '-xorg',
+ session_desktop_base + '-wayland',
+]
+
+foreach name: session_desktops
+ session_desktop = name + '.desktop'
+ if name.endswith('-xorg')
+ session_instdir = xsessiondir
+ elif name.endswith('-wayland')
+ session_instdir = wlsessiondir
+ else
+ # FIXME: The same target can not be copied into two directories.
+ # There is a workaround in meson/session-post-install.py until proper
+ # solution arises:
+ # https://github.com/mesonbuild/meson/issues/2416
+ session_instdir = xsessiondir
+ #session_instdir = [ xesssiondir, wlsessiondir ]
+ endif
+ i18n.merge_file('',
+ input: session_desktop + '.in',
+ output: session_desktop,
+ po_dir: '../po',
+ install: true,
+ install_dir: session_instdir,
+ type: 'desktop'
+ )
+endforeach
classic_uuids = []
foreach e : classic_extensions
diff --git a/meson.build b/meson.build
index dda3ddac..ea8a859d 100644
--- a/meson.build
+++ b/meson.build
@@ -20,6 +20,7 @@ themedir = join_paths(shelldir, 'theme')
schemadir = join_paths(datadir, 'glib-2.0', 'schemas')
sessiondir = join_paths(datadir, 'gnome-session', 'sessions')
xsessiondir = join_paths(datadir, 'xsessions')
+wlsessiondir = join_paths(datadir, 'wayland-sessions')
ver_arr = meson.project_version().split('.')
shell_version = ver_arr[0]
@@ -90,6 +91,10 @@ endforeach
if classic_mode_enabled
subdir('data')
+ meson.add_install_script(
+ 'meson/session-post-install.py',
+ join_paths(get_option('prefix'), datadir)
+ )
endif
subdir('extensions')
diff --git a/meson/session-post-install.py b/meson/session-post-install.py
new file mode 100755
index 00000000..36abe5e4
--- /dev/null
+++ b/meson/session-post-install.py
@@ -0,0 +1,20 @@
+#!/usr/bin/env python3
+
+import os
+import shutil
+import sys
+
+if os.environ.get('DESTDIR'):
+ install_root = os.environ.get('DESTDIR') + os.path.abspath(sys.argv[1])
+else:
+ install_root = sys.argv[1]
+
+# FIXME: Meson is unable to copy a generated target file:
+# https://groups.google.com/forum/#!topic/mesonbuild/3iIoYPrN4P0
+dst_dir = os.path.join(install_root, 'wayland-sessions')
+if not os.path.exists(dst_dir):
+ os.makedirs(dst_dir)
+
+src = os.path.join(install_root, 'xsessions', 'gnome-classic.desktop')
+dst = os.path.join(dst_dir, 'gnome-classic.desktop')
+shutil.copyfile(src, dst)
--
2.33.1

View File

@ -0,0 +1,27 @@
[Desktop Entry]
Name[de]=Klassisch (X11 Anzeige-Server)
Name[es]=Clásico (servidor gráfico X11)
Name[fr]=Classic (serveur affichage X11)
Name[it]=Classico (server grafico X11)
Name[ja]= (X11 )
Name[ko]= (X11 )
Name[pt_BR]=Clássico (servidor de exibição X11)
Name[ru]=Классический (дисплейный сервер X11)
Name[zh_CN]=X11
Name[zh_TW]=X11
Name=Classic (X11 display server)
Comment[de]=Diese Sitzung meldet Sie in GNOME Classic an
Comment[es]=Esta sesión inicia GNOME clásico
Comment[fr]=Cette session vous connnecte à GNOME Classique
Comment[it]=Questa sessione si avvia con GNOME classico
Comment[ja]=GNOME
Comment[ko]=
Comment[pt_BR]=Essa sessão se inicia como GNOME Clássico
Comment[ru]=Данный сеанс использует классический рабочий стол GNOME
Comment[zh_CN]=GNOME
Comment[zh_TW]= GNOME Classic
Comment=This session logs you into GNOME Classic
Exec=env GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic
TryExec=gnome-session
Type=Application
DesktopNames=GNOME-Classic;GNOME;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,70 +0,0 @@
From 34d8854677513b016a08a04cdd9973b165146215 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 19 Mar 2024 13:16:50 +0100
Subject: [PATCH 1/2] window-list: Use more appropriate fallback icon
'icon-missing' is not an actual icon name. It somewhat works
because an invalid icon name will fallback to the correct
'image-missing', however for apps the generic app icon is
a better fallback.
---
extensions/window-list/extension.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
index 91ee3e6b..1f112548 100644
--- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js
@@ -188,7 +188,7 @@ class WindowTitle extends St.BoxLayout {
this._icon.child = app.create_icon_texture(ICON_TEXTURE_SIZE);
} else {
this._icon.child = new St.Icon({
- icon_name: 'icon-missing',
+ icon_name: 'application-x-executable',
icon_size: ICON_TEXTURE_SIZE,
});
}
--
2.44.0
From 032cfb3593651c8344a59828a9c674f148329889 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 19 Mar 2024 14:07:12 +0100
Subject: [PATCH 2/2] window-list: Override with window icon if available
---
extensions/window-list/extension.js | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
index 1f112548..0c28692d 100644
--- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js
@@ -192,6 +192,23 @@ class WindowTitle extends St.BoxLayout {
icon_size: ICON_TEXTURE_SIZE,
});
}
+
+ // Override with window icon if available
+ if (this._hasWindowIcon()) {
+ const textureCache = St.TextureCache.get_default();
+ this._icon.child.gicon = textureCache.bind_cairo_surface_property(
+ this._metaWindow, 'icon');
+ }
+ }
+
+ _hasWindowIcon() {
+ // HACK: GI cannot handle CairoSurface, so this
+ // will throw if the icon property is null
+ try {
+ return this._metaWindow.icon !== null;
+ } catch (e) {
+ return true;
+ }
}
_onDestroy() {
--
2.44.0

View File

@ -1,7 +1,7 @@
From c5e26a4c25754dc74e5f2aa9953bc2e30cfea94e Mon Sep 17 00:00:00 2001 From 7c3b0af4fde0b542089f2b0c84250404eef0ecca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 May 2017 19:13:50 +0200 Date: Wed, 17 May 2017 19:13:50 +0200
Subject: [PATCH 1/6] extensions: Resurrect systemMonitor extension Subject: [PATCH 1/5] extensions: Resurrect systemMonitor extension
The extension was removed upstream because: The extension was removed upstream because:
- it hooks into the message tray that was removed - it hooks into the message tray that was removed
@ -26,7 +26,7 @@ This reverts commit c9a6421f362cd156cf731289eadc11f44f6970ac.
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
new file mode 100644 new file mode 100644
index 00000000..7b09df01 index 0000000..7b09df0
--- /dev/null --- /dev/null
+++ b/extensions/systemMonitor/extension.js +++ b/extensions/systemMonitor/extension.js
@@ -0,0 +1,376 @@ @@ -0,0 +1,376 @@
@ -408,7 +408,7 @@ index 00000000..7b09df01
+} +}
diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build
new file mode 100644 new file mode 100644
index 00000000..48504f63 index 0000000..48504f6
--- /dev/null --- /dev/null
+++ b/extensions/systemMonitor/meson.build +++ b/extensions/systemMonitor/meson.build
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
@ -419,7 +419,7 @@ index 00000000..48504f63
+) +)
diff --git a/extensions/systemMonitor/metadata.json.in b/extensions/systemMonitor/metadata.json.in diff --git a/extensions/systemMonitor/metadata.json.in b/extensions/systemMonitor/metadata.json.in
new file mode 100644 new file mode 100644
index 00000000..fa750074 index 0000000..fa75007
--- /dev/null --- /dev/null
+++ b/extensions/systemMonitor/metadata.json.in +++ b/extensions/systemMonitor/metadata.json.in
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
@ -436,7 +436,7 @@ index 00000000..fa750074
+} +}
diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css
new file mode 100644 new file mode 100644
index 00000000..13f95ec7 index 0000000..13f95ec
--- /dev/null --- /dev/null
+++ b/extensions/systemMonitor/stylesheet.css +++ b/extensions/systemMonitor/stylesheet.css
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
@ -476,41 +476,39 @@ index 00000000..13f95ec7
+ font-weight: bold; + font-weight: bold;
+} +}
diff --git a/meson.build b/meson.build diff --git a/meson.build b/meson.build
index fa9e622a..70dbf007 100644 index 6e8c41f..6764f9a 100644
--- a/meson.build --- a/meson.build
+++ b/meson.build +++ b/meson.build
@@ -51,6 +51,7 @@ all_extensions += [ @@ -55,6 +55,7 @@ all_extensions += [
'dash-to-panel',
'native-window-placement', 'native-window-placement',
'no-hot-corner',
'panel-favorites', 'panel-favorites',
+ 'systemMonitor', + 'systemMonitor',
'top-icons', 'top-icons',
'updates-dialog', 'updates-dialog',
'user-theme' 'user-theme',
-- --
2.41.0 2.21.0
From efe89316c5ae1721306defcdbb80227fe61414c4 Mon Sep 17 00:00:00 2001 From ddf4d70df56321366a2cb8b89689d59be4dbb718 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 17 May 2019 22:55:48 +0000 Date: Fri, 17 May 2019 22:55:48 +0000
Subject: [PATCH 2/6] systemMonitor: Modernise code Subject: [PATCH 2/5] systemMonitor: Modernise code
- port to ES6 classes - port to ES6 classes
- replace Lang.bind() - replace Lang.bind()
- replace Tweener
- use standard align/expand properties
- destructure imports - destructure imports
- fix style issues (stray/missing spaces/semi-colons, indent, ...) - fix style issues (stray/missing spaces/semi-colons, indent, ...)
--- ---
extensions/systemMonitor/extension.js | 422 +++++++++++++------------- extensions/systemMonitor/extension.js | 377 +++++++++++++-------------
1 file changed, 212 insertions(+), 210 deletions(-) 1 file changed, 192 insertions(+), 185 deletions(-)
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
index 7b09df01..f7c6a4a9 100644 index 7b09df0..89f8916 100644
--- a/extensions/systemMonitor/extension.js --- a/extensions/systemMonitor/extension.js
+++ b/extensions/systemMonitor/extension.js +++ b/extensions/systemMonitor/extension.js
@@ -1,56 +1,57 @@ @@ -1,22 +1,16 @@
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */ /* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
-const Clutter = imports.gi.Clutter; -const Clutter = imports.gi.Clutter;
@ -525,7 +523,7 @@ index 7b09df01..f7c6a4a9 100644
+ +
+const ExtensionUtils = imports.misc.extensionUtils; +const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
-const Tweener = imports.ui.tweener; const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext; const _ = Gettext.gettext;
@ -537,10 +535,8 @@ index 7b09df01..f7c6a4a9 100644
const INDICATOR_UPDATE_INTERVAL = 500; const INDICATOR_UPDATE_INTERVAL = 500;
const INDICATOR_NUM_GRID_LINES = 3; const INDICATOR_NUM_GRID_LINES = 3;
-const ITEM_LABEL_SHOW_TIME = 0.15; @@ -24,32 +18,38 @@ const ITEM_LABEL_SHOW_TIME = 0.15;
-const ITEM_LABEL_HIDE_TIME = 0.1; const ITEM_LABEL_HIDE_TIME = 0.1;
+const ITEM_LABEL_SHOW_TIME = 150;
+const ITEM_LABEL_HIDE_TIME = 100;
const ITEM_HOVER_TIMEOUT = 300; const ITEM_HOVER_TIMEOUT = 300;
-const Indicator = new Lang.Class({ -const Indicator = new Lang.Class({
@ -553,11 +549,7 @@ index 7b09df01..f7c6a4a9 100644
- this.drawing_area = new St.DrawingArea({ reactive: true }); - this.drawing_area = new St.DrawingArea({ reactive: true });
- this.drawing_area.connect('repaint', Lang.bind(this, this._draw)); - this.drawing_area.connect('repaint', Lang.bind(this, this._draw));
- this.drawing_area.connect('button-press-event', function() { - this.drawing_area.connect('button-press-event', function() {
+ this._drawingArea = new St.DrawingArea({ + this._drawingArea = new St.DrawingArea({ reactive: true });
+ reactive: true,
+ x_expand: true,
+ y_expand: true,
+ });
+ this._drawingArea.connect('repaint', this._draw.bind(this)); + this._drawingArea.connect('repaint', this._draw.bind(this));
+ this._drawingArea.connect('button-press-event', () => { + this._drawingArea.connect('button-press-event', () => {
let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop'); let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop');
@ -573,10 +565,10 @@ index 7b09df01..f7c6a4a9 100644
+ style_class: 'extension-systemMonitor-indicator-area', + style_class: 'extension-systemMonitor-indicator-area',
+ reactive: true, + reactive: true,
+ track_hover: true, + track_hover: true,
+ x_fill: true,
+ y_fill: true
+ }); + });
+ this.actor.add_actor(this._drawingArea); + this.actor.add_actor(this._drawingArea);
+
+ this.actor.connect('destroy', this._onDestroy.bind(this));
- this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () { - this._timeout = Mainloop.timeout_add(INDICATOR_UPDATE_INTERVAL, Lang.bind(this, function () {
- this._updateValues(); - this._updateValues();
@ -584,6 +576,9 @@ index 7b09df01..f7c6a4a9 100644
- return true; - return true;
- })); - }));
- }, - },
+ this.actor.connect('destroy', this._onDestroy.bind(this));
- showLabel: function() {
+ this._timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, + this._timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
+ INDICATOR_UPDATE_INTERVAL, + INDICATOR_UPDATE_INTERVAL,
+ () => { + () => {
@ -592,15 +587,12 @@ index 7b09df01..f7c6a4a9 100644
+ return GLib.SOURCE_CONTINUE; + return GLib.SOURCE_CONTINUE;
+ }); + });
+ } + }
+
- showLabel: function() {
- if (this.label == null)
+ showLabel() { + showLabel() {
+ if (this.label === null) if (this.label == null)
return; return;
this.label.opacity = 0; @@ -58,12 +58,10 @@ const Indicator = new Lang.Class({
@@ -58,12 +59,10 @@ const Indicator = new Lang.Class({
let [stageX, stageY] = this.actor.get_transformed_position(); let [stageX, stageY] = this.actor.get_transformed_position();
@ -616,7 +608,7 @@ index 7b09df01..f7c6a4a9 100644
let x = stageX + xOffset; let x = stageX + xOffset;
@@ -73,116 +72,113 @@ const Indicator = new Lang.Class({ @@ -73,48 +71,51 @@ const Indicator = new Lang.Class({
let y = stageY - this.label.get_height() - yOffset; let y = stageY - this.label.get_height() - yOffset;
this.label.set_position(x, y); this.label.set_position(x, y);
@ -626,22 +618,21 @@ index 7b09df01..f7c6a4a9 100644
- transition: 'easeOutQuad', - transition: 'easeOutQuad',
- }); - });
- }, - },
+ this.label.ease({ -
+ opacity: 255,
+ duration: ITEM_LABEL_SHOW_TIME,
+ mode: Clutter.AnimationMode.EASE_OUT_QUAD,
+ });
+ }
- setLabelText: function(text) { - setLabelText: function(text) {
- if (this.label == null) + Tweener.addTween(this.label, {
- this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'}); + opacity: 255,
+ setLabelText(text) { + time: ITEM_LABEL_SHOW_TIME,
+ if (this.label === null) { + transition: 'easeOutQuad',
+ this.label = new St.Label({
+ style_class: 'extension-systemMonitor-indicator-label',
+ }); + });
+ } + }
+
+ setLabelText(text) {
if (this.label == null)
- this.label = new St.Label({ style_class: 'extension-systemMonitor-indicator-label'});
+ this.label = new St.Label({
+ style_class: 'extension-systemMonitor-indicator-label'
+ });
this.label.set_text(text); this.label.set_text(text);
Main.layoutManager.addChrome(this.label); Main.layoutManager.addChrome(this.label);
@ -664,11 +655,11 @@ index 7b09df01..f7c6a4a9 100644
+ } + }
+ hideLabel() { + hideLabel() {
+ this.label.ease({ + Tweener.addTween(this.label, {
+ opacity: 0, + opacity: 0,
+ duration: ITEM_LABEL_HIDE_TIME, + time: ITEM_LABEL_HIDE_TIME,
+ mode: Clutter.AnimationMode.EASE_OUT_QUAD, + transition: 'easeOutQuad',
+ onComplete: () => this.label.hide(), + onComplete: () => this.label.hide()
+ }); + });
+ } + }
+ +
@ -678,32 +669,30 @@ index 7b09df01..f7c6a4a9 100644
- this.label.destroy(); - this.label.destroy();
- }, - },
+ } + }
+
- _initValues: function() {
- },
+ _onDestroy() { + _onDestroy() {
+ GLib.source_remove(this._timeout); + GLib.source_remove(this._timeout);
+
- _updateValues: function() {
- },
+ if (this.label) + if (this.label)
+ this.label.destroy(); + this.label.destroy();
+ } + }
+
- _initValues: function() {
- },
+ _initValues() { + _initValues() {
+ } + }
- _draw: function(area) { - _updateValues: function() {
- },
+ _updateValues() { + _updateValues() {
+ } + }
+
- _draw: function(area) {
+ _draw(area) { + _draw(area) {
let [width, height] = area.get_surface_size(); let [width, height] = area.get_surface_size();
let themeNode = this.actor.get_theme_node(); let themeNode = this.actor.get_theme_node();
let cr = area.get_context(); let cr = area.get_context();
@@ -123,12 +124,12 @@ const Indicator = new Lang.Class({
- //draw the background grid
+ // draw the background grid
let color = themeNode.get_color(this.gridColor); let color = themeNode.get_color(this.gridColor);
let gridOffset = Math.floor(height / (INDICATOR_NUM_GRID_LINES + 1)); let gridOffset = Math.floor(height / (INDICATOR_NUM_GRID_LINES + 1));
for (let i = 1; i <= INDICATOR_NUM_GRID_LINES; ++i) { for (let i = 1; i <= INDICATOR_NUM_GRID_LINES; ++i) {
@ -718,61 +707,23 @@ index 7b09df01..f7c6a4a9 100644
+ cr.setDash([4, 1], 0); + cr.setDash([4, 1], 0);
cr.stroke(); cr.stroke();
- //draw the foreground //draw the foreground
+ // draw the foreground @@ -155,12 +156,12 @@ const Indicator = new Lang.Class({
- function makePath(values, reverse, nudge) {
- if (nudge == null) {
- nudge = 0;
- }
- //if we are going in reverse, we are completing the bottom of a chart, so use lineTo
+ function makePath(values, reverse, nudge = 0) {
+ // if we are going in reverse, we are completing the bottom of a chart, so use lineTo
if (reverse) {
cr.lineTo(values.length - 1, (1 - values[values.length - 1]) * height + nudge);
- for (let k = values.length - 2; k >= 0; --k) {
+ for (let k = values.length - 2; k >= 0; --k)
cr.lineTo(k, (1 - values[k]) * height + nudge);
- }
} else {
cr.moveTo(0, (1 - values[0]) * height + nudge);
- for (let k = 1; k < values.length; ++k) {
+ for (let k = 1; k < values.length; ++k)
cr.lineTo(k, (1 - values[k]) * height + nudge);
- }
-
}
}
let renderStats = this.renderStats; let renderStats = this.renderStats;
// Make sure we don't have more sample points than pixels // Make sure we don't have more sample points than pixels
- renderStats.map(Lang.bind(this, function(k){ - renderStats.map(Lang.bind(this, function(k){
+ renderStats.forEach(k => { + renderStats.map(k => {
let stat = this.stats[k]; let stat = this.stats[k];
- if (stat.values.length > width) { if (stat.values.length > width) {
+ if (stat.values.length > width)
stat.values = stat.values.slice(stat.values.length - width, stat.values.length); stat.values = stat.values.slice(stat.values.length - width, stat.values.length);
- } }
- })); - }));
+ }); + });
for (let i = 0; i < renderStats.length; ++i) { for (let i = 0; i < renderStats.length; ++i) {
let stat = this.stats[renderStats[i]]; let stat = this.stats[renderStats[i]];
// We outline at full opacity and fill with 40% opacity @@ -178,10 +179,10 @@ const Indicator = new Lang.Class({
let outlineColor = themeNode.get_color(stat.color);
- let color = new Clutter.Color(outlineColor);
- color.alpha = color.alpha * .4;
+ let fillColor = new Clutter.Color(outlineColor);
+ fillColor.alpha *= .4;
// Render the background between us and the next level
makePath(stat.values, false);
// If there is a process below us, render the cpu between us and it, otherwise,
// render to the bottom of the chart
- if (i == renderStats.length - 1) {
+ if (i === renderStats.length - 1) {
cr.lineTo(stat.values.length - 1, height);
cr.lineTo(0, height); cr.lineTo(0, height);
cr.closePath(); cr.closePath();
} else { } else {
@ -781,23 +732,21 @@ index 7b09df01..f7c6a4a9 100644
makePath(nextStat.values, true); makePath(nextStat.values, true);
} }
- cr.closePath() - cr.closePath()
- Clutter.cairo_set_source_color(cr, color);
+ cr.closePath(); + cr.closePath();
+ Clutter.cairo_set_source_color(cr, fillColor); Clutter.cairo_set_source_color(cr, color);
cr.fill(); cr.fill();
// Render the outline of this level @@ -193,40 +194,42 @@ const Indicator = new Lang.Class({
@@ -193,41 +189,43 @@ const Indicator = new Lang.Class({
cr.stroke(); cr.stroke();
} }
} }
-}); -});
+}; -
-const CpuIndicator = new Lang.Class({ -const CpuIndicator = new Lang.Class({
- Name: 'SystemMonitor.CpuIndicator', - Name: 'SystemMonitor.CpuIndicator',
- Extends: Indicator, - Extends: Indicator,
- +};
- _init: function() { - _init: function() {
- this.parent(); - this.parent();
+const CpuIndicator = class extends Indicator { +const CpuIndicator = class extends Indicator {
@ -815,7 +764,7 @@ index 7b09df01..f7c6a4a9 100644
+ 'cpu-total': 0, + 'cpu-total': 0,
+ 'cpu-user': 1, + 'cpu-user': 1,
+ 'cpu-sys': 2, + 'cpu-sys': 2,
+ 'cpu-iowait': 3, + 'cpu-iowait': 3
+ }; + };
+ this.renderStats = this.renderStats.sort((a, b) => { + this.renderStats = this.renderStats.sort((a, b) => {
return renderStatOrder[a] - renderStatOrder[b]; return renderStatOrder[a] - renderStatOrder[b];
@ -827,9 +776,8 @@ index 7b09df01..f7c6a4a9 100644
+ } + }
- _initValues: function() { - _initValues: function() {
- this._prev = new GTop.glibtop_cpu;
+ _initValues() { + _initValues() {
+ this._prev = new GTop.glibtop_cpu(); this._prev = new GTop.glibtop_cpu;
GTop.glibtop_get_cpu(this._prev); GTop.glibtop_get_cpu(this._prev);
this.stats = { this.stats = {
@ -841,20 +789,18 @@ index 7b09df01..f7c6a4a9 100644
- }, - },
- -
- _updateValues: function() { - _updateValues: function() {
- let cpu = new GTop.glibtop_cpu;
+ 'cpu-user': { color: '-cpu-user-color', values: [] }, + 'cpu-user': { color: '-cpu-user-color', values: [] },
+ 'cpu-sys': { color: '-cpu-sys-color', values: [] }, + 'cpu-sys': { color: '-cpu-sys-color', values: [] },
+ 'cpu-iowait': { color: '-cpu-iowait-color', values: [] }, + 'cpu-iowait': { color: '-cpu-iowait-color', values: [] },
+ 'cpu-total': { color: '-cpu-total-color', values: [] }, + 'cpu-total': { color: '-cpu-total-color', values: [] }
+ }; + };
+ } + }
+ +
+ _updateValues() { + _updateValues() {
+ let cpu = new GTop.glibtop_cpu(); let cpu = new GTop.glibtop_cpu;
let t = 0.0; let t = 0.0;
GTop.glibtop_get_cpu(cpu); GTop.glibtop_get_cpu(cpu);
let total = cpu.total - this._prev.total; @@ -246,37 +249,34 @@ const CpuIndicator = new Lang.Class({
@@ -246,37 +244,34 @@ const CpuIndicator = new Lang.Class({
this._prev = cpu; this._prev = cpu;
} }
@ -888,9 +834,8 @@ index 7b09df01..f7c6a4a9 100644
+ } + }
- _initValues: function() { - _initValues: function() {
- this.mem = new GTop.glibtop_mem;
+ _initValues() { + _initValues() {
+ this.mem = new GTop.glibtop_mem(); this.mem = new GTop.glibtop_mem;
this.stats = { this.stats = {
- 'mem-user': { color: "-mem-user-color", values: [] }, - 'mem-user': { color: "-mem-user-color", values: [] },
- 'mem-other': { color: "-mem-other-color", values: [] }, - 'mem-other': { color: "-mem-other-color", values: [] },
@ -899,7 +844,7 @@ index 7b09df01..f7c6a4a9 100644
- }, - },
+ 'mem-user': { color: '-mem-user-color', values: [] }, + 'mem-user': { color: '-mem-user-color', values: [] },
+ 'mem-other': { color: '-mem-other-color', values: [] }, + 'mem-other': { color: '-mem-other-color', values: [] },
+ 'mem-cached': { color: '-mem-cached-color', values: [] }, + 'mem-cached': { color: '-mem-cached-color', values: [] }
+ }; + };
+ } + }
@ -908,7 +853,7 @@ index 7b09df01..f7c6a4a9 100644
GTop.glibtop_get_mem(this.mem); GTop.glibtop_get_mem(this.mem);
let t = this.mem.user / this.mem.total; let t = this.mem.user / this.mem.total;
@@ -286,90 +281,97 @@ const MemoryIndicator = new Lang.Class({ @@ -286,90 +286,97 @@ const MemoryIndicator = new Lang.Class({
t += this.mem.cached / this.mem.total; t += this.mem.cached / this.mem.total;
this.stats['mem-cached'].values.push(t); this.stats['mem-cached'].values.push(t);
} }
@ -981,12 +926,12 @@ index 7b09df01..f7c6a4a9 100644
+ this._box = new St.BoxLayout({ + this._box = new St.BoxLayout({
+ style_class: 'extension-systemMonitor-container', + style_class: 'extension-systemMonitor-container',
+ x_align: Clutter.ActorAlign.START, + x_align: Clutter.ActorAlign.START,
+ x_expand: true, + x_expand: true
+ }); + });
+ this._indicators = []; + this._indicators = [];
+ +
+ for (let i = 0; i < INDICATORS.length; i++) { + for (let i = 0; i < INDICATORS.length; i++) {
+ let indicator = new INDICATORS[i](); + let indicator = new (INDICATORS[i])();
+ +
+ indicator.actor.connect('notify::hover', () => { + indicator.actor.connect('notify::hover', () => {
+ this._onHover(indicator); + this._onHover(indicator);
@ -1081,119 +1026,13 @@ index 7b09df01..f7c6a4a9 100644
function init() { function init() {
return new Extension(); return new Extension();
-- --
2.41.0 2.21.0
From fe1916c1b29ab64c73179ab4c86e106ff69f977d Mon Sep 17 00:00:00 2001 From e7ea49cd416e8ede9767f5ade46a06764d1e9a5b 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
There is no good reason to use a public property, and the name will
clash when we subclass St.Button.
---
extensions/systemMonitor/extension.js | 35 ++++++++++++++-------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
index f7c6a4a9..bde25a1d 100644
--- a/extensions/systemMonitor/extension.js
+++ b/extensions/systemMonitor/extension.js
@@ -19,6 +19,7 @@ const ITEM_HOVER_TIMEOUT = 300;
const Indicator = class {
constructor() {
+ this._label = null;
this._initValues();
this._drawingArea = new St.DrawingArea({
reactive: true,
@@ -51,28 +52,28 @@ const Indicator = class {
}
showLabel() {
- if (this.label === null)
+ if (this._label === null)
return;
- this.label.opacity = 0;
- this.label.show();
+ this._label.opacity = 0;
+ this._label.show();
let [stageX, stageY] = this.actor.get_transformed_position();
let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
- let labelWidth = this.label.width;
+ let labelWidth = this._label.width;
let xOffset = Math.floor((itemWidth - labelWidth) / 2);
let x = stageX + xOffset;
- let node = this.label.get_theme_node();
+ let node = this._label.get_theme_node();
let yOffset = node.get_length('-y-offset');
- let y = stageY - this.label.get_height() - yOffset;
+ let y = stageY - this._label.get_height() - yOffset;
- this.label.set_position(x, y);
- this.label.ease({
+ this._label.set_position(x, y);
+ this._label.ease({
opacity: 255,
duration: ITEM_LABEL_SHOW_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
@@ -80,23 +81,23 @@ const Indicator = class {
}
setLabelText(text) {
- if (this.label === null) {
- this.label = new St.Label({
+ if (this._label === null) {
+ this._label = new St.Label({
style_class: 'extension-systemMonitor-indicator-label',
});
}
- this.label.set_text(text);
- Main.layoutManager.addChrome(this.label);
- this.label.hide();
+ this._label.set_text(text);
+ Main.layoutManager.addChrome(this._label);
+ this._label.hide();
}
hideLabel() {
- this.label.ease({
+ this._label.ease({
opacity: 0,
duration: ITEM_LABEL_HIDE_TIME,
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
- onComplete: () => this.label.hide(),
+ onComplete: () => this._label.hide(),
});
}
@@ -107,8 +108,8 @@ const Indicator = class {
_onDestroy() {
GLib.source_remove(this._timeout);
- if (this.label)
- this.label.destroy();
+ if (this._label)
+ this._label.destroy();
}
_initValues() {
--
2.41.0
From b8457707c2b05b88d443587b729e1893cf8b8d3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 May 2017 19:31:58 +0200 Date: Wed, 17 May 2017 19:31:58 +0200
Subject: [PATCH 4/6] systemMonitor: Move indicators to calendar Subject: [PATCH 3/5] systemMonitor: Move indicators to calendar
The message tray joined the invisible choir, so we have to find The message tray joined the invisible choir, so we have to find
a new home for the extension UI. The message list in the calendar a new home for the extension UI. The message list in the calendar
@ -1201,59 +1040,45 @@ drop-down looks like the best option, given that it replaced the
old tray (and also took over the old keyboard shortcut to bring old tray (and also took over the old keyboard shortcut to bring
it up quickly). it up quickly).
--- ---
extensions/systemMonitor/extension.js | 106 +++++++++++------------- extensions/systemMonitor/extension.js | 65 ++++++++++++-------------
extensions/systemMonitor/stylesheet.css | 14 ---- extensions/systemMonitor/stylesheet.css | 14 ------
2 files changed, 50 insertions(+), 70 deletions(-) 2 files changed, 31 insertions(+), 48 deletions(-)
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
index bde25a1d..1fd01ab4 100644 index 89f8916..0188960 100644
--- a/extensions/systemMonitor/extension.js --- a/extensions/systemMonitor/extension.js
+++ b/extensions/systemMonitor/extension.js +++ b/extensions/systemMonitor/extension.js
@@ -2,10 +2,11 @@ @@ -3,9 +3,11 @@
/* exported init */ /* exported init */
-const { Clutter, GLib, GTop, Shell, St } = imports.gi; const { Clutter, GLib, GTop, Shell, St } = imports.gi;
+const { Clutter, GLib, GObject, GTop, Shell, St } = imports.gi; +const Signals = imports.signals;
const ExtensionUtils = imports.misc.extensionUtils; const ExtensionUtils = imports.misc.extensionUtils;
const Main = imports.ui.main; const Main = imports.ui.main;
+const MessageList = imports.ui.messageList; +const MessageList = imports.ui.messageList;
const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell-extensions'); const Gettext = imports.gettext.domain('gnome-shell-extensions');
const _ = Gettext.gettext; @@ -21,22 +23,25 @@ const ITEM_HOVER_TIMEOUT = 300;
@@ -17,30 +18,38 @@ const ITEM_LABEL_SHOW_TIME = 150; const Indicator = class {
const ITEM_LABEL_HIDE_TIME = 100; constructor() {
const ITEM_HOVER_TIMEOUT = 300;
-const Indicator = class {
- constructor() {
+const Indicator = GObject.registerClass({
+ Signals: {
+ 'close': {},
+ 'expanded': {},
+ 'unexpanded': {},
+ },
+}, class Indicator extends St.Button {
+ _init() {
this._label = null;
this._initValues(); this._initValues();
this._drawingArea = new St.DrawingArea({ - this._drawingArea = new St.DrawingArea({ reactive: true });
- reactive: true, + this._drawingArea = new St.DrawingArea();
x_expand: true,
y_expand: true,
});
this._drawingArea.connect('repaint', this._draw.bind(this)); this._drawingArea.connect('repaint', this._draw.bind(this));
- this._drawingArea.connect('button-press-event', () => { - this._drawingArea.connect('button-press-event', () => {
+ +
+ super._init({ + this.actor = new St.Button({
+ style_class: 'message message-content extension-systemMonitor-indicator-area', + style_class: 'message message-content extension-systemMonitor-indicator-area',
+ child: this._drawingArea, + child: this._drawingArea,
+ x_expand: true, + x_expand: true,
+ can_focus: true, + x_fill: true,
+ y_fill: true,
+ can_focus: true
+ }); + });
+ +
+ this.connect('clicked', () => { + this.actor.connect('clicked', () => {
let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop'); let app = Shell.AppSystem.get_default().lookup_app('gnome-system-monitor.desktop');
app.open_new_window(-1); app.open_new_window(-1);
- return true; - return true;
@ -1263,125 +1088,66 @@ index bde25a1d..1fd01ab4 100644
- style_class: 'extension-systemMonitor-indicator-area', - style_class: 'extension-systemMonitor-indicator-area',
- reactive: true, - reactive: true,
- track_hover: true, - track_hover: true,
- x_fill: true,
- y_fill: true
+ Main.overview.hide(); + Main.overview.hide();
+ Main.panel.closeCalendar(); + Main.panel.closeCalendar();
}); });
- this.actor.add_actor(this._drawingArea); - this.actor.add_actor(this._drawingArea);
- this.actor.connect('destroy', this._onDestroy.bind(this)); this.actor.connect('destroy', this._onDestroy.bind(this));
+ this.connect('destroy', this._onDestroy.bind(this));
this._timeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, @@ -71,6 +76,7 @@ const Indicator = class {
INDICATOR_UPDATE_INTERVAL, let y = stageY - this.label.get_height() - yOffset;
@@ -58,9 +67,9 @@ const Indicator = class {
this._label.opacity = 0;
this._label.show();
- let [stageX, stageY] = this.actor.get_transformed_position(); this.label.set_position(x, y);
+ let [stageX, stageY] = this.get_transformed_position(); + this.label.get_parent().set_child_above_sibling(this.label, null);
Tweener.addTween(this.label, {
- let itemWidth = this.actor.allocation.x2 - this.actor.allocation.x1;
+ let itemWidth = this.allocation.x2 - this.allocation.x1;
let labelWidth = this._label.width;
let xOffset = Math.floor((itemWidth - labelWidth) / 2);
@@ -73,6 +82,7 @@ const Indicator = class {
let y = stageY - this._label.get_height() - yOffset;
this._label.set_position(x, y);
+ this._label.get_parent().set_child_above_sibling(this._label, null);
this._label.ease({
opacity: 255, opacity: 255,
duration: ITEM_LABEL_SHOW_TIME, time: ITEM_LABEL_SHOW_TIME,
@@ -101,8 +111,12 @@ const Indicator = class { @@ -98,6 +104,14 @@ const Indicator = class {
}); });
} }
- destroy() {
- this.actor.destroy();
+ /* MessageList.Message boilerplate */ + /* MessageList.Message boilerplate */
+ canClose() { + canClose() {
+ return false; + return false;
+ } + }
+ +
+ clear() { + clear() {
+ }
+
destroy() {
this.actor.destroy();
} }
@@ -195,6 +209,7 @@ const Indicator = class {
_onDestroy() {
@@ -120,7 +134,7 @@ const Indicator = class {
_draw(area) {
let [width, height] = area.get_surface_size();
- let themeNode = this.actor.get_theme_node();
+ let themeNode = this.get_theme_node();
let cr = area.get_context();
// draw the background grid
@@ -190,11 +204,12 @@ const Indicator = class {
cr.stroke();
} }
} }
-}; };
+}); +Signals.addSignalMethods(Indicator.prototype); // For MessageList.Message compat
-const CpuIndicator = class extends Indicator { const CpuIndicator = class extends Indicator {
- constructor() { constructor() {
- super(); @@ -300,11 +315,7 @@ class Extension {
+const CpuIndicator = GObject.registerClass(
+class CpuIndicator extends Indicator {
+ _init() {
+ super._init();
this.gridColor = '-grid-color';
this.renderStats = ['cpu-user', 'cpu-sys', 'cpu-iowait'];
@@ -245,11 +260,12 @@ const CpuIndicator = class extends Indicator {
this._prev = cpu;
}
-};
+});
-const MemoryIndicator = class extends Indicator {
- constructor() {
- super();
+const MemoryIndicator = GObject.registerClass(
+class MemoryIndicator extends Indicator {
+ _init() {
+ super._init();
this.gridColor = '-grid-color';
this.renderStats = ['mem-user', 'mem-other', 'mem-cached'];
@@ -282,7 +298,7 @@ const MemoryIndicator = class extends Indicator {
t += this.mem.cached / this.mem.total;
this.stats['mem-cached'].values.push(t);
}
-};
+});
const INDICATORS = [CpuIndicator, MemoryIndicator];
@@ -296,49 +312,27 @@ class Extension {
} }
enable() { enable() {
- this._box = new St.BoxLayout({ - this._box = new St.BoxLayout({
- style_class: 'extension-systemMonitor-container', - style_class: 'extension-systemMonitor-container',
- x_align: Clutter.ActorAlign.START, - x_align: Clutter.ActorAlign.START,
- x_expand: true, - x_expand: true
- }); - });
- this._indicators = [];
+ this._section = new MessageList.MessageListSection(_('System Monitor')); + this._section = new MessageList.MessageListSection(_('System Monitor'));
this._indicators = [];
for (let i = 0; i < INDICATORS.length; i++) { for (let i = 0; i < INDICATORS.length; i++) {
let indicator = new INDICATORS[i](); @@ -313,32 +324,18 @@ class Extension {
indicator.actor.connect('notify::hover', () => {
- indicator.actor.connect('notify::hover', () => {
+ indicator.connect('notify::hover', () => {
this._onHover(indicator); this._onHover(indicator);
}); });
- this._box.add_actor(indicator.actor); - this._box.add_actor(indicator.actor);
- this._indicators.push(indicator);
+ this._section.addMessage(indicator, false); + this._section.addMessage(indicator, false);
this._indicators.push(indicator);
} }
- this._boxHolder = new St.BoxLayout({ - this._boxHolder = new St.BoxLayout({
@ -1396,29 +1162,24 @@ index bde25a1d..1fd01ab4 100644
- this._boxHolder.add_child(this._box); - this._boxHolder.add_child(this._box);
- this._boxHolder.add_child(menuButton); - this._boxHolder.add_child(menuButton);
+ Main.panel.statusArea.dateMenu._messageList._addSection(this._section); + Main.panel.statusArea.dateMenu._messageList._addSection(this._section);
+ this._section.get_parent().set_child_at_index(this._section, 0); + this._section.actor.get_parent().set_child_at_index(this._section.actor, 0);
} }
disable() { disable() {
- this._indicators.forEach(i => i.destroy()); this._indicators.forEach(i => i.destroy());
-
- let menuButton = Main.messageTray._messageTrayMenuButton.actor; - let menuButton = Main.messageTray._messageTrayMenuButton.actor;
- this._boxHolder.remove_child(menuButton); - this._boxHolder.remove_child(menuButton);
- Main.messageTray.actor.add_child(menuButton); - Main.messageTray.actor.add_child(menuButton);
- -
- this._box.destroy(); - this._box.destroy();
- this._boxHolder.destroy(); - this._boxHolder.destroy();
+ this._section.destroy(); + Main.panel.statusArea.dateMenu._messageList._removeSection(this._section);
} }
_onHover(item) { _onHover(item) {
- if (item.actor.get_hover()) {
+ if (item.get_hover()) {
if (this._showLabelTimeoutId)
return;
diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css
index 13f95ec7..978ac12a 100644 index 13f95ec..978ac12 100644
--- a/extensions/systemMonitor/stylesheet.css --- a/extensions/systemMonitor/stylesheet.css
+++ b/extensions/systemMonitor/stylesheet.css +++ b/extensions/systemMonitor/stylesheet.css
@@ -1,17 +1,4 @@ @@ -1,17 +1,4 @@
@ -1448,13 +1209,13 @@ index 13f95ec7..978ac12a 100644
.extension-systemMonitor-indicator-label { .extension-systemMonitor-indicator-label {
-- --
2.41.0 2.21.0
From bc05d47dbd45f761b14d90f60fd16259486bcb53 Mon Sep 17 00:00:00 2001 From f73fe9cfb5f9dbd6647e4eb30a9af0fb7ff79219 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 May 2017 16:20:07 +0200 Date: Thu, 18 May 2017 16:20:07 +0200
Subject: [PATCH 5/6] systemMonitor: Handle clicks on section title Subject: [PATCH 4/5] systemMonitor: Handle clicks on section title
While on 3.24.x only the event section still has a clickable title, While on 3.24.x only the event section still has a clickable title,
it's a generic message list feature in previous versions. It's easy it's a generic message list feature in previous versions. It's easy
@ -1463,21 +1224,20 @@ the generic baseclass.
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions3 Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions3
--- ---
extensions/systemMonitor/extension.js | 18 +++++++++++++++++- extensions/systemMonitor/extension.js | 17 ++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-) 1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
index 1fd01ab4..57bdb51f 100644 index 0188960..b4d5a9d 100644
--- a/extensions/systemMonitor/extension.js --- a/extensions/systemMonitor/extension.js
+++ b/extensions/systemMonitor/extension.js +++ b/extensions/systemMonitor/extension.js
@@ -300,6 +300,22 @@ class MemoryIndicator extends Indicator { @@ -303,6 +303,21 @@ const MemoryIndicator = class extends Indicator {
} }
}); };
+const SystemMonitorSection = GObject.registerClass(
+class SystemMonitorSection extends MessageList.MessageListSection { +class SystemMonitorSection extends MessageList.MessageListSection {
+ _init() { + constructor() {
+ super._init(_('System Monitor')); + super(_('System Monitor'));
+ } + }
+ +
+ _onTitleClicked() { + _onTitleClicked() {
@ -1488,28 +1248,28 @@ index 1fd01ab4..57bdb51f 100644
+ if (app) + if (app)
+ app.open_new_window(-1); + app.open_new_window(-1);
+ } + }
+}); +}
+ +
const INDICATORS = [CpuIndicator, MemoryIndicator]; const INDICATORS = [CpuIndicator, MemoryIndicator];
class Extension { class Extension {
@@ -312,7 +328,7 @@ class Extension { @@ -315,7 +330,7 @@ class Extension {
} }
enable() { enable() {
- this._section = new MessageList.MessageListSection(_('System Monitor')); - this._section = new MessageList.MessageListSection(_('System Monitor'));
+ this._section = new SystemMonitorSection(); + this._section = new SystemMonitorSection();
this._indicators = [];
for (let i = 0; i < INDICATORS.length; i++) { for (let i = 0; i < INDICATORS.length; i++) {
let indicator = new INDICATORS[i]();
-- --
2.41.0 2.21.0
From 597086c27823a7eb0b2124bfbe2c0572bbd1783d Mon Sep 17 00:00:00 2001 From df76e98d6bbac7dccc86f66e82eac2977fb5ed87 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 18 May 2017 18:00:17 +0200 Date: Thu, 18 May 2017 18:00:17 +0200
Subject: [PATCH 6/6] systemMonitor: Provide classic styling Subject: [PATCH 5/5] systemMonitor: Provide classic styling
The indicator tooltips currently don't work out in classic mode The indicator tooltips currently don't work out in classic mode
(dark text on dark background), so provide some mode-specific (dark text on dark background), so provide some mode-specific
@ -1524,7 +1284,7 @@ Fixes: #4
diff --git a/extensions/systemMonitor/classic.css b/extensions/systemMonitor/classic.css diff --git a/extensions/systemMonitor/classic.css b/extensions/systemMonitor/classic.css
new file mode 100644 new file mode 100644
index 00000000..946863dc index 0000000..946863d
--- /dev/null --- /dev/null
+++ b/extensions/systemMonitor/classic.css +++ b/extensions/systemMonitor/classic.css
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
@ -1535,7 +1295,7 @@ index 00000000..946863dc
+ border: 1px solid #a1a1a1; + border: 1px solid #a1a1a1;
+} +}
diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build
index 48504f63..b6548b14 100644 index 48504f6..b6548b1 100644
--- a/extensions/systemMonitor/meson.build --- a/extensions/systemMonitor/meson.build
+++ b/extensions/systemMonitor/meson.build +++ b/extensions/systemMonitor/meson.build
@@ -3,3 +3,7 @@ extension_data += configure_file( @@ -3,3 +3,7 @@ extension_data += configure_file(
@ -1547,5 +1307,5 @@ index 48504f63..b6548b14 100644
+ extension_data += files('classic.css') + extension_data += files('classic.css')
+endif +endif
-- --
2.41.0 2.21.0

View File

@ -1,4 +1,4 @@
From 0d9210e9c19c1bd9535ffb75b4834c2ccd8db6c2 Mon Sep 17 00:00:00 2001 From f8ec838485ae81cf2e8ab2b899ad4154c7c06fbd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 21 Apr 2022 16:34:50 +0200 Date: Thu, 21 Apr 2022 16:34:50 +0200
Subject: [PATCH 1/2] window-list: Fix primary button action on touch Subject: [PATCH 1/2] window-list: Fix primary button action on touch
@ -18,23 +18,23 @@ Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests
1 file changed, 2 insertions(+), 2 deletions(-) 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
index e122cf5f..43885378 100644 index 1f854aa2..fedc4195 100644
--- a/extensions/window-list/extension.js --- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js
@@ -381,7 +381,7 @@ class WindowButton extends BaseButton { @@ -358,7 +358,7 @@ class WindowButton extends BaseButton {
return; return;
} }
- if (button === 1) - if (button == 1)
+ if (!button || button === 1) + if (!button || button === 1)
_minimizeOrActivateWindow(this.metaWindow); _minimizeOrActivateWindow(this.metaWindow);
else else
_openMenu(this._contextMenu); _openMenu(this._contextMenu);
@@ -623,7 +623,7 @@ class AppButton extends BaseButton { @@ -601,7 +601,7 @@ class AppButton extends BaseButton {
if (contextMenuWasOpen) if (contextMenuWasOpen)
this._contextMenu.close(); this._contextMenu.close();
- if (button === 1) { - if (button == 1) {
+ if (!button || button === 1) { + if (!button || button === 1) {
if (menuWasOpen) if (menuWasOpen)
return; return;
@ -43,7 +43,7 @@ index e122cf5f..43885378 100644
2.36.1 2.36.1
From b080bb7ee88d0e5b35dc4a967d2e44eab7921b6f Mon Sep 17 00:00:00 2001 From d3cf07f8065935736e8a79d06ec79c971c453453 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 5 May 2022 20:55:20 +0200 Date: Thu, 5 May 2022 20:55:20 +0200
Subject: [PATCH 2/2] window-list: Open menu on long press Subject: [PATCH 2/2] window-list: Open menu on long press
@ -55,15 +55,25 @@ https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/146
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/233> Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/merge_requests/233>
--- ---
extensions/window-list/extension.js | 42 +++++++++++++++++++++++++++++ extensions/window-list/extension.js | 45 +++++++++++++++++++++++++++++
1 file changed, 42 insertions(+) 1 file changed, 45 insertions(+)
diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js diff --git a/extensions/window-list/extension.js b/extensions/window-list/extension.js
index 43885378..3d1cd053 100644 index fedc4195..0baaeecb 100644
--- a/extensions/window-list/extension.js --- a/extensions/window-list/extension.js
+++ b/extensions/window-list/extension.js +++ b/extensions/window-list/extension.js
@@ -266,6 +266,48 @@ const BaseButton = GObject.registerClass({ @@ -229,6 +229,9 @@ class BaseButton {
this._updateVisibility(); this.actor.connect('clicked', this._onClicked.bind(this));
this.actor.connect('destroy', this._onDestroy.bind(this));
this.actor.connect('popup-menu', this._onPopupMenu.bind(this));
+ this.actor.connect('button-press-event', this._onButtonPress.bind(this));
+ this.actor.connect('button-release-event', this._onButtonRelease.bind(this));
+ this.actor.connect('touch-event', this._onTouch.bind(this));
this._contextMenuManager = new PopupMenu.PopupMenuManager(this);
@@ -250,6 +253,48 @@ class BaseButton {
return this.actor.has_style_class_name('focused');
} }
+ _setLongPressTimeout() { + _setLongPressTimeout() {
@ -88,24 +98,24 @@ index 43885378..3d1cd053 100644
+ delete this._longPressTimeoutId; + delete this._longPressTimeoutId;
+ } + }
+ +
+ vfunc_button_press_event(buttonEvent) { + _onButtonPress(button, event) {
+ if (buttonEvent.button === 1) + if (event.get_button() === 1)
+ this._setLongPressTimeout(); + this._setLongPressTimeout();
+ return super.vfunc_button_press_event(buttonEvent); + return Clutter.EVENT_PROPAGATE;
+ } + }
+ +
+ vfunc_button_release_event(buttonEvent) { + _onButtonRelease() {
+ this._removeLongPressTimeout(); + this._removeLongPressTimeout();
+ + return Clutter.EVENT_PROPAGATE;
+ return super.vfunc_button_release_event(buttonEvent);
+ } + }
+ +
+ vfunc_touch_event(touchEvent) { + _onTouch(event) {
+ if (touchEvent.type === Clutter.EventType.TOUCH_BEGIN) + const type = event.get_type();
+ if (type === Clutter.EventType.TOUCH_BEGIN)
+ this._setLongPressTimeout(); + this._setLongPressTimeout();
+ else if (touchEvent.type === Clutter.EventType.TOUCH_END) + else if (type === Clutter.EventType.TOUCH_END)
+ this._removeLongPressTimeout(); + this._removeLongPressTimeout();
+ return super.vfunc_touch_event(touchEvent); + return Clutter.EVENT_PROPAGATE;
+ } + }
+ +
activate() { activate() {

View File

@ -1,54 +1,64 @@
%global major_version %%(cut -d "." -f 1 <<<%{version}) %global major_version %%(cut -d "." -f 1-2 <<<%{version})
# Minimum GNOME Shell version supported # Minimum GNOME Shell version supported
%global min_gs_version %%(cut -d "." -f 1-3 <<<%{version}) %global min_gs_version %%(cut -d "." -f 1-3 <<<%{version})
%global pkg_prefix gnome-shell-extension %global pkg_prefix gnome-shell-extension
%global tarball_version %%(echo %{version} | tr '~' '.')
Name: gnome-shell-extensions Name: gnome-shell-extensions
Version: 40.7 Version: 3.32.1
Release: 19%{?dist} Release: 39%{?dist}
Summary: Modify and extend GNOME Shell functionality and behavior Summary: Modify and extend GNOME Shell functionality and behavior
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
URL: http://wiki.gnome.org/Projects/GnomeShell/Extensions URL: http://wiki.gnome.org/Projects/GnomeShell/Extensions
Source0: http://ftp.gnome.org/pub/GNOME/sources/%{name}/%{major_version}/%{name}-%{tarball_version}.tar.xz Source0: http://ftp.gnome.org/pub/GNOME/sources/%{name}/%{major_version}/%{name}-%{version}.tar.xz
Source1: gnome-classic.desktop
Source2: gnome-classic-wayland.desktop
# BuildRequires: gnome-common
BuildRequires: meson BuildRequires: meson
BuildRequires: sassc
BuildRequires: git BuildRequires: git
BuildRequires: gettext >= 0.19.6 BuildRequires: gettext >= 0.19.6
BuildRequires: pkgconfig(gnome-desktop-3.0)
BuildRequires: pkgconfig(libgtop-2.0)
Requires: gnome-shell >= %{min_gs_version} Requires: gnome-shell >= %{min_gs_version}
BuildArch: noarch BuildArch: noarch
Patch001: 0001-Update-style.patch Patch0001: 0001-Update-style.patch
Patch002: 0001-apps-menu-add-logo-icon-to-Applications-menu.patch Patch0002: 0001-apps-menu-add-logo-icon-to-Applications-menu.patch
Patch003: add-extra-extensions.patch Patch0003: add-extra-extensions.patch
Patch004: 0001-apps-menu-Explicitly-set-label_actor.patch Patch0004: 0001-apps-menu-Explicitly-set-label_actor.patch
Patch005: resurrect-system-monitor.patch Patch0005: resurrect-system-monitor.patch
Patch006: 0001-Include-top-icons-in-classic-session.patch Patch0006: 0001-Include-top-icons-in-classic-session.patch
Patch007: 0001-desktop-icons-Update-Japanese-translation.patch Patch0007: more-classic-classic-mode.patch
Patch008: desktop-icons-40-fixes.patch Patch0008: 0001-apps-menu-Add-missing-chain-up.patch
Patch009: 0001-top-icons-Don-t-use-wm_class-as-role.patch Patch0009: 0001-dashToDock-Handle-no-overview-case.patch
Patch010: 0001-heads-up-display-Add-extension-for-showing-persisten.patch Patch0010: 0001-window-list-Invalid-current-mode-selected-in-Prefere.patch
Patch011: 0001-Add-gesture-inhibitor-extension.patch Patch0011: 0001-Update-desktop-icons-gettext-domain.patch
Patch012: gnome-classic-wayland.patch Patch0012: 0001-desktop-icons-Update-Japanese-translation.patch
Patch013: 0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch Patch0013: 0001-fileItem-Ignore-double-click-distance-clicking-on-it.patch
Patch014: window-list-touch.patch Patch0014: 0001-window-list-Leave-fake-overview-when-destroyed.patch
Patch015: 0001-classification-banner-Handle-fullscreen-monitors.patch Patch0015: add-workspace-tooltips.patch
Patch016: 0001-desktop-icons-Don-t-grab-focus-on-click.patch Patch0016: 0001-general-launch-only-executable-files.patch
Patch017: 0001-desktopManager-Hook-into-LayoutManager-to-create-gri.patch Patch0017: desktop-icons-touch-support.patch
Patch018: 0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch Patch0018: 0001-Add-gesture-inhibitor-extension.patch
Patch019: 0001-desktop-icons-Don-t-use-blocking-IO.patch Patch0019: 0001-top-icons-Don-t-use-wm_class-as-role.patch
Patch020: 0001-window-list-Explicitly-dispose-settings-on-destroy.patch Patch0020: 0001-heads-up-display-Add-extension-for-showing-persisten.patch
Patch021: 0001-desktop-icons-Don-t-try-spawn-with-non-existent-work.patch Patch0021: 0001-desktop-icons-Fix-stuck-grab-issue-with-rubber-bandi.patch
Patch022: 0001-docking-Only-remove-spacer-if-necessary.patch Patch0022: 0001-gesture-inhibitor-Put-a-foot-down-with-self-enabling.patch
Patch023: 0001-classification-banner-Hide-from-picks.patch Patch0023: 0001-desktop-icons-Use-a-single-unique-name-to-access-nau.patch
Patch024: 0001-desktop-icons-Notify-icon-drags.patch Patch0024: window-list-touch.patch
Patch025: prefer-window-icon.patch Patch0025: 0001-auto-move-windows-Don-t-move-windows-already-on-all-.patch
Patch026: 0001-desktop-icons-Handle-touch-events.patch Patch0026: 0001-fileItem-Just-destroy-menus.patch
Patch027: more-ws-previews.patch Patch0027: 0001-fileItem-Support-.desktop-files-of-type-Link.patch
Patch028: 0001-Add-move-clock-extension.patch Patch0028: 0001-classification-banner-Handle-fullscreen-monitors.patch
Patch029: 0001-workspace-indicator-Re-fittsify-workspace-previews.patch Patch0029: 0001-gesture-inhibitor-Allow-inhibiting-workspace-switch-.patch
Patch0030: 0001-desktop-icons-Don-t-use-blocking-IO.patch
Patch0031: 0001-panel-favorites-Update-to-upstream-version.patch
Patch0032: 0001-desktop-icons-Don-t-try-spawn-with-non-existent-work.patch
Patch0033: 0001-classification-banner-Hide-from-picks.patch
%description %description
GNOME Shell Extensions is a collection of extensions providing additional and GNOME Shell Extensions is a collection of extensions providing additional and
@ -61,13 +71,15 @@ Enabled extensions:
* custom-menu * custom-menu
* dash-to-dock * dash-to-dock
* dash-to-panel * dash-to-panel
* disable-screenshield
* desktop-icons * desktop-icons
* drive-menu
* gesture-inhibitor * gesture-inhibitor
* launch-new-instance
* heads-up-display * heads-up-display
* move-clock * horizontal-workspaces
* drive-menu
* launch-new-instance
* native-window-placement * native-window-placement
* no-hot-corner
* panel-favorites * panel-favorites
* places-menu * places-menu
* screenshot-window-sizer * screenshot-window-sizer
@ -81,9 +93,20 @@ Enabled extensions:
%package -n %{pkg_prefix}-common %package -n %{pkg_prefix}-common
Summary: Files common to GNOME Shell Extensions Summary: Files common to GNOME Shell Extensions
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: gnome-shell >= %{min_gs_version} Requires: gnome-shell >= %{min_gs_version}
Obsoletes: %{pkg_prefix}-horizontal-workspaces < 40.0~alpha.1-3 # Dock extension no longer provided by GNOME Shell extensions >= 3.7.1
Obsoletes: %{pkg_prefix}-dock < 3.7.1
Obsoletes: %{pkg_prefix}-alternate-tab < 3.31.2
# Alternative-status-menu extension no longer provided by GNOME Shell extensions >= 3.9.5
Obsoletes: %{pkg_prefix}-alternative-status-menu < 3.9.5
# Xrandr-indicator extension no longer provided by GNOME Shell extensions >= 3.9.5
Obsoletes: %{pkg_prefix}-xrandr-indicator < 3.9.90
# Obsolete extensions dropped in favor of schema overrides by upstream
Obsoletes: %{pkg_prefix}-default-min-max < 3.9.3-1
Obsoletes: %{pkg_prefix}-static-workspaces < 3.9.3-1
Obsoletes: %{pkg_prefix}-systemMonitor < 3.15.91
%description -n %{pkg_prefix}-common %description -n %{pkg_prefix}-common
GNOME Shell Extensions is a collection of extensions providing additional and GNOME Shell Extensions is a collection of extensions providing additional and
@ -94,13 +117,24 @@ This package provides common data files shared by various extensions.
%package -n gnome-classic-session %package -n gnome-classic-session
Summary: GNOME "classic" mode session Summary: GNOME "classic" mode session
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-apps-menu = %{version}-%{release} Requires: %{pkg_prefix}-apps-menu = %{version}-%{release}
Requires: %{pkg_prefix}-desktop-icons = %{version}-%{release} Requires: %{pkg_prefix}-desktop-icons = %{version}-%{release}
Requires: %{pkg_prefix}-horizontal-workspaces = %{version}-%{release}
Requires: %{pkg_prefix}-launch-new-instance = %{version}-%{release} Requires: %{pkg_prefix}-launch-new-instance = %{version}-%{release}
Requires: %{pkg_prefix}-places-menu = %{version}-%{release} Requires: %{pkg_prefix}-places-menu = %{version}-%{release}
Requires: %{pkg_prefix}-window-list = %{version}-%{release} Requires: %{pkg_prefix}-window-list = %{version}-%{release}
Requires: nautilus Requires: nautilus
# Obsolete fallback mode components
Obsoletes: gnome-applets < 1:3.5.92-5
%global gnome_applet_sensors_obsolete_ver 3.0.0-6
Obsoletes: gnome-applet-sensors < %{gnome_applet_sensors_obsolete_ver}
Obsoletes: gnome-applet-sensors-devel < %{gnome_applet_sensors_obsolete_ver}
%global gnome_panel_obsolete_ver 3.6.2-7
Obsoletes: gnome-panel < %{gnome_panel_obsolete_ver}
Obsoletes: gnome-panel-devel < %{gnome_panel_obsolete_ver}
Obsoletes: gnome-panel-libs < %{gnome_panel_obsolete_ver}
%description -n gnome-classic-session %description -n gnome-classic-session
This package contains the required components for the GNOME Shell "classic" This package contains the required components for the GNOME Shell "classic"
@ -109,6 +143,7 @@ mode, which aims to provide a GNOME 2-like user interface.
%package -n %{pkg_prefix}-apps-menu %package -n %{pkg_prefix}-apps-menu
Summary: Application menu for GNOME Shell Summary: Application menu for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
Requires: gnome-menus Requires: gnome-menus
@ -119,6 +154,7 @@ This GNOME Shell extension adds a GNOME 2.x style menu for applications.
%package -n %{pkg_prefix}-auto-move-windows %package -n %{pkg_prefix}-auto-move-windows
Summary: Assign specific workspaces to applications in GNOME Shell Summary: Assign specific workspaces to applications in GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -150,6 +186,7 @@ This GNOME Shell extension adds a custom menu to the desktop background.
%package -n %{pkg_prefix}-dash-to-dock %package -n %{pkg_prefix}-dash-to-dock
Summary: Show the dash outside the activities overview Summary: Show the dash outside the activities overview
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -159,6 +196,7 @@ This GNOME Shell extension makes the dash available outside the activities overv
%package -n %{pkg_prefix}-dash-to-panel %package -n %{pkg_prefix}-dash-to-panel
Summary: Show the dash in the top bar Summary: Show the dash in the top bar
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -166,9 +204,41 @@ Requires: %{pkg_prefix}-common = %{version}-%{release}
This GNOME Shell extension makes the dash available in the top bar This GNOME Shell extension makes the dash available in the top bar
%package -n %{pkg_prefix}-disable-screenshield
Summary: Disable GNOME Shell screen shield if lock is disabled
Group: User Interface/Desktops
License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-disable-screenshield
This GNOME Shell extension disabled the screen shield if screen locking is disabled.
%package -n %{pkg_prefix}-heads-up-display
Summary: Display persistent on-screen message
Group: User Interface/Desktops
License: GPLv3+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-heads-up-display
This GNOME Shell extension displays a persistent message in the top middle of the screen.
This message can appear on the login screen, lock screen, or regular user session.
%package -n %{pkg_prefix}-horizontal-workspaces
Summary: Desktop icons support for the classic experience
Group: User Interface/Desktops
License: GPLv3+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-horizontal-workspaces
This GNOME Shell extension adds desktop icons support as seen in GNOME 2
%package -n %{pkg_prefix}-desktop-icons %package -n %{pkg_prefix}-desktop-icons
Summary: Desktop icons support for the classic experience Summary: Desktop icons support for the classic experience
License: GPLv2+ Group: User Interface/Desktops
License: GPLv3+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-desktop-icons %description -n %{pkg_prefix}-desktop-icons
@ -177,6 +247,7 @@ This GNOME Shell extension adds desktop icons support as seen in GNOME 2
%package -n %{pkg_prefix}-drive-menu %package -n %{pkg_prefix}-drive-menu
Summary: Drive status menu for GNOME Shell Summary: Drive status menu for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -197,6 +268,7 @@ This GNOME Shell extension allows disabling the default desktop gestures.
%package -n %{pkg_prefix}-launch-new-instance %package -n %{pkg_prefix}-launch-new-instance
Summary: Always launch a new application instance for GNOME Shell Summary: Always launch a new application instance for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -205,28 +277,9 @@ This GNOME Shell extension modifies the behavior of clicking in the dash and app
launcher to always launch a new application instance. launcher to always launch a new application instance.
%package -n %{pkg_prefix}-move-clock
Summary: Move GNOME Shell notification menu to the right
License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-move-clock
This GNOME Shell extension moves the notification menu to the right.
%package -n %{pkg_prefix}-heads-up-display
Summary: Display persistent on-screen message
Group: User Interface/Desktops
License: GPLv3+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-heads-up-display
This GNOME Shell extension displays a persistent message in the top middle of the screen.
This message can appear on the login screen, lock screen, or regular user session.
%package -n %{pkg_prefix}-native-window-placement %package -n %{pkg_prefix}-native-window-placement
Summary: Native window placement for GNOME Shell Summary: Native window placement for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -235,8 +288,19 @@ This GNOME Shell extension provides additional configurability for the window
layout in the overview, including a mechanism similar to KDE4. layout in the overview, including a mechanism similar to KDE4.
%package -n %{pkg_prefix}-no-hot-corner
Summary: Disable the hot corner in GNOME Shell
Group: User Interface/Desktops
License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-no-hot-corner
This GNOME Shell extension disables the hot corner in the top bar.
%package -n %{pkg_prefix}-panel-favorites %package -n %{pkg_prefix}-panel-favorites
Summary: Favorite launchers in GNOME Shell's top bar Summary: Favorite launchers in GNOME Shell's top bar
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -246,6 +310,7 @@ This GNOME Shell extension adds favorite launchers to the top bar.
%package -n %{pkg_prefix}-places-menu %package -n %{pkg_prefix}-places-menu
Summary: Places status menu for GNOME Shell Summary: Places status menu for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -256,6 +321,7 @@ places in the system.
%package -n %{pkg_prefix}-screenshot-window-sizer %package -n %{pkg_prefix}-screenshot-window-sizer
Summary: Screenshot window sizer for GNOME Shell Summary: Screenshot window sizer for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -266,8 +332,12 @@ screenshots.
%package -n %{pkg_prefix}-systemMonitor %package -n %{pkg_prefix}-systemMonitor
Summary: System Monitor for GNOME Shell Summary: System Monitor for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
# Should be pulled in by control-center, but in case someone tries for a
# minimalist gnome-shell installation
Requires: libgtop2
%description -n %{pkg_prefix}-systemMonitor %description -n %{pkg_prefix}-systemMonitor
This GNOME Shell extension is a message tray indicator for CPU and memory usage This GNOME Shell extension is a message tray indicator for CPU and memory usage
@ -275,15 +345,17 @@ This GNOME Shell extension is a message tray indicator for CPU and memory usage
%package -n %{pkg_prefix}-top-icons %package -n %{pkg_prefix}-top-icons
Summary: Show legacy icons on top Summary: Show legacy icons on top
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
%description -n %{pkg_prefix}-top-icons %description -n %{pkg_prefix}-top-icons
This GNOME Shell extension moves legacy tray icons into the top bar This GNOME Shell extension moves legacy tray icons into the top bar.
%package -n %{pkg_prefix}-updates-dialog %package -n %{pkg_prefix}-updates-dialog
Summary: Show a modal dialog when there are software updates Summary: Show a modal dialog when there are software updates
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -293,6 +365,7 @@ This GNOME Shell extension shows a modal dialog when there are software updates
%package -n %{pkg_prefix}-user-theme %package -n %{pkg_prefix}-user-theme
Summary: Support for custom themes in GNOME Shell Summary: Support for custom themes in GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -301,8 +374,19 @@ This GNOME Shell extension enables loading a GNOME Shell theme from
~/.themes/<name>/gnome-shell/. ~/.themes/<name>/gnome-shell/.
%package -n %{pkg_prefix}-window-grouper
Summary: Keep windows that belong to the same process on the same workspace
Group: User Interface/Desktops
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 %package -n %{pkg_prefix}-window-list
Summary: Display a window list at the bottom of the screen in GNOME Shell Summary: Display a window list at the bottom of the screen in GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -312,6 +396,7 @@ This GNOME Shell extension displays a window list at the bottom of the screen.
%package -n %{pkg_prefix}-windowsNavigator %package -n %{pkg_prefix}-windowsNavigator
Summary: Support for keyboard selection of windows and workspaces in GNOME Shell Summary: Support for keyboard selection of windows and workspaces in GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -322,6 +407,7 @@ in overlay mode, by pressing the Alt and Ctrl key respectively.
%package -n %{pkg_prefix}-workspace-indicator %package -n %{pkg_prefix}-workspace-indicator
Summary: Workspace indicator for GNOME Shell Summary: Workspace indicator for GNOME Shell
Group: User Interface/Desktops
License: GPLv2+ License: GPLv2+
Requires: %{pkg_prefix}-common = %{version}-%{release} Requires: %{pkg_prefix}-common = %{version}-%{release}
@ -331,7 +417,7 @@ workspaces.
%prep %prep
%autosetup -S git -n %{name}-%{tarball_version} %autosetup -S git
%build %build
@ -342,6 +428,14 @@ workspaces.
%install %install
%meson_install %meson_install
# rename GNOME Classic to Classic and provide a wayland variant
mkdir -p $RPM_BUILD_ROOT%{_datadir}/wayland-sessions
cp $RPM_BUILD_ROOT%{_datadir}/xsessions/gnome-classic.desktop \
$RPM_BUILD_ROOT%{_datadir}/wayland-sessions/gnome-classic-wayland.desktop
cp $RPM_SOURCE_DIR/gnome-classic-wayland.desktop $RPM_BUILD_ROOT%{_datadir}/wayland-sessions
cp $RPM_SOURCE_DIR/gnome-classic.desktop $RPM_BUILD_ROOT%{_datadir}/xsessions
%find_lang %{name} %find_lang %{name}
@ -351,13 +445,12 @@ workspaces.
%files -n gnome-classic-session %files -n gnome-classic-session
%{_datadir}/gnome-session/sessions/gnome-classic.session
%{_datadir}/gnome-shell/modes/classic.json %{_datadir}/gnome-shell/modes/classic.json
%{_datadir}/gnome-shell/theme/*.svg %{_datadir}/gnome-shell/theme/*.svg
%{_datadir}/gnome-shell/theme/gnome-classic-high-contrast.css %{_datadir}/gnome-shell/theme/gnome-classic-high-contrast.css
%{_datadir}/gnome-shell/theme/gnome-classic.css %{_datadir}/gnome-shell/theme/gnome-classic.css
%{_datadir}/xsessions/gnome-classic.desktop %{_datadir}/xsessions/gnome-classic.desktop
%{_datadir}/xsessions/gnome-classic-xorg.desktop
%{_datadir}/wayland-sessions/gnome-classic.desktop
%{_datadir}/wayland-sessions/gnome-classic-wayland.desktop %{_datadir}/wayland-sessions/gnome-classic-wayland.desktop
%{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.classic.gschema.override %{_datadir}/glib-2.0/schemas/00_org.gnome.shell.extensions.classic.gschema.override
@ -389,6 +482,19 @@ workspaces.
%{_datadir}/gnome-shell/extensions/dash-to-panel*/ %{_datadir}/gnome-shell/extensions/dash-to-panel*/
%files -n %{pkg_prefix}-disable-screenshield
%{_datadir}/gnome-shell/extensions/disable-screenshield*/
%files -n %{pkg_prefix}-heads-up-display
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.heads-up-display.gschema.xml
%{_datadir}/gnome-shell/extensions/heads-up-display*/
%files -n %{pkg_prefix}-horizontal-workspaces
%{_datadir}/gnome-shell/extensions/horizontal-workspaces*/
%files -n %{pkg_prefix}-desktop-icons %files -n %{pkg_prefix}-desktop-icons
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml
%{_datadir}/gnome-shell/extensions/desktop-icons*/ %{_datadir}/gnome-shell/extensions/desktop-icons*/
@ -407,21 +513,17 @@ workspaces.
%{_datadir}/gnome-shell/extensions/launch-new-instance*/ %{_datadir}/gnome-shell/extensions/launch-new-instance*/
%files -n %{pkg_prefix}-move-clock
%{_datadir}/gnome-shell/extensions/move-clock*/
%files -n %{pkg_prefix}-heads-up-display
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.heads-up-display.gschema.xml
%{_datadir}/gnome-shell/extensions/heads-up-display*/
%files -n %{pkg_prefix}-native-window-placement %files -n %{pkg_prefix}-native-window-placement
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml
%{_datadir}/gnome-shell/extensions/native-window-placement*/ %{_datadir}/gnome-shell/extensions/native-window-placement*/
%files -n %{pkg_prefix}-no-hot-corner
%{_datadir}/gnome-shell/extensions/no-hot-corner*/
%files -n %{pkg_prefix}-panel-favorites %files -n %{pkg_prefix}-panel-favorites
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.panel-favorites.gschema.xml
%{_datadir}/gnome-shell/extensions/panel-favorites*/ %{_datadir}/gnome-shell/extensions/panel-favorites*/
@ -452,6 +554,11 @@ workspaces.
%{_datadir}/gnome-shell/extensions/user-theme*/ %{_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 %files -n %{pkg_prefix}-window-list
%{_datadir}/gnome-shell/extensions/window-list*/ %{_datadir}/gnome-shell/extensions/window-list*/
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml %{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.window-list.gschema.xml
@ -463,336 +570,209 @@ workspaces.
%files -n %{pkg_prefix}-workspace-indicator %files -n %{pkg_prefix}-workspace-indicator
%{_datadir}/gnome-shell/extensions/workspace-indicator*/ %{_datadir}/gnome-shell/extensions/workspace-indicator*/
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.workspace-indicator.gschema.xml
%changelog %changelog
* Tue Jul 02 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-19 * Tue Apr 23 2024 Florian Müllner <fmuellner@redhat.com> - 3.32.1-39
- Extend workspace buttons to screen edge - Fix tooltip animation times
Resolves: RHEL-43545 Resolves: RHEL-33681
* Tue May 21 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-18 * Wed Feb 07 2024 Florian Müllner <fmuellner@redhat.com> - 3.32.1-38
- Add "move-clock" extension
Resolves: RHEL-33429
* Fri Apr 19 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-17
- Fix downstream stylesheets
Resolves: RHEL-25016
* Wed Apr 03 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-16
- Improve workspace previews
Resolves: RHEL-25016
* Tue Mar 19 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-15
- Handle touch events in desktop icons
Resolves: RHEL-22713
* Tue Mar 19 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-14
- Prefer window icons in window list
Resolves: RHEL-24713
* Wed Mar 06 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-13
- Notify on desktop icon drags
Resolves: RHEL-26989
* Fri Feb 02 2024 Florian Müllner <fmuellner@redhat.com> - 40.7-12
- Hide classification banners from picks - Hide classification banners from picks
Resolves: RHEL-22789 Resolves: RHEL-24438
* Thu Dec 14 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-11 * Thu Nov 02 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.1-37
- Handle missing main dock when restoring dash - Fix spawning terminal without a desktop directory
Resolves: RHEL-16723 Resolves: RHEL-15031
* Tue Nov 07 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-10 * Fri Sep 15 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.1-36
- Include dash-to-panel extension - Update panel-favorites to matching upstream release
Resolves: RHEL-14935 Resolves: RHEL-3536
* Thu Nov 02 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-9 * Wed Aug 16 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.1-35
- Fix spawning terminal without desktop directory
Resolves: RHEL-15366
* Thu Aug 17 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-8
- Rebuild for custom context menu - Rebuild for custom context menu
Resolves: #2232332 Resolves: #2232333
* Wed Feb 15 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-7 * Tue Jan 17 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.1-33
- Fix crash on `dconf update`
Resolves: #2170067
* Wed Jan 18 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-6
- Avoid blocking IO in desktop-icons - Avoid blocking IO in desktop-icons
Resolves: #2162019 Resolves: #2162017
* Thu Jan 12 2023 Florian Müllner <fmuellner@redhat.com> - 40.7-5 * Thu Jan 12 2023 Florian Müllner <fmuellner@redhat.com> - 3.32.1-32
- Add custom-menu extension - Add custom-menu extension
Resolves: #2160553 Resolves: #2033572
* Wed Dec 14 2022 Florian Müllner <fmuellner@redhat.com> - 40.7-4 * Wed Dec 14 2022 Florian Müllner <fmuellner@redhat.com> - 3.32.1-31
- Adjust classification banner position in fullscreen - Adjust classification banner position in fullscreen
Resolves: #2153524 Resolves: #2150107
- Don't grab focus when clicking desktop grid - Allow inhibiting workspace switch gesture
Resolves: #2150001 Resolves: #2138109
- Make desktop icons resilient to background reloads
Resolves: #2139895
- Allow disabling workspace switch gesture
Resolves: #2154358
* Wed Jun 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.7-3 * Fri Dec 09 2022 Florian Müllner <fmuellner@redhat.com> - 3.32.1-30
- Fix stuck grab if disabled with open context menu
Resolves: #2149670
- Support .desktop files of type Link
Resolves: #2143825
* Mon Aug 29 2022 Jonas Ådahl <jadahl@redhat.com> - 3.32.1-29
- Avoid invalid window management in auto-move-windows
Resolves: #2089311
* Wed Jun 22 2022 Florian Müllner <fmuellner@redhat.com> - 3.32.1-28
- Improve window-list on touch - Improve window-list on touch
Resolves: #2099286 Resolves: #2050000
* Fri May 13 2022 Florian Müllner <fmuellner@redhat.com> - 40.7-2 * Tue Dec 14 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-27
- Require desktop-icons for classic session - Keep classification banners on login/lock screen
Resolves: #2047697 Resolves: #1751336
* Wed Apr 13 2022 Florian Müllner <fmuellner@redhat.com> - 40.7-1 * Fri Dec 10 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-26
- Update to 40.7
Resolves: #2066168
* Tue Feb 22 2022 Florian Müllner <fmuellner@redhat.com> - 40.6-1
- Update to 40.6
Resolves: #2056410
* Tue Dec 14 2021 Florian Müllner <fmuellner@redhat.com> - 40.5-4
- Allow classification banners on lock/login screen
Resolves: #2031186
* Tue Dec 14 2021 Florian Müllner <fmuellner@redhat.com> - 40.5-3
- Fix classification-banner preferences
Resolves: #2031186
* Tue Dec 14 2021 Florian Müllner <fmuellner@redhat.com> - 40.5-2
- Add classification-banner - Add classification-banner
Resolves: #2031186 Resolves: #1751336
* Mon Dec 13 2021 Florian Müllner <fmuellner@redhat.com> - 40.5-1 * Mon Nov 29 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-25
- Update to 40.5 - Fix desktop-icons warning
Resolves: #2031654 Resolves: #2026622
* Tue Nov 30 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-8 * Thu Nov 04 2021 Carlos Garnacho <cgarnach@redhat.com> - 3.32.1-24
- Fix on-screen keyboard when showing window-list - Fix gesture inhibitor extension with unfullscreen gesture
Resolves: #2019866 Resolves: #1988906
* Thu Nov 18 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-7 * Tue Nov 02 2021 Jonas Ådahl <jadahl@redhat.com> - 3.32.1-23
- Prevent gnome-shell from re-enabling inhibited gestures
Resolves: #2013196
* Mon Nov 08 2021 Jonas Ådahl <jadahl@redhat.com> - 40.4-6
- Fix stuck grab on desktop-icons - Fix stuck grab on desktop-icons
Resolves: #2019715 Resolves: #1984956
* Fri Oct 29 2021 Neal Gompa <ngompa@centosproject.org> - 40.4-5 * Tue Oct 19 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-22
- Backport GNOME Classic session for Wayland - Install missing prefs file
Resolves: #2015914 Related: #1995814
* Wed Oct 20 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-4 * Mon Oct 18 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-21
- Adjust gesture-inhibitor extension to GNOME 40 changes - Add dash-to-panel
Resolves: #2013196 Resolves: #1995814
* Wed Oct 20 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-3 * Thu Aug 26 2021 Ray Strode <rstrode@redhat.com> - 3.32.1-20
- Add gesture-inhibitor extension
Resolves: #2013196
* Mon Sep 27 2021 Ray Strode <rstrode@redhat.com> - 40.4-2
- Add extension for displaying heads up message - Add extension for displaying heads up message
Related: #2006985 Related: #1651378
* Mon Aug 23 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-1 * Wed Jun 02 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-19
- Update to 40.4
Resolves: #1995095
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 40.3-2
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Mon Jul 19 2021 Florian Müllner <fmuellner@redhat.com> - 40.3-1
- Update to 40.3
Resolves: #1983551
* Tue Jun 15 2021 Florian Müllner <fmuellner@redhat.com> - 40.2-1
- Update to 40.2
Resolves: #1971431
* Thu Jun 03 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-4
- Don't use status icon wm_class as top bar role - Don't use status icon wm_class as top bar role
Resolves: #1967259 Resolves: #1897932
* Wed May 26 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-3 * Tue Jun 01 2021 Carlos Garnacho <cgarnach@redhat.com> - 3.32.1-18
- Fix various issues in downstream patches - Add gesture-inhibitor extension
Resolves: #1932261 Resolves: #1854679
* Mon May 24 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-2 * Tue Jun 01 2021 Carlos Garnacho <cgarnach@redhat.com> - 3.32.1-17
- Rebase downstream patches - Handle touchscreens on Wayland in the desktop-icons extension
Resolves: #1932261 Resolves: #1924725
* Mon May 17 2021 Florian Müllner <fmuellner@redhat.com> - 40.1-1 * Mon May 31 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-16
- Update to 40.1 - Fix opening files with (wrongly) set executable bit
Resolves: #1951132 Resolves: #1813727
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 40.0-2 * Tue Apr 13 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-15
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Fix stuck window picker after screen lock
Resolves: #1905000
- Add tooltips to workspace previews
Resolves: #1894613
* Sat Mar 20 2021 Florian Müllner <fmuellner@redhat.com> - 40.0-1 * Wed Jan 27 2021 Carlos Garnacho <cgarnach@redhat.com> - 3.32.1-14
- Update to 40.0 - Use same logic than Nautilus for double click/tap in desktop-icons extension
Resolves: #1842229
* Mon Mar 15 2021 Florian Müllner <fmuellner@redhat.com> - 40.rc-1 * Wed Jan 27 2021 Florian Müllner <fmuellner@redhat.com> - 3.32.1-13
- Update to 40.rc - Update Japanese translation
Related: #1865718
* Wed Feb 24 2021 Florian Müllner <fmuellner@redhat.com> - 40.beta-1 * Sat Oct 24 2020 Florian Müllner <fmuellner@redhat.com> - 3.32.1-12
- Update to 40.beta - Adjust gettext locale in desktop-icons extension
Resolves: #1865718
* Thu Feb 18 2021 Kalev Lember <klember@redhat.com> - 40.0~alpha.1-6.20210212git9fa522c * Thu Apr 30 2020 Florian Müllner <fmuellner@redhat.com> - 3.32.1-11
- Fix typo in horizontal-workspaces obsoletes package name - Adjust dash-to-dock for classic backports
Resolves: #1805929
- Fix inconsistent state in window-list prefs dialog
Resolves: #1824362
* Thu Feb 18 2021 Kalev Lember <klember@redhat.com> - 40.0~alpha.1-5.20210212git9fa522c * Wed Jul 24 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-10
- Fix obsoletes version - Drop obsolete downstream style patch
- Keep classic notification styling
Related: #1731372
* Mon Feb 15 2021 Mohamed El Morabity <melmorabity@fedoraproject.org> - 40.0~alpha.1-4.20210212git9fa522c * Thu Jul 18 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-9
- Add Obsoletes for horizontal-workspaces extension to fix upgrades to Fedora 34 - Backport classic style improvements
(RHBZ #1928415) Resolves: #1726093
* Fri Feb 12 2021 Florian Müllner <fmuellner@redhat.com> - 40.0~alpha.1-3.20210212git9fa522c * Thu Jul 04 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-8
- Build snapshot of current upstream - Allow closing window picker with Escape
- Drop horizontal-workspaces subpackage Resolves: #1725854
(removed upstream, because horizontal workspaces are the default now)
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 40.0~alpha.1-2 * Sat Jun 29 2019 Florian Müllner <fmuellner@redhat.com> - 3.32-1-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - Add window thumbnails to workspace switcher
Resolves: #1723467
- Fix apps-menu not disabling itself entirely
Resolves: #1722047
* Fri Jan 15 2021 Florian Müllner <fmuellner@redhat.com> - 40.0~alpha.1-1 * Tue Jun 25 2019 Florian Müllner <fmuellner@redhat.com> - 3.32-1-6
- Update to 40.alpha.1 - Fix new classic mode issues:
- stray signal handler with overlay key
Resolves: #1722844
- improve DND support:
+ don't consider regular windows
(it doesn't work well, and GNOME 2 didn't support it either)
+ indicate that workspace thumbs are drop targets
Related: #1704360
* Wed Dec 02 2020 Florian Müllner <fmuellner@redhat.com> - 40.0~alpha-1 * Tue Jun 18 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-5
- Update to 40.alpha - Small refinements after design feedback:
- use default icon size in picker button to avoid blurriness
- use <super> shortcut to open window picker
Resolves: #1721195
* Mon Oct 05 2020 Florian Müllner <fmuellner@redhat.com> - 3.38.1-1 * Tue Jun 18 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-4
- Update to 3.38.1 - Don't add apps-menu logo when activities button is present
Resolves: #1721195
* Mon Sep 14 2020 Florian Müllner <fmuellner@redhat.com> - 3.38.0-1 * Wed Jun 12 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-3
- Update to 3.38.0 - Make classic mode more classic
Resolves: #1704360
* Sun Sep 06 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.92-1 * Fri May 31 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-2
- Update to 3.37.92 - Fix top-icons sizing issue
Resolves: #1715765
* Mon Aug 24 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.91-1 * Thu May 23 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-1
- Update to 3.37.91
* Wed Aug 19 2020 Kalev Lember <klember@redhat.com> - 3.37.90-2
- Rebuild
* Tue Aug 11 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.90-1
- Update to 3.37.90
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.37.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Tue Jul 07 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.3-1
- Update to 3.37.3
* Wed Jun 03 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.2-1
- Update to 3.37.2
* Thu Apr 30 2020 Florian Müllner <fmuellner@redhat.com> - 3.37.1-1
- Update to 3.37.1
* Tue Mar 31 2020 Florian Müllner <fmuellner@redhat.com> - 3.36.1-1
- Update to 3.36.1
* Sat Mar 07 2020 Florian Müllner <fmuellner@redhat.com> - 3.36.0-1
- Update to 3.36.0
* Sun Mar 01 2020 Florian Müllner <fmuellner@redhat.com> - 3.35.92-1
- Update to 3.35.92
* Tue Feb 18 2020 Florian Müllner <fmuellner@redhat.com> - 3.35.91-1
- Update to 3.35.91
* Thu Feb 06 2020 Florian Müllner <fmuellner@redhat.com> - 3.35.90-1
- Update to 3.35.90
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.35.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sun Jan 05 2020 Florian Müllner <fmuellner@redhat.com> - 3.35.3-1
- Update to 3.35.3
* Wed Dec 11 2019 Florian Müllner <fmuellner@redhat.com> - 3.35.2-1
- Update to 3.35.2
* Wed Oct 09 2019 Florian Müllner <fmuellner@redhat.com> - 3.34.1-1
- Update to 3.34.1
* Wed Sep 25 2019 Debarshi Ray <rishi@fedoraproject.org> - 3.34.0-2
- Unbreak the 'classic' GNOME session
* Mon Sep 09 2019 Florian Müllner <fmuellner@redhat.com> - 3.34.0-1
- Update to 3.34.0
* Wed Sep 04 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.92-1
- Update to 3.33.92
* Wed Aug 21 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.91-1
- Update to 3.33.91
* Sat Aug 10 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.90-1
- Update to 3.33.90
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.33.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sat Jul 20 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.4-1
- Update to 3.33.4
* Mon Jun 24 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.3-1
- Update to 3.33.3
* Wed May 22 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.2-1
- Update to 3.33.2
* Tue May 14 2019 Florian Müllner <fmuellner@redhat.com> - 3.33.1-1
- Update to 3.33.1
* Wed Apr 17 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.1-1
- Update to 3.32.1 - Update to 3.32.1
Resolves: #1713453
* Tue Mar 12 2019 Florian Müllner <fmuellner@redhat.com> - 3.32.0-1 * Mon Feb 11 2019 Florian Müllner <fmuellner@redhat.com> - 3.28.1-8
- Update to 3.32.0 - Update desktop-icons extension to 19.01
Resolves: #1666739
* Tue Mar 05 2019 Florian Müllner <fmuellner@redhat.com> - 3.31.92-1 * Fri Feb 08 2019 Florian Müllner <fmuellner@redhat.com> - 3.28.1-7
- Update to 3.31.92 - Re-add dropped downstream patches
Resolves: #1668885
* Thu Feb 21 2019 Florian Müllner <fmuellner@redhat.com> - 3.31.91-1 * Mon Jan 14 2019 Ray Strode <rstrode@redhat.com> - 3.28.1-6
- Update to 3.31.91 - Update desktop file names
Related: #1647713
* Thu Feb 07 2019 Florian Müllner <fmuellner@redhat.com> - 3.31.90-1 * Thu Dec 06 2018 Ray Strode <rstrode@redhat.com> - 3.28.1-5
- Update to 3.31.90 - Add requires on desktop-icons extension for classic session
Resolves: #1648863
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.31.2-3 * Tue Sep 04 2018 Ray Strode <rstrode@redhat.com> - 3.28.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - Add back corporate logo on the left of Activities
- Remove shadow remnants of app logo to the right of Activities
Resolves: #1620241
* Wed Nov 21 2018 Mohamed El Morabity <melmorabity@fedoraproject.org> - 3.31.2-2 * Wed Aug 22 2018 Ray Strode <rstrode@redhat.com> - 3.28.1-3
- Fix alternate-tab extension Obsoletes tag (RHBZ #1650519) - Add a wayland variant of gnome-classic
Also change up the names to Standard and Classic to match UX design
* Wed Nov 14 2018 Florian Müllner <fmuellner@redhat.com> - 3.31.2-1 Related: #1612915 1595825
- Update to 3.31.2
* Mon Oct 08 2018 Florian Müllner <fmuellner@redhat.com> - 3.30.1-1 * Tue Aug 21 2018 Carlos Soriano <csoriano@redhat.com> - 3.28.1-2
- Update to 3.30.1 - Add desktop icons extension
* Tue Sep 04 2018 Florian Müllner <fmuellner@redhat.com> - 3.30.0-1
- Update to 3.30.0
* Mon Aug 20 2018 Florian Müllner <fmuellner@redhat.com> - 3.29.91-1
- Update to 3.29.91
* Wed Aug 01 2018 Florian Müllner <fmuellner@redhat.com> - 3.29.90-1
- Update to 3.29.90
* Fri Jul 13 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.29.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Thu May 24 2018 Florian Müllner <fmuellner@redhat.com> - 3.29.2-1
- Update to 3.29.2
* Fri Apr 13 2018 Florian Müllner <fmuellner@redhat.com> - 3.28.1-1 * Fri Apr 13 2018 Florian Müllner <fmuellner@redhat.com> - 3.28.1-1
- Update to 3.28.1 - Update to 3.28.1