Compare commits
No commits in common. "c9-beta" and "c8" have entirely different histories.
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/gnome-shell-extensions-40.7.tar.xz
|
SOURCES/gnome-shell-extensions-3.32.1.tar.xz
|
||||||
|
@ -1 +1 @@
|
|||||||
a905a152407590d18e8dc14bb4133fbde0e03abb SOURCES/gnome-shell-extensions-40.7.tar.xz
|
51c1c16bcd0dc9125834b32d7c539c38fa9c4f52 SOURCES/gnome-shell-extensions-3.32.1.tar.xz
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
83
SOURCES/0001-Update-desktop-icons-gettext-domain.patch
Normal file
83
SOURCES/0001-Update-desktop-icons-gettext-domain.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
33
SOURCES/0001-apps-menu-Add-missing-chain-up.patch
Normal file
33
SOURCES/0001-apps-menu-Add-missing-chain-up.patch
Normal 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
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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});`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
208
SOURCES/0001-dashToDock-Handle-no-overview-case.patch
Normal file
208
SOURCES/0001-dashToDock-Handle-no-overview-case.patch
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
31
SOURCES/0001-fileItem-Just-destroy-menus.patch
Normal file
31
SOURCES/0001-fileItem-Just-destroy-menus.patch
Normal 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
|
||||||
|
|
147
SOURCES/0001-fileItem-Support-.desktop-files-of-type-Link.patch
Normal file
147
SOURCES/0001-fileItem-Support-.desktop-files-of-type-Link.patch
Normal 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(`Couldn’t 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(`Couldn’t 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
|
||||||
|
|
45
SOURCES/0001-general-launch-only-executable-files.patch
Normal file
45
SOURCES/0001-general-launch-only-executable-files.patch
Normal 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
|
||||||
|
|
@ -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>
|
||||||
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
1086
SOURCES/0001-panel-favorites-Update-to-upstream-version.patch
Normal file
1086
SOURCES/0001-panel-favorites-Update-to-upstream-version.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
176
SOURCES/add-workspace-tooltips.patch
Normal file
176
SOURCES/add-workspace-tooltips.patch
Normal 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
|
||||||
|
|
@ -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
|
|
||||||
|
|
267
SOURCES/desktop-icons-touch-support.patch
Normal file
267
SOURCES/desktop-icons-touch-support.patch
Normal 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
|
||||||
|
|
27
SOURCES/gnome-classic-wayland.desktop
Normal file
27
SOURCES/gnome-classic-wayland.desktop
Normal 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;
|
@ -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
|
|
||||||
|
|
27
SOURCES/gnome-classic.desktop
Normal file
27
SOURCES/gnome-classic.desktop
Normal 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;
|
3270
SOURCES/more-classic-classic-mode.patch
Normal file
3270
SOURCES/more-classic-classic-mode.patch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user