Add extension for displaying heads up message
Rediff a bunch of the patches since xuul seems to be less forgiving than local builds. Related: #2006985
This commit is contained in:
parent
7a1a89987f
commit
86d7aac034
@ -1,4 +1,4 @@
|
||||
From 4d57a258f50ab86506642fe8657e80077e9490fc Mon Sep 17 00:00:00 2001
|
||||
From 1982ab4218fa3a7ff622fff5af7c15c2e11351f7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Fri, 23 Feb 2018 16:56:46 +0100
|
||||
Subject: [PATCH] Include top-icons in classic session
|
||||
@ -8,7 +8,7 @@ Subject: [PATCH] Include top-icons in classic session
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index ada6b92..8f01fb3 100644
|
||||
index afc0133..78dee5b 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -31,6 +31,7 @@ classic_extensions = [
|
||||
@ -28,5 +28,5 @@ index ada6b92..8f01fb3 100644
|
||||
'user-theme'
|
||||
]
|
||||
--
|
||||
2.28.0
|
||||
2.32.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 813e1f83a42a0575ab3a5e38b30bcd1437d68652 Mon Sep 17 00:00:00 2001
|
||||
From fe13aa54e7c104f63689fcd15957ab16ffc0c3ef Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Thu, 17 Mar 2016 17:15:38 +0100
|
||||
Subject: [PATCH] apps-menu: Explicitly set label_actor
|
||||
@ -10,10 +10,10 @@ so set the label_actor explicitly as workaround.
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
|
||||
index 17285fd..0215c95 100644
|
||||
index 983a4e7..f8cef41 100644
|
||||
--- a/extensions/apps-menu/extension.js
|
||||
+++ b/extensions/apps-menu/extension.js
|
||||
@@ -112,7 +112,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
@@ -113,7 +113,9 @@ class CategoryMenuItem extends PopupMenu.PopupBaseMenuItem {
|
||||
else
|
||||
name = _('Favorites');
|
||||
|
||||
@ -25,5 +25,5 @@ index 17285fd..0215c95 100644
|
||||
this.connect('notify::active', this._onActiveChanged.bind(this));
|
||||
}
|
||||
--
|
||||
2.28.0
|
||||
2.32.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From a28e752ac10f9882d33a52189fc237d11d541fed Mon Sep 17 00:00:00 2001
|
||||
From 08e720c793baa0cb12ed99c4333c75df46e3a9ed Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 21 Jan 2014 16:48:17 -0500
|
||||
Subject: [PATCH] apps-menu: add logo icon to Applications menu
|
||||
@ -9,10 +9,10 @@ Brand requested it.
|
||||
1 file changed, 21 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/extensions/apps-menu/extension.js b/extensions/apps-menu/extension.js
|
||||
index 6376b524..1b1f01f1 100644
|
||||
index e36b0fe..983a4e7 100644
|
||||
--- a/extensions/apps-menu/extension.js
|
||||
+++ b/extensions/apps-menu/extension.js
|
||||
@@ -363,13 +363,24 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
@@ -364,13 +364,24 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
// role ATK_ROLE_MENU like other elements of the panel.
|
||||
this.accessible_role = Atk.Role.LABEL;
|
||||
|
||||
@ -38,7 +38,7 @@ index 6376b524..1b1f01f1 100644
|
||||
this.name = 'panelApplications';
|
||||
this.label_actor = this._label;
|
||||
|
||||
@@ -403,6 +414,14 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
@@ -404,6 +415,14 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
this._display();
|
||||
this._installedChangedId = appSys.connect('installed-changed',
|
||||
this._onTreeChanged.bind(this));
|
||||
@ -53,7 +53,7 @@ index 6376b524..1b1f01f1 100644
|
||||
}
|
||||
|
||||
_onTreeChanged() {
|
||||
@@ -428,6 +447,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
@@ -429,6 +448,7 @@ class ApplicationsButton extends PanelMenu.Button {
|
||||
|
||||
Main.overview.disconnect(this._showingId);
|
||||
Main.overview.disconnect(this._hidingId);
|
||||
@ -62,5 +62,5 @@ index 6376b524..1b1f01f1 100644
|
||||
this._tree.disconnect(this._treeChangedId);
|
||||
this._tree = null;
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 3e26797049c9cca7f40ffbe5432e1185ff6deb1e Mon Sep 17 00:00:00 2001
|
||||
From ba4208c00504439bad19de4680fac68210767798 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 27 Jan 2021 11:51:28 +0100
|
||||
Subject: [PATCH] desktop-icons: Update Japanese translation
|
||||
@ -25,5 +25,5 @@ index 8eb7725..ddf1eb7 100644
|
||||
#: schemas/org.gnome.shell.extensions.desktop-icons.gschema.xml:11
|
||||
#, fuzzy
|
||||
--
|
||||
2.28.0
|
||||
2.32.0
|
||||
|
||||
|
981
0001-heads-up-display-Add-extension-for-showing-persisten.patch
Normal file
981
0001-heads-up-display-Add-extension-for-showing-persisten.patch
Normal file
@ -0,0 +1,981 @@
|
||||
From 147d364d0c27c1ab76c6826f619381b0e9f9ed77 Mon Sep 17 00:00:00 2001
|
||||
From: Ray Strode <rstrode@redhat.com>
|
||||
Date: Tue, 24 Aug 2021 15:03:57 -0400
|
||||
Subject: [PATCH] heads-up-display: Add extension for showing persistent heads
|
||||
up display message
|
||||
|
||||
---
|
||||
extensions/heads-up-display/extension.js | 436 ++++++++++++++++++
|
||||
extensions/heads-up-display/headsUpMessage.js | 165 +++++++
|
||||
extensions/heads-up-display/meson.build | 8 +
|
||||
extensions/heads-up-display/metadata.json.in | 11 +
|
||||
...ll.extensions.heads-up-display.gschema.xml | 54 +++
|
||||
extensions/heads-up-display/prefs.js | 194 ++++++++
|
||||
extensions/heads-up-display/stylesheet.css | 32 ++
|
||||
meson.build | 1 +
|
||||
8 files changed, 901 insertions(+)
|
||||
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/meson.build
|
||||
create mode 100644 extensions/heads-up-display/metadata.json.in
|
||||
create mode 100644 extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml
|
||||
create mode 100644 extensions/heads-up-display/prefs.js
|
||||
create mode 100644 extensions/heads-up-display/stylesheet.css
|
||||
|
||||
diff --git a/extensions/heads-up-display/extension.js b/extensions/heads-up-display/extension.js
|
||||
new file mode 100644
|
||||
index 0000000..574fb09
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/extension.js
|
||||
@@ -0,0 +1,436 @@
|
||||
+/* exported init enable disable */
|
||||
+
|
||||
+const Signals = imports.signals;
|
||||
+
|
||||
+const {
|
||||
+ Atk, Clutter, Gio, GLib, GObject, Gtk, Meta, Shell, St,
|
||||
+} = imports.gi;
|
||||
+
|
||||
+const ExtensionUtils = imports.misc.extensionUtils;
|
||||
+const Me = ExtensionUtils.getCurrentExtension();
|
||||
+
|
||||
+const Main = imports.ui.main;
|
||||
+const Layout = imports.ui.layout;
|
||||
+const HeadsUpMessage = Me.imports.headsUpMessage;
|
||||
+
|
||||
+const _ = ExtensionUtils.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;
|
||||
+
|
||||
+ let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
||||
+ actorBox.init_rect(workArea.x, workArea.y + this.offset, workArea.width, workArea.height - this.offset);
|
||||
+ }
|
||||
+});
|
||||
+
|
||||
+class Extension {
|
||||
+ constructor() {
|
||||
+ ExtensionUtils.initTranslations();
|
||||
+ }
|
||||
+
|
||||
+ enable() {
|
||||
+ this._settings = ExtensionUtils.getSettings('org.gnome.shell.extensions.heads-up-display');
|
||||
+ this._settingsChangedId = this._settings.connect('changed', this._updateMessage.bind(this));
|
||||
+
|
||||
+ this._idleMonitor = Meta.IdleMonitor.get_core();
|
||||
+ this._messageInhibitedUntilIdle = false;
|
||||
+ this._oldMapWindow = Main.wm._mapWindow;
|
||||
+ Main.wm._mapWindow = this._mapWindow;
|
||||
+ this._windowManagerMapId = global.window_manager.connect('map', this._onWindowMap.bind(this));
|
||||
+
|
||||
+ if (Main.layoutManager._startingUp)
|
||||
+ this._startupCompleteId = Main.layoutManager.connect('startup-complete', this._onStartupComplete.bind(this));
|
||||
+ else
|
||||
+ this._onStartupComplete(this);
|
||||
+ }
|
||||
+
|
||||
+ disable() {
|
||||
+ this._dismissMessage();
|
||||
+
|
||||
+ this._stopWatchingForIdle();
|
||||
+
|
||||
+ if (this._sessionModeUpdatedId) {
|
||||
+ Main.sessionMode.disconnect(this._sessionModeUpdatedId);
|
||||
+ this._sessionModeUpdatedId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._overviewShowingId) {
|
||||
+ Main.overview.disconnect(this._overviewShowingId);
|
||||
+ this._overviewShowingId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._overviewHiddenId) {
|
||||
+ Main.overview.disconnect(this._overviewHiddenId);
|
||||
+ this._overviewHiddenId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._screenShieldVisibleId) {
|
||||
+ Main.screenShield._dialog._clock.disconnect(this._screenShieldVisibleId);
|
||||
+ this._screenShieldVisibleId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._panelConnectionId) {
|
||||
+ Main.layoutManager.panelBox.disconnect(this._panelConnectionId);
|
||||
+ this._panelConnectionId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._oldMapWindow) {
|
||||
+ Main.wm._mapWindow = this._oldMapWindow;
|
||||
+ this._oldMapWindow = null;
|
||||
+ }
|
||||
+
|
||||
+ if (this._windowManagerMapId) {
|
||||
+ global.window_manager.disconnect(this._windowManagerMapId);
|
||||
+ this._windowManagerMapId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._startupCompleteId) {
|
||||
+ Main.layoutManager.disconnect(this._startupCompleteId);
|
||||
+ this._startupCompleteId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._settingsChangedId) {
|
||||
+ this._settings.disconnect(this._settingsChangedId);
|
||||
+ this._settingsChangedId = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _onWindowMap(shellwm, actor) {
|
||||
+ let windowObject = actor.meta_window;
|
||||
+ let windowType = windowObject.get_window_type();
|
||||
+
|
||||
+ if (windowType != Meta.WindowType.NORMAL)
|
||||
+ return;
|
||||
+
|
||||
+ if (!this._message || !this._message.visible)
|
||||
+ return;
|
||||
+
|
||||
+ let messageRect = new Meta.Rectangle({ x: this._message.x, y: this._message.y, width: this._message.width, height: this._message.height });
|
||||
+ let windowRect = windowObject.get_frame_rect();
|
||||
+
|
||||
+ if (windowRect.intersect(messageRect)) {
|
||||
+ windowObject.move_frame(false, windowRect.x, this._message.y + this._message.height);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _onStartupComplete() {
|
||||
+ this._overviewShowingId = Main.overview.connect('showing', this._updateMessage.bind(this));
|
||||
+ this._overviewHiddenId = Main.overview.connect('hidden', this._updateMessage.bind(this));
|
||||
+ this._panelConnectionId = Main.layoutManager.panelBox.connect('notify::visible', this._updateMessage.bind(this));
|
||||
+ this._sessionModeUpdatedId = Main.sessionMode.connect('updated', this._onSessionModeUpdated.bind(this));
|
||||
+
|
||||
+ this._updateMessage();
|
||||
+ }
|
||||
+
|
||||
+ _onSessionModeUpdated() {
|
||||
+ if (!Main.sessionMode.hasWindows)
|
||||
+ this._messageInhibitedUntilIdle = false;
|
||||
+
|
||||
+ let 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();
|
||||
+ }
|
||||
+
|
||||
+ _stopWatchingForIdle() {
|
||||
+ if (this._idleWatchId) {
|
||||
+ this._idleMonitor.remove_watch(this._idleWatchId);
|
||||
+ this._idleWatchId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._idleTimeoutChangedId) {
|
||||
+ this._settings.disconnect(this._idleTimeoutChangedId);
|
||||
+ this._idleTimeoutChangedId = 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _onIdleTimeoutChanged() {
|
||||
+ this._stopWatchingForIdle();
|
||||
+ this._messageInhibitedUntilIdle = false;
|
||||
+ }
|
||||
+
|
||||
+ _onUserIdle() {
|
||||
+ this._messageInhibitedUntilIdle = false;
|
||||
+ this._updateMessage();
|
||||
+ }
|
||||
+
|
||||
+ _watchForIdle() {
|
||||
+ this._stopWatchingForIdle();
|
||||
+
|
||||
+ let 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() {
|
||||
+ if (this._messageInhibitedUntilIdle) {
|
||||
+ if (this._message)
|
||||
+ this._dismissMessage();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ this._stopWatchingForIdle();
|
||||
+
|
||||
+ if (Main.sessionMode.hasOverview && Main.overview.visible) {
|
||||
+ this._dismissMessage();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!Main.layoutManager.panelBox.visible) {
|
||||
+ this._dismissMessage();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let supportedModes = [];
|
||||
+
|
||||
+ if (this._settings.get_boolean('show-when-unlocked'))
|
||||
+ supportedModes.push('user');
|
||||
+
|
||||
+ if (this._settings.get_boolean('show-when-unlocking') ||
|
||||
+ this._settings.get_boolean('show-when-locked'))
|
||||
+ supportedModes.push('unlock-dialog');
|
||||
+
|
||||
+ if (this._settings.get_boolean('show-on-login-screen'))
|
||||
+ supportedModes.push('gdm');
|
||||
+
|
||||
+ if (!supportedModes.includes(Main.sessionMode.currentMode) &&
|
||||
+ !supportedModes.includes(Main.sessionMode.parentMode)) {
|
||||
+ this._dismissMessage();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (Main.sessionMode.currentMode === 'unlock-dialog') {
|
||||
+ let dialog = Main.screenShield._dialog;
|
||||
+ 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;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ let heading = this._settings.get_string('message-heading');
|
||||
+ let body = this._settings.get_string('message-body');
|
||||
+
|
||||
+ if (!heading && !body) {
|
||||
+ this._dismissMessage();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!this._message) {
|
||||
+ this._message = new HeadsUpMessage.HeadsUpMessage(heading, body);
|
||||
+
|
||||
+ this._message.connect('notify::allocation', this._adaptSessionForMessage.bind(this));
|
||||
+ this._message.connect('clicked', this._onMessageClicked.bind(this));
|
||||
+ }
|
||||
+
|
||||
+ this._message.reactive = true;
|
||||
+ this._message.track_hover = true;
|
||||
+
|
||||
+ this._message.setHeading(heading);
|
||||
+ this._message.setBody(body);
|
||||
+
|
||||
+ if (!Main.sessionMode.hasWindows) {
|
||||
+ this._message.track_hover = false;
|
||||
+ this._message.reactive = false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _onMessageClicked() {
|
||||
+ if (!Main.sessionMode.hasWindows)
|
||||
+ return;
|
||||
+
|
||||
+ this._watchForIdle();
|
||||
+ this._messageInhibitedUntilIdle = true;
|
||||
+ this._updateMessage();
|
||||
+ }
|
||||
+
|
||||
+ _dismissMessage() {
|
||||
+ if (!this._message) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ this._message.visible = false;
|
||||
+ this._message.destroy();
|
||||
+ this._message = null;
|
||||
+ this._resetMessageTray();
|
||||
+ this._resetLoginDialog();
|
||||
+ }
|
||||
+
|
||||
+ _resetMessageTray() {
|
||||
+ if (!Main.messageTray)
|
||||
+ return;
|
||||
+
|
||||
+ if (this._updateMessageTrayId) {
|
||||
+ global.stage.disconnect(this._updateMessageTrayId);
|
||||
+ this._updateMessageTrayId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._messageTrayConstraint) {
|
||||
+ Main.messageTray.remove_constraint(this._messageTrayConstraint);
|
||||
+ this._messageTrayConstraint = null;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _alignMessageTray() {
|
||||
+ if (!Main.messageTray)
|
||||
+ return;
|
||||
+
|
||||
+ if (!this._message || !this._message.visible) {
|
||||
+ this._resetMessageTray()
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (this._updateMessageTrayId)
|
||||
+ return;
|
||||
+
|
||||
+ this._updateMessageTrayId = global.stage.connect('before-update', () => {
|
||||
+ 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);
|
||||
+ }
|
||||
+
|
||||
+ let panelBottom = Main.layoutManager.panelBox.y + Main.layoutManager.panelBox.height;
|
||||
+ let messageBottom = this._message.y + this._message.height;
|
||||
+
|
||||
+ this._messageTrayConstraint.offset = messageBottom - panelBottom;
|
||||
+ global.stage.disconnect(this._updateMessageTrayId);
|
||||
+ this._updateMessageTrayId = 0;
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ _resetLoginDialog() {
|
||||
+ if (!Main.sessionMode.isGreeter)
|
||||
+ return;
|
||||
+
|
||||
+ if (!Main.screenShield || !Main.screenShield._dialog)
|
||||
+ return;
|
||||
+
|
||||
+ let dialog = Main.screenShield._dialog;
|
||||
+
|
||||
+ if (this._authPromptAllocatedId) {
|
||||
+ dialog.disconnect(this._authPromptAllocatedId);
|
||||
+ this._authPromptAllocatedId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._updateLoginDialogId) {
|
||||
+ global.stage.disconnect(this._updateLoginDialogId);
|
||||
+ this._updateLoginDialogId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._loginDialogConstraint) {
|
||||
+ dialog.remove_constraint(this._loginDialogConstraint);
|
||||
+ this._loginDialogConstraint = null;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ _adaptLoginDialogForMessage() {
|
||||
+ if (!Main.sessionMode.isGreeter)
|
||||
+ return;
|
||||
+
|
||||
+ if (!Main.screenShield || !Main.screenShield._dialog)
|
||||
+ return;
|
||||
+
|
||||
+ if (!this._message || !this._message.visible) {
|
||||
+ this._resetLoginDialog()
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let dialog = Main.screenShield._dialog;
|
||||
+
|
||||
+ if (this._updateLoginDialogId)
|
||||
+ return;
|
||||
+
|
||||
+ this._updateLoginDialogId = global.stage.connect('before-update', () => {
|
||||
+ let messageHeight = this._message.y + this._message.height;
|
||||
+ if (dialog._logoBin.visible)
|
||||
+ messageHeight -= dialog._logoBin.height;
|
||||
+
|
||||
+ if (!this._logindDialogConstraint) {
|
||||
+ this._loginDialogConstraint = new HeadsUpConstraint({ primary: true });
|
||||
+ dialog.add_constraint(this._loginDialogConstraint);
|
||||
+ }
|
||||
+
|
||||
+ this._loginDialogConstraint.offset = messageHeight;
|
||||
+
|
||||
+ global.stage.disconnect(this._updateLoginDialogId);
|
||||
+ this._updateLoginDialogId = 0;
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ _adaptSessionForMessage() {
|
||||
+ this._alignMessageTray();
|
||||
+
|
||||
+ if (Main.sessionMode.isGreeter) {
|
||||
+ this._adaptLoginDialogForMessage();
|
||||
+ if (!this._authPromptAllocatedId) {
|
||||
+ let dialog = Main.screenShield._dialog;
|
||||
+ this._authPromptAllocatedId = dialog._authPrompt.connect('notify::allocation', this._adaptLoginDialogForMessage.bind(this));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+function init() {
|
||||
+ return new Extension();
|
||||
+}
|
||||
diff --git a/extensions/heads-up-display/headsUpMessage.js b/extensions/heads-up-display/headsUpMessage.js
|
||||
new file mode 100644
|
||||
index 0000000..b1f3f65
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/headsUpMessage.js
|
||||
@@ -0,0 +1,165 @@
|
||||
+const { Atk, Clutter, GLib, GObject, Pango, St } = imports.gi;
|
||||
+const Layout = imports.ui.layout;
|
||||
+const Main = imports.ui.main;
|
||||
+const Signals = imports.signals;
|
||||
+
|
||||
+var HeadsUpMessageBodyLabel = GObject.registerClass({
|
||||
+}, class HeadsUpMessageBodyLabel extends St.Label {
|
||||
+ _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.line_wrap = true;
|
||||
+ }
|
||||
+
|
||||
+ vfunc_parent_set(oldParent) {
|
||||
+ this._getWorkAreaAndMeasureLineHeight();
|
||||
+ }
|
||||
+
|
||||
+ vfunc_get_preferred_width(forHeight) {
|
||||
+ let maxWidth = this._widthCoverage * this._workArea.width
|
||||
+
|
||||
+ let [labelMinimumWidth, labelNaturalWidth] = super.vfunc_get_preferred_width(forHeight);
|
||||
+
|
||||
+ labelMinimumWidth = Math.min(labelMinimumWidth, maxWidth);
|
||||
+ labelNaturalWidth = Math.min(labelNaturalWidth, maxWidth);
|
||||
+
|
||||
+ return [labelMinimumWidth, labelNaturalWidth];
|
||||
+ }
|
||||
+
|
||||
+ vfunc_get_preferred_height(forWidth) {
|
||||
+ let labelHeightUpperBound = this._heightCoverage * this._workArea.height;
|
||||
+ let numberOfLines = Math.floor(labelHeightUpperBound / this._lineHeight);
|
||||
+ this._numberOfLines = Math.max(numberOfLines, 1);
|
||||
+
|
||||
+ let maxHeight = this._lineHeight * this._numberOfLines;
|
||||
+
|
||||
+ let [labelMinimumHeight, labelNaturalHeight] = super.vfunc_get_preferred_height(forWidth);
|
||||
+
|
||||
+ labelMinimumHeight = Math.min(labelMinimumHeight, maxHeight);
|
||||
+ labelNaturalHeight = Math.min(labelNaturalHeight, maxHeight);
|
||||
+
|
||||
+ return [labelMinimumHeight, labelNaturalHeight];
|
||||
+ }
|
||||
+
|
||||
+ destroy() {
|
||||
+ if (this._workAreasChangedId)
|
||||
+ global.display.disconnect(this._workAreasChangedId);
|
||||
+
|
||||
+ super.destroy();
|
||||
+ }
|
||||
+});
|
||||
+
|
||||
+var HeadsUpMessage = GObject.registerClass({
|
||||
+}, class HeadsUpMessage extends St.Button {
|
||||
+ _init(heading, body) {
|
||||
+ super._init({
|
||||
+ style_class: 'message',
|
||||
+ accessible_role: Atk.Role.NOTIFICATION,
|
||||
+ can_focus: false,
|
||||
+ opacity: 0,
|
||||
+ });
|
||||
+
|
||||
+ Main.layoutManager.addChrome(this, { affectsInputRegion: true });
|
||||
+
|
||||
+ this.add_style_class_name('heads-up-display-message');
|
||||
+
|
||||
+ this._panelAllocationId = Main.layoutManager.panelBox.connect('notify::allocation', this._alignWithPanel.bind(this));
|
||||
+ this.connect('notify::allocation', this._alignWithPanel.bind(this));
|
||||
+
|
||||
+ let contentsBox = new St.BoxLayout({ style_class: 'heads-up-message-content',
|
||||
+ vertical: true,
|
||||
+ x_align: Clutter.ActorAlign.CENTER });
|
||||
+ this.add_actor(contentsBox);
|
||||
+
|
||||
+ this.headingLabel = new St.Label({ style_class: 'heads-up-message-heading',
|
||||
+ x_expand: true,
|
||||
+ x_align: Clutter.ActorAlign.CENTER });
|
||||
+ this.setHeading(heading);
|
||||
+ contentsBox.add_actor(this.headingLabel);
|
||||
+ this.contentsBox = contentsBox;
|
||||
+
|
||||
+ this.bodyLabel = new HeadsUpMessageBodyLabel({ style_class: 'heads-up-message-body',
|
||||
+ x_expand: true,
|
||||
+ y_expand: true });
|
||||
+ contentsBox.add_actor(this.bodyLabel);
|
||||
+
|
||||
+ this.setBody(body);
|
||||
+ this.bodyLabel.clutter_text.label = this.bodyLabel;
|
||||
+ }
|
||||
+
|
||||
+ vfunc_parent_set(oldParent) {
|
||||
+ this._alignWithPanel();
|
||||
+ }
|
||||
+
|
||||
+ _alignWithPanel() {
|
||||
+ if (this._afterUpdateId)
|
||||
+ return;
|
||||
+
|
||||
+ this._afterUpdateId = global.stage.connect('before-update', () => {
|
||||
+ let x = Main.panel.x;
|
||||
+ let y = Main.panel.y + Main.panel.height;
|
||||
+
|
||||
+ x += Main.panel.width / 2;
|
||||
+ x -= this.width / 2;
|
||||
+ x = Math.floor(x);
|
||||
+ this.set_position(x,y);
|
||||
+ this.opacity = 255;
|
||||
+
|
||||
+ global.stage.disconnect(this._afterUpdateId);
|
||||
+ this._afterUpdateId = 0;
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ setHeading(text) {
|
||||
+ if (text) {
|
||||
+ let heading = text ? text.replace(/\n/g, ' ') : '';
|
||||
+ this.headingLabel.text = heading;
|
||||
+ this.headingLabel.visible = true;
|
||||
+ } else {
|
||||
+ this.headingLabel.text = text;
|
||||
+ this.headingLabel.visible = false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ setBody(text) {
|
||||
+ this.bodyLabel.text = text;
|
||||
+ if (text) {
|
||||
+ this.bodyLabel.visible = true;
|
||||
+ } else {
|
||||
+ this.bodyLabel.visible = false;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ destroy() {
|
||||
+ if (this._panelAllocationId) {
|
||||
+ Main.layoutManager.panelBox.disconnect(this._panelAllocationId);
|
||||
+ this._panelAllocationId = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (this._afterUpdateId) {
|
||||
+ global.stage.disconnect(this._afterUpdateId);
|
||||
+ this._afterUpdateId = 0;
|
||||
+ }
|
||||
+
|
||||
+ super.destroy();
|
||||
+ }
|
||||
+});
|
||||
diff --git a/extensions/heads-up-display/meson.build b/extensions/heads-up-display/meson.build
|
||||
new file mode 100644
|
||||
index 0000000..40c3de0
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/meson.build
|
||||
@@ -0,0 +1,8 @@
|
||||
+extension_data += configure_file(
|
||||
+ input: metadata_name + '.in',
|
||||
+ output: metadata_name,
|
||||
+ configuration: metadata_conf
|
||||
+)
|
||||
+
|
||||
+extension_sources += files('headsUpMessage.js', 'prefs.js')
|
||||
+extension_schemas += files(metadata_conf.get('gschemaname') + '.gschema.xml')
|
||||
diff --git a/extensions/heads-up-display/metadata.json.in b/extensions/heads-up-display/metadata.json.in
|
||||
new file mode 100644
|
||||
index 0000000..e7ab71a
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/metadata.json.in
|
||||
@@ -0,0 +1,11 @@
|
||||
+{
|
||||
+"extension-id": "@extension_id@",
|
||||
+"uuid": "@uuid@",
|
||||
+"gettext-domain": "@gettext_domain@",
|
||||
+"name": "Heads-up Display Message",
|
||||
+"description": "Add a message to be displayed on screen always above all windows and chrome.",
|
||||
+"original-authors": [ "rstrode@redhat.com" ],
|
||||
+"shell-version": [ "@shell_current@" ],
|
||||
+"url": "@url@",
|
||||
+"session-modes": [ "gdm", "lock-screen", "unlock-dialog", "user" ]
|
||||
+}
|
||||
diff --git a/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml b/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml
|
||||
new file mode 100644
|
||||
index 0000000..ea1f377
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/org.gnome.shell.extensions.heads-up-display.gschema.xml
|
||||
@@ -0,0 +1,54 @@
|
||||
+<schemalist gettext-domain="gnome-shell-extensions">
|
||||
+ <schema id="org.gnome.shell.extensions.heads-up-display"
|
||||
+ path="/org/gnome/shell/extensions/heads-up-display/">
|
||||
+ <key name="idle-timeout" type="u">
|
||||
+ <default>30</default>
|
||||
+ <summary>Idle Timeout</summary>
|
||||
+ <description>
|
||||
+ Number of seconds until message is reshown after user goes idle.
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="message-heading" type="s">
|
||||
+ <default>""</default>
|
||||
+ <summary>Message to show at top of display</summary>
|
||||
+ <description>
|
||||
+ The top line of the heads up display message.
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="message-body" type="s">
|
||||
+ <default>""</default>
|
||||
+ <summary>Banner message</summary>
|
||||
+ <description>
|
||||
+ A message to always show at the top of the screen.
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="show-on-login-screen" type="b">
|
||||
+ <default>true</default>
|
||||
+ <summary>Show on login screen</summary>
|
||||
+ <description>
|
||||
+ Whether or not the message should display on the login screen
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="show-when-locked" type="b">
|
||||
+ <default>false</default>
|
||||
+ <summary>Show on screen shield</summary>
|
||||
+ <description>
|
||||
+ Whether or not the message should display when the screen is locked
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="show-when-unlocking" type="b">
|
||||
+ <default>false</default>
|
||||
+ <summary>Show on unlock screen</summary>
|
||||
+ <description>
|
||||
+ Whether or not the message should display on the unlock screen.
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ <key name="show-when-unlocked" type="b">
|
||||
+ <default>false</default>
|
||||
+ <summary>Show in user session</summary>
|
||||
+ <description>
|
||||
+ Whether or not the message should display when the screen is unlocked.
|
||||
+ </description>
|
||||
+ </key>
|
||||
+ </schema>
|
||||
+</schemalist>
|
||||
diff --git a/extensions/heads-up-display/prefs.js b/extensions/heads-up-display/prefs.js
|
||||
new file mode 100644
|
||||
index 0000000..42b0efe
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/prefs.js
|
||||
@@ -0,0 +1,194 @@
|
||||
+
|
||||
+/* Desktop Icons GNOME Shell extension
|
||||
+ *
|
||||
+ * Copyright (C) 2017 Carlos Soriano <csoriano@redhat.com>
|
||||
+ *
|
||||
+ * This program is free software: you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation, either version 3 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
+ */
|
||||
+
|
||||
+const { Gio, GObject, Gdk, Gtk } = imports.gi;
|
||||
+const ExtensionUtils = imports.misc.extensionUtils;
|
||||
+const Gettext = imports.gettext.domain('gnome-shell-extensions');
|
||||
+const _ = Gettext.gettext;
|
||||
+const N_ = e => e;
|
||||
+const cssData = `
|
||||
+ .no-border {
|
||||
+ border: none;
|
||||
+ }
|
||||
+
|
||||
+ .border {
|
||||
+ border: 1px solid;
|
||||
+ border-radius: 3px;
|
||||
+ border-color: #b6b6b3;
|
||||
+ box-shadow: inset 0 0 0 1px rgba(74, 144, 217, 0);
|
||||
+ background-color: white;
|
||||
+ }
|
||||
+
|
||||
+ .margins {
|
||||
+ padding-left: 8px;
|
||||
+ padding-right: 8px;
|
||||
+ padding-bottom: 8px;
|
||||
+ }
|
||||
+
|
||||
+ .contents {
|
||||
+ padding: 20px;
|
||||
+ }
|
||||
+
|
||||
+ .message-label {
|
||||
+ font-weight: bold;
|
||||
+ }
|
||||
+`;
|
||||
+
|
||||
+var settings;
|
||||
+
|
||||
+function init() {
|
||||
+ settings = ExtensionUtils.getSettings("org.gnome.shell.extensions.heads-up-display");
|
||||
+ let cssProvider = new Gtk.CssProvider();
|
||||
+ cssProvider.load_from_data(cssData);
|
||||
+
|
||||
+ let display = Gdk.Display.get_default();
|
||||
+ Gtk.StyleContext.add_provider_for_display(display, cssProvider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
+}
|
||||
+
|
||||
+function buildPrefsWidget() {
|
||||
+ ExtensionUtils.initTranslations();
|
||||
+
|
||||
+ let contents = new Gtk.Box({
|
||||
+ orientation: Gtk.Orientation.VERTICAL,
|
||||
+ spacing: 10,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+
|
||||
+ contents.append(buildSwitch('show-when-locked', _("Show message when screen is locked")));
|
||||
+ contents.append(buildSwitch('show-when-unlocking', _("Show message on unlock screen")));
|
||||
+ contents.append(buildSwitch('show-when-unlocked', _("Show message when screen is unlocked")));
|
||||
+ contents.append(buildSpinButton('idle-timeout', _("Seconds after user goes idle before reshowing message")));
|
||||
+ contents.get_style_context().add_class("contents");
|
||||
+
|
||||
+ let outerMessageBox = new Gtk.Box({
|
||||
+ orientation: Gtk.Orientation.VERTICAL,
|
||||
+ spacing: 5,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ contents.append(outerMessageBox);
|
||||
+
|
||||
+ let messageLabel = new Gtk.Label({
|
||||
+ label: 'Message',
|
||||
+ halign: Gtk.Align.START,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ messageLabel.get_style_context().add_class("message-label");
|
||||
+ outerMessageBox.append(messageLabel);
|
||||
+
|
||||
+ let innerMessageBox = new Gtk.Box({
|
||||
+ orientation: Gtk.Orientation.VERTICAL,
|
||||
+ spacing: 0,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ innerMessageBox.get_style_context().add_class("border");
|
||||
+ outerMessageBox.append(innerMessageBox);
|
||||
+
|
||||
+ innerMessageBox.append(buildEntry('message-heading', _("Message Heading")));
|
||||
+ innerMessageBox.append(buildTextView('message-body', _("Message Body")));
|
||||
+ return contents;
|
||||
+}
|
||||
+
|
||||
+function buildTextView(key, labelText) {
|
||||
+ let textView = new Gtk.TextView({
|
||||
+ accepts_tab: false,
|
||||
+ visible: true,
|
||||
+ wrap_mode: Gtk.WrapMode.WORD,
|
||||
+ });
|
||||
+
|
||||
+ settings.bind(key, textView.get_buffer(), 'text', Gio.SettingsBindFlags.DEFAULT);
|
||||
+
|
||||
+ let scrolledWindow = new Gtk.ScrolledWindow({
|
||||
+ hexpand: true,
|
||||
+ vexpand: true,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ let styleContext = scrolledWindow.get_style_context();
|
||||
+ styleContext.add_class("margins");
|
||||
+
|
||||
+ scrolledWindow.set_child(textView);
|
||||
+ return scrolledWindow;
|
||||
+}
|
||||
+function buildEntry(key, labelText) {
|
||||
+ let entry = new Gtk.Entry({
|
||||
+ placeholder_text: labelText,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ let styleContext = entry.get_style_context();
|
||||
+ styleContext.add_class("no-border");
|
||||
+ settings.bind(key, entry, 'text', Gio.SettingsBindFlags.DEFAULT);
|
||||
+
|
||||
+ entry.get_settings()['gtk-entry-select-on-focus'] = false;
|
||||
+
|
||||
+ return entry;
|
||||
+}
|
||||
+
|
||||
+function buildSpinButton(key, labelText) {
|
||||
+ let hbox = new Gtk.Box({
|
||||
+ orientation: Gtk.Orientation.HORIZONTAL,
|
||||
+ spacing: 10,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ let label = new Gtk.Label({
|
||||
+ hexpand: true,
|
||||
+ label: labelText,
|
||||
+ visible: true,
|
||||
+ xalign: 0,
|
||||
+ });
|
||||
+ let adjustment = new Gtk.Adjustment({
|
||||
+ value: 0,
|
||||
+ lower: 0,
|
||||
+ upper: 2147483647,
|
||||
+ step_increment: 1,
|
||||
+ page_increment: 60,
|
||||
+ page_size: 60,
|
||||
+ });
|
||||
+ let spinButton = new Gtk.SpinButton({
|
||||
+ adjustment: adjustment,
|
||||
+ climb_rate: 1.0,
|
||||
+ digits: 0,
|
||||
+ max_width_chars: 3,
|
||||
+ visible: true,
|
||||
+ width_chars: 3,
|
||||
+ });
|
||||
+ settings.bind(key, spinButton, 'value', Gio.SettingsBindFlags.DEFAULT);
|
||||
+ hbox.append(label);
|
||||
+ hbox.append(spinButton);
|
||||
+ return hbox;
|
||||
+}
|
||||
+
|
||||
+function buildSwitch(key, labelText) {
|
||||
+ let hbox = new Gtk.Box({
|
||||
+ orientation: Gtk.Orientation.HORIZONTAL,
|
||||
+ spacing: 10,
|
||||
+ visible: true,
|
||||
+ });
|
||||
+ let label = new Gtk.Label({
|
||||
+ hexpand: true,
|
||||
+ label: labelText,
|
||||
+ visible: true,
|
||||
+ xalign: 0,
|
||||
+ });
|
||||
+ let switcher = new Gtk.Switch({
|
||||
+ active: settings.get_boolean(key),
|
||||
+ });
|
||||
+ settings.bind(key, switcher, 'active', Gio.SettingsBindFlags.DEFAULT);
|
||||
+ hbox.append(label);
|
||||
+ hbox.append(switcher);
|
||||
+ return hbox;
|
||||
+}
|
||||
diff --git a/extensions/heads-up-display/stylesheet.css b/extensions/heads-up-display/stylesheet.css
|
||||
new file mode 100644
|
||||
index 0000000..9303446
|
||||
--- /dev/null
|
||||
+++ b/extensions/heads-up-display/stylesheet.css
|
||||
@@ -0,0 +1,32 @@
|
||||
+.heads-up-display-message {
|
||||
+ background-color: rgba(0.24, 0.24, 0.24, 0.80);
|
||||
+ border: 1px solid black;
|
||||
+ border-radius: 6px;
|
||||
+ color: #eeeeec;
|
||||
+ font-size: 11pt;
|
||||
+ margin-top: 0.5em;
|
||||
+ margin-bottom: 0.5em;
|
||||
+ padding: 0.9em;
|
||||
+}
|
||||
+
|
||||
+.heads-up-display-message:insensitive {
|
||||
+ background-color: rgba(0.24, 0.24, 0.24, 0.33);
|
||||
+}
|
||||
+
|
||||
+.heads-up-display-message:hover {
|
||||
+ background-color: rgba(0.24, 0.24, 0.24, 0.2);
|
||||
+ border: 1px solid rgba(0.0, 0.0, 0.0, 0.5);
|
||||
+ color: #4d4d4d;
|
||||
+ transition-duration: 250ms;
|
||||
+}
|
||||
+
|
||||
+.heads-up-message-heading {
|
||||
+ height: 1.75em;
|
||||
+ font-size: 1.25em;
|
||||
+ font-weight: bold;
|
||||
+ text-align: center;
|
||||
+}
|
||||
+
|
||||
+.heads-up-message-body {
|
||||
+ text-align: center;
|
||||
+}
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 78dee5b..ad5949b 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -38,6 +38,7 @@ classic_extensions = [
|
||||
default_extensions = classic_extensions
|
||||
default_extensions += [
|
||||
'drive-menu',
|
||||
+ 'heads-up-display',
|
||||
'screenshot-window-sizer',
|
||||
'windowsNavigator',
|
||||
'workspace-indicator'
|
||||
--
|
||||
2.32.0
|
||||
|
@ -1,4 +1,4 @@
|
||||
From ce48dc2f4fba6a7084540df256cb5b3eb0da43da Mon Sep 17 00:00:00 2001
|
||||
From f0e4618bf0752aaf094d78b4c810ebda817ccaad Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 2 Jun 2021 17:32:21 +0200
|
||||
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(-)
|
||||
|
||||
diff --git a/extensions/top-icons/extension.js b/extensions/top-icons/extension.js
|
||||
index 79e2f423..3dfba469 100644
|
||||
index 79e2f42..3dfba46 100644
|
||||
--- a/extensions/top-icons/extension.js
|
||||
+++ b/extensions/top-icons/extension.js
|
||||
@@ -63,7 +63,7 @@ class SysTray {
|
||||
@ -23,5 +23,5 @@ index 79e2f423..3dfba469 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
||||
From 8f9a1adcb9b8d62f537d53562c8324175310d577 Mon Sep 17 00:00:00 2001
|
||||
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
|
||||
@ -150,10 +150,10 @@ index 61b4ce8..4fd31c3 100644
|
||||
text-shadow: 1px 1px black;
|
||||
color: white;
|
||||
--
|
||||
2.28.0
|
||||
2.32.0
|
||||
|
||||
|
||||
From 7f31b7697d3bacf53d5d37cb34642d82ea109a52 Mon Sep 17 00:00:00 2001
|
||||
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
|
||||
@ -227,5 +227,5 @@ index 890bcdb..c390aa8 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.28.0
|
||||
2.32.0
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
Name: gnome-shell-extensions
|
||||
Version: 40.4
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
Summary: Modify and extend GNOME Shell functionality and behavior
|
||||
|
||||
License: GPLv2+
|
||||
@ -29,6 +29,7 @@ Patch006: 0001-Include-top-icons-in-classic-session.patch
|
||||
Patch007: 0001-desktop-icons-Update-Japanese-translation.patch
|
||||
Patch008: desktop-icons-40-fixes.patch
|
||||
Patch009: 0001-top-icons-Don-t-use-wm_class-as-role.patch
|
||||
Patch010: 0001-heads-up-display-Add-extension-for-showing-persisten.patch
|
||||
|
||||
%description
|
||||
GNOME Shell Extensions is a collection of extensions providing additional and
|
||||
@ -41,6 +42,7 @@ Enabled extensions:
|
||||
* desktop-icons
|
||||
* drive-menu
|
||||
* launch-new-instance
|
||||
* heads-up-display
|
||||
* native-window-placement
|
||||
* panel-favorites
|
||||
* places-menu
|
||||
@ -139,6 +141,17 @@ This GNOME Shell extension modifies the behavior of clicking in the dash and app
|
||||
launcher to always launch a new application instance.
|
||||
|
||||
|
||||
%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
|
||||
Summary: Native window placement for GNOME Shell
|
||||
License: GPLv2+
|
||||
@ -299,6 +312,11 @@ workspaces.
|
||||
%{_datadir}/gnome-shell/extensions/launch-new-instance*/
|
||||
|
||||
|
||||
%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
|
||||
%{_datadir}/glib-2.0/schemas/org.gnome.shell.extensions.native-window-placement.gschema.xml
|
||||
%{_datadir}/gnome-shell/extensions/native-window-placement*/
|
||||
@ -349,6 +367,10 @@ workspaces.
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Sep 27 2021 Ray Strode <rstrode@redhat.com> - 40.4-2
|
||||
- Add extension for displaying heads up message
|
||||
Related: #2006985
|
||||
|
||||
* Mon Aug 23 2021 Florian Müllner <fmuellner@redhat.com> - 40.4-1
|
||||
- Update to 40.4
|
||||
Resolves: #1995095
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 3178a99e48167ad31b1e52e9afc2041bfee34593 Mon Sep 17 00:00:00 2001
|
||||
From 2e00e631c7def6d58bdb1eb0fa3254ae82a37574 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 17 May 2017 19:13:50 +0200
|
||||
Subject: [PATCH 1/6] extensions: Resurrect systemMonitor extension
|
||||
@ -26,7 +26,7 @@ This reverts commit c9a6421f362cd156cf731289eadc11f44f6970ac.
|
||||
|
||||
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
|
||||
new file mode 100644
|
||||
index 00000000..7b09df01
|
||||
index 0000000..7b09df0
|
||||
--- /dev/null
|
||||
+++ b/extensions/systemMonitor/extension.js
|
||||
@@ -0,0 +1,376 @@
|
||||
@ -408,7 +408,7 @@ index 00000000..7b09df01
|
||||
+}
|
||||
diff --git a/extensions/systemMonitor/meson.build b/extensions/systemMonitor/meson.build
|
||||
new file mode 100644
|
||||
index 00000000..48504f63
|
||||
index 0000000..48504f6
|
||||
--- /dev/null
|
||||
+++ b/extensions/systemMonitor/meson.build
|
||||
@@ -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
|
||||
new file mode 100644
|
||||
index 00000000..fa750074
|
||||
index 0000000..fa75007
|
||||
--- /dev/null
|
||||
+++ b/extensions/systemMonitor/metadata.json.in
|
||||
@@ -0,0 +1,11 @@
|
||||
@ -436,7 +436,7 @@ index 00000000..fa750074
|
||||
+}
|
||||
diff --git a/extensions/systemMonitor/stylesheet.css b/extensions/systemMonitor/stylesheet.css
|
||||
new file mode 100644
|
||||
index 00000000..13f95ec7
|
||||
index 0000000..13f95ec
|
||||
--- /dev/null
|
||||
+++ b/extensions/systemMonitor/stylesheet.css
|
||||
@@ -0,0 +1,35 @@
|
||||
@ -476,7 +476,7 @@ index 00000000..13f95ec7
|
||||
+ font-weight: bold;
|
||||
+}
|
||||
diff --git a/meson.build b/meson.build
|
||||
index b95dfc30..ada6b921 100644
|
||||
index 6a2fdf0..afc0133 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -48,6 +48,7 @@ all_extensions += [
|
||||
@ -488,10 +488,10 @@ index b95dfc30..ada6b921 100644
|
||||
'updates-dialog',
|
||||
'user-theme'
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
||||
From d93f5edfc243dc065db74535de3db1222b483865 Mon Sep 17 00:00:00 2001
|
||||
From 59927edac1f40239d7926f0285249c933ea42caf Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Fri, 17 May 2019 22:55:48 +0000
|
||||
Subject: [PATCH 2/6] systemMonitor: Modernise code
|
||||
@ -507,7 +507,7 @@ Subject: [PATCH 2/6] systemMonitor: Modernise code
|
||||
1 file changed, 212 insertions(+), 210 deletions(-)
|
||||
|
||||
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
|
||||
index 7b09df01..f7c6a4a9 100644
|
||||
index 7b09df0..f7c6a4a 100644
|
||||
--- a/extensions/systemMonitor/extension.js
|
||||
+++ b/extensions/systemMonitor/extension.js
|
||||
@@ -1,56 +1,57 @@
|
||||
@ -1081,10 +1081,10 @@ index 7b09df01..f7c6a4a9 100644
|
||||
function init() {
|
||||
return new Extension();
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
||||
From 84d881157d59a8701f351f69698edfbaf806898e Mon Sep 17 00:00:00 2001
|
||||
From 71e275ba45b09c5f8c6ca5445a459196dc65474b 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
|
||||
@ -1096,7 +1096,7 @@ clash when we subclass St.Button.
|
||||
1 file changed, 18 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
|
||||
index f7c6a4a9..bde25a1d 100644
|
||||
index f7c6a4a..bde25a1 100644
|
||||
--- a/extensions/systemMonitor/extension.js
|
||||
+++ b/extensions/systemMonitor/extension.js
|
||||
@@ -19,6 +19,7 @@ const ITEM_HOVER_TIMEOUT = 300;
|
||||
@ -1187,10 +1187,10 @@ index f7c6a4a9..bde25a1d 100644
|
||||
|
||||
_initValues() {
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
||||
From fd961a7f6766e4c48d492bb4e37ee8bc250eb228 Mon Sep 17 00:00:00 2001
|
||||
From b310c3a5b532a18af38390021daa332961e404ef Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Wed, 17 May 2017 19:31:58 +0200
|
||||
Subject: [PATCH 4/6] systemMonitor: Move indicators to calendar
|
||||
@ -1206,7 +1206,7 @@ it up quickly).
|
||||
2 files changed, 50 insertions(+), 70 deletions(-)
|
||||
|
||||
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
|
||||
index bde25a1d..1fd01ab4 100644
|
||||
index bde25a1..1fd01ab 100644
|
||||
--- a/extensions/systemMonitor/extension.js
|
||||
+++ b/extensions/systemMonitor/extension.js
|
||||
@@ -2,10 +2,11 @@
|
||||
@ -1418,7 +1418,7 @@ index bde25a1d..1fd01ab4 100644
|
||||
return;
|
||||
|
||||
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
|
||||
+++ b/extensions/systemMonitor/stylesheet.css
|
||||
@@ -1,17 +1,4 @@
|
||||
@ -1448,10 +1448,10 @@ index 13f95ec7..978ac12a 100644
|
||||
|
||||
.extension-systemMonitor-indicator-label {
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
||||
From 5796b0714f03cb1faa5cd70d50b46b57f67c4eea Mon Sep 17 00:00:00 2001
|
||||
From 432f525336a5da1a545546ab40f882f44ac42bb7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Thu, 18 May 2017 16:20:07 +0200
|
||||
Subject: [PATCH 5/6] systemMonitor: Handle clicks on section title
|
||||
@ -1467,7 +1467,7 @@ Fixes: https://gitlab.gnome.org/GNOME/gnome-shell-extensions3
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/extensions/systemMonitor/extension.js b/extensions/systemMonitor/extension.js
|
||||
index 1fd01ab4..57bdb51f 100644
|
||||
index 1fd01ab..57bdb51 100644
|
||||
--- a/extensions/systemMonitor/extension.js
|
||||
+++ b/extensions/systemMonitor/extension.js
|
||||
@@ -300,6 +300,22 @@ class MemoryIndicator extends Indicator {
|
||||
@ -1503,10 +1503,10 @@ index 1fd01ab4..57bdb51f 100644
|
||||
for (let i = 0; i < INDICATORS.length; i++) {
|
||||
let indicator = new INDICATORS[i]();
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
||||
From e762e2dd17cc62b9258e44458157997a07bbdbfa Mon Sep 17 00:00:00 2001
|
||||
From 657155f8f37a8d0ddf7c39dbff954d87202c681e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
|
||||
Date: Thu, 18 May 2017 18:00:17 +0200
|
||||
Subject: [PATCH 6/6] systemMonitor: Provide classic styling
|
||||
@ -1524,7 +1524,7 @@ Fixes: #4
|
||||
|
||||
diff --git a/extensions/systemMonitor/classic.css b/extensions/systemMonitor/classic.css
|
||||
new file mode 100644
|
||||
index 00000000..946863dc
|
||||
index 0000000..946863d
|
||||
--- /dev/null
|
||||
+++ b/extensions/systemMonitor/classic.css
|
||||
@@ -0,0 +1,6 @@
|
||||
@ -1535,7 +1535,7 @@ index 00000000..946863dc
|
||||
+ border: 1px solid #a1a1a1;
|
||||
+}
|
||||
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
|
||||
+++ b/extensions/systemMonitor/meson.build
|
||||
@@ -3,3 +3,7 @@ extension_data += configure_file(
|
||||
@ -1547,5 +1547,5 @@ index 48504f63..b6548b14 100644
|
||||
+ extension_data += files('classic.css')
|
||||
+endif
|
||||
--
|
||||
2.31.1
|
||||
2.32.0
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user