import CS gnome-shell-47.4-2.el10

This commit is contained in:
Andrew Lukoshko 2025-05-20 15:18:58 +00:00
commit 244a9e592d
21 changed files with 3909 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
gnome-shell-47.4.tar.xz

View File

@ -0,0 +1,28 @@
From 55c1dfed04084e9dbaf034263172bc745f905718 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 20 May 2015 16:44:00 +0200
Subject: [PATCH] app: Fall back to window title instead of WM_CLASS
It's a bad fallback as it's clearly window-specific (rather than
app-specific), but it likely looks prettier when we fail to associate
a .desktop file ...
---
src/shell-app.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shell-app.c b/src/shell-app.c
index 04d0ab508b..4a55daf809 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -247,7 +247,7 @@ shell_app_get_name (ShellApp *app)
const char *name = NULL;
if (window)
- name = meta_window_get_wm_class (window);
+ name = meta_window_get_title (window);
if (!name)
name = C_("program", "Unknown");
return name;
--
2.45.2

View File

@ -0,0 +1,56 @@
From 170ccbd3d237bf980f46ae87e3da8238df9f8a3c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 16 Apr 2024 20:49:40 +0200
Subject: [PATCH] data: Update generated stylesheets
---
data/theme/gnome-shell-dark.css | 3 +++
data/theme/gnome-shell-high-contrast.css | 3 +++
data/theme/gnome-shell-light.css | 3 +++
3 files changed, 9 insertions(+)
diff --git a/data/theme/gnome-shell-dark.css b/data/theme/gnome-shell-dark.css
index 339adf7e7b..5dd7d29a3a 100644
--- a/data/theme/gnome-shell-dark.css
+++ b/data/theme/gnome-shell-dark.css
@@ -1720,6 +1720,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #ffffff; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css
index 4bb622aa26..8f94fa4101 100644
--- a/data/theme/gnome-shell-high-contrast.css
+++ b/data/theme/gnome-shell-high-contrast.css
@@ -1897,6 +1897,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #ffffff; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
diff --git a/data/theme/gnome-shell-light.css b/data/theme/gnome-shell-light.css
index 82a5b0bc18..128aa93dea 100644
--- a/data/theme/gnome-shell-light.css
+++ b/data/theme/gnome-shell-light.css
@@ -1720,6 +1720,9 @@ StScrollBar {
min-width: 0.5455em;
min-height: 0.5455em;
background-color: #282828; }
+ #panel .panel-button#panelActivities .activities-logo {
+ icon-size: 1.36375em;
+ padding: 0 6px; }
#panel .panel-button.screen-recording-indicator StBoxLayout, #panel .panel-button.screen-sharing-indicator StBoxLayout {
spacing: 0.409em; }
#panel .panel-button.screen-recording-indicator StIcon, #panel .panel-button.screen-sharing-indicator StIcon {
--
2.45.2

View File

@ -0,0 +1,37 @@
From 7e82f0a73a1d1576e94b17e21d07fd3978ba7c33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Mon, 1 Feb 2021 18:26:00 +0100
Subject: [PATCH] extensionDownloader: Refuse to override system extensions
The website allows to "update" system extensions by installing the
upstream version into the user's home directory.
Prevent that by refusing to download and install extensions that are
already installed system-wide.
---
js/ui/extensionDownloader.js | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/js/ui/extensionDownloader.js b/js/ui/extensionDownloader.js
index 0366c5dfa8..5b27543aa6 100644
--- a/js/ui/extensionDownloader.js
+++ b/js/ui/extensionDownloader.js
@@ -39,6 +39,15 @@ export async function installExtension(uuid, invocation) {
return;
}
+ const oldExt = Main.extensionManager.lookup(uuid);
+ if (oldExt && oldExt.type === ExtensionUtils.ExtensionType.SYSTEM) {
+ log('extensionDownloader: Trying to replace system extension %s'.format(uuid));
+ invocation.return_error_literal(
+ ExtensionErrors, ExtensionError.NOT_ALLOWED,
+ 'System extensions cannot be replaced');
+ return;
+ }
+
const params = {
uuid,
shell_version: Config.PACKAGE_VERSION,
--
2.45.2

View File

@ -0,0 +1,67 @@
From ff73f820b1398e5d60b8984b0003db46ad70b8ec Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
Date: Wed, 28 Apr 2021 16:50:03 +0200
Subject: [PATCH] gdm: Work around failing fingerprint auth
On Fedora we have the problem that fingerprint auth fails immediately if
the PAM configuration has not been updated and no prints are enrolled.
So, consider a verification failure within one second to be a service
failure instead.
---
js/gdm/util.js | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 97df6d687e..371953cb25 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -109,6 +109,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this._defaultService = null;
this._preemptingService = null;
this._fingerprintReaderType = FingerprintReaderType.NONE;
+ this._fprintStartTime = -1;
this._messageQueue = [];
this._messageQueueTimeoutId = 0;
@@ -669,6 +670,10 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this._hold.acquire();
try {
this._activeServices.add(serviceName);
+
+ if (serviceName == FINGERPRINT_SERVICE_NAME)
+ this._fprintStartTime = GLib.get_monotonic_time();
+
if (this._userName) {
await this._userVerifier.call_begin_verification_for_user(
serviceName, this._userName, this._cancellable);
@@ -763,6 +768,7 @@ export class ShellUserVerifier extends Signals.EventEmitter {
const cancellable = this._cancellable;
this._fingerprintFailedId = GLib.timeout_add(GLib.PRIORITY_DEFAULT,
FINGERPRINT_ERROR_TIMEOUT_WAIT, () => {
+ log("Generating _verificationFailed!");
this._fingerprintFailedId = 0;
if (!cancellable.is_cancelled())
this._verificationFailed(serviceName, false);
@@ -829,6 +835,18 @@ export class ShellUserVerifier extends Signals.EventEmitter {
if (serviceName === FINGERPRINT_SERVICE_NAME) {
if (this._fingerprintFailedId)
GLib.source_remove(this._fingerprintFailedId);
+
+ // On Fedora we have the problem that fingerprint auth fails
+ // immediately if the PAM configuration has not been updated and no
+ // prints are enrolled.
+ // So, consider a verification failure within one second to be a service
+ // failure instead.
+ if (this._fprintStartTime > GLib.get_monotonic_time() - GLib.USEC_PER_SEC) {
+ log("Fingerprint service failed almost immediately, considering it unavailable.");
+ log("Please fix your configuration by running: authselect select --force sssd with-fingerprint with-silent-lastlog");
+ this._onServiceUnavailable(this._client, serviceName, null);
+ return;
+ }
}
// For Not Listed / enterprise logins, immediately reset
--
2.43.2

View File

@ -0,0 +1,38 @@
From 2060b040f91c3751861a1c1b985c5fe8cc891d58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 29 Oct 2020 18:21:06 +0100
Subject: [PATCH] main: Dump stack on segfaults by default
---
src/main.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/main.c b/src/main.c
index 4be47258eb..b324b6b96a 100644
--- a/src/main.c
+++ b/src/main.c
@@ -47,6 +47,7 @@ static char *script_path = NULL;
#define DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER 1
#define DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER 4
+#define DEFAULT_SHELL_DEBUG SHELL_DEBUG_BACKTRACE_SEGFAULTS
enum {
SHELL_DEBUG_BACKTRACE_WARNINGS = 1,
SHELL_DEBUG_BACKTRACE_SEGFAULTS = 2,
@@ -381,8 +382,11 @@ shell_init_debug (const char *debug_env)
{ "backtrace-segfaults", SHELL_DEBUG_BACKTRACE_SEGFAULTS },
};
- _shell_debug = g_parse_debug_string (debug_env, keys,
- G_N_ELEMENTS (keys));
+ if (debug_env)
+ _shell_debug = g_parse_debug_string (debug_env, keys,
+ G_N_ELEMENTS (keys));
+ else
+ _shell_debug = DEFAULT_SHELL_DEBUG;
}
static GLogWriterOutput
--
2.45.2

View File

@ -0,0 +1,51 @@
From c0b2f60108e7b8cffa10306ef54c620fe71a6735 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 22 May 2024 18:42:06 +0200
Subject: [PATCH] panel: Use branding in activities button
Replace the upstream workspace dots with a red hat.
---
data/theme/gnome-shell-sass/widgets/_panel.scss | 5 +++++
js/ui/panel.js | 10 +++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/data/theme/gnome-shell-sass/widgets/_panel.scss b/data/theme/gnome-shell-sass/widgets/_panel.scss
index 2a29eee9da..02f8232de6 100644
--- a/data/theme/gnome-shell-sass/widgets/_panel.scss
+++ b/data/theme/gnome-shell-sass/widgets/_panel.scss
@@ -58,6 +58,11 @@ $panel_transition_duration: 250ms; // same as the overview transition duration
min-height: $scalable_icon_size * 0.5;
background-color: $panel_fg_color;
}
+
+ & .activities-logo {
+ icon-size: $scalable_icon_size * 1.25;
+ padding: 0 $base_padding;
+ }
}
// screen activity indicators
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 62c8ebb31a..1d11cc1b5f 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -425,7 +425,15 @@ class ActivitiesButton extends PanelMenu.Button {
accessible_name: _('Activities'),
});
- this.add_child(new WorkspaceIndicators());
+ if (GLib.get_os_info('ID') === 'rhel') {
+ const logoIcon = new St.Icon({
+ icon_name: 'fedora-logo-icon',
+ style_class: 'activities-logo',
+ });
+ this.add_child(logoIcon);
+ } else {
+ this.add_child(new WorkspaceIndicators());
+ }
Main.overview.connectObject('showing',
() => this.add_style_pseudo_class('checked'),
--
2.45.2

View File

@ -0,0 +1,33 @@
From 17e77f1729b8542c46d5020d55edce4daf7ab24a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Fri, 3 Jul 2015 13:54:36 -0400
Subject: [PATCH] screenShield: unblank when inserting smartcard
If a user inserts the smartcard when the screen is locked/blanked
we should ask them their pin right away.
At the moment they have to wiggle the mouse or do some other
action to get the screen to unblank.
---
js/ui/screenShield.js | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/js/ui/screenShield.js b/js/ui/screenShield.js
index d2236fb900..b62440dff6 100644
--- a/js/ui/screenShield.js
+++ b/js/ui/screenShield.js
@@ -94,8 +94,10 @@ export class ScreenShield extends Signals.EventEmitter {
this._smartcardManager = SmartcardManager.getSmartcardManager();
this._smartcardManager.connect('smartcard-inserted',
(manager, token) => {
- if (this._isLocked && token.UsedToLogin)
+ if (this._isLocked && token.UsedToLogin) {
+ this._wakeUpScreen();
this._activateDialog();
+ }
});
this._credentialManagers = {};
--
2.45.2

View File

@ -0,0 +1,66 @@
From 0bd4ecbbcc47a8574edae46b56695572a846a1e2 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 15 Jan 2019 12:54:32 -0500
Subject: [PATCH] st-texture-cache: purge on resume
With the proprietary nvidia driver, textures get garbled on suspend,
so the texture cache needs to evict all textures in that situation.
---
js/ui/main.js | 6 +++++-
src/st/st-texture-cache.c | 10 ++++++++++
src/st/st-texture-cache.h | 1 +
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/js/ui/main.js b/js/ui/main.js
index 73980edb88..5c17258177 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -263,7 +263,11 @@ async function _initializeUI() {
return true;
});
- global.display.connect('gl-video-memory-purged', loadTheme);
+ global.display.connect('gl-video-memory-purged', () => {
+ let cache = St.TextureCache.get_default();
+ cache.clear();
+ loadTheme();
+ });
global.context.connect('notify::unsafe-mode', () => {
if (!global.context.unsafe_mode)
diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c
index e03ec44619..ac19e98cf5 100644
--- a/src/st/st-texture-cache.c
+++ b/src/st/st-texture-cache.c
@@ -131,6 +131,16 @@ st_texture_cache_class_init (StTextureCacheClass *klass)
G_TYPE_NONE, 1, G_TYPE_FILE);
}
+/* Evicts all cached textures */
+void
+st_texture_cache_clear (StTextureCache *cache)
+{
+ g_return_if_fail (ST_IS_TEXTURE_CACHE (cache));
+
+ g_hash_table_remove_all (cache->keyed_cache);
+ g_signal_emit (cache, signals[ICON_THEME_CHANGED], 0);
+}
+
/* Evicts all cached textures for named icons */
static void
st_texture_cache_evict_icons (StTextureCache *cache)
diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h
index 7ca08ab34a..f600938047 100644
--- a/src/st/st-texture-cache.h
+++ b/src/st/st-texture-cache.h
@@ -42,6 +42,7 @@ typedef enum {
} StTextureCachePolicy;
StTextureCache* st_texture_cache_get_default (void);
+void st_texture_cache_clear (StTextureCache *cache);
ClutterActor *
st_texture_cache_load_sliced_image (StTextureCache *cache,
--
2.47.1

View File

@ -0,0 +1,463 @@
From 2c43d26950c709020ba78fdc2742adc4fd2841e5 Mon Sep 17 00:00:00 2001
From: Jakub Steiner <jimmac@gmail.com>
Date: Tue, 20 Aug 2024 09:30:36 +0200
Subject: [PATCH] theme: Welcome Illustration
- RHEL10 branded welcome illustration for Tour.
---
data/theme/gnome-shell-start.svg | 351 ++++++++++---------------------
1 file changed, 106 insertions(+), 245 deletions(-)
diff --git a/data/theme/gnome-shell-start.svg b/data/theme/gnome-shell-start.svg
index af139cf0d..609880493 100644
--- a/data/theme/gnome-shell-start.svg
+++ b/data/theme/gnome-shell-start.svg
@@ -1,67 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
+ inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
id="svg8"
version="1.1"
viewBox="0 0 600 400"
height="400"
width="600"
- sodipodi:docname="gnome-shell-start.svg">
- <defs
- id="defs2">
- <linearGradient
- id="a">
- <stop
+ sodipodi:docname="gnome-shell-start.svg"
+ xml:space="preserve"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"><defs
+ id="defs2"><linearGradient
+ id="a"><stop
offset="0"
stop-color="#eef4fc"
id="stop3"
- style="stop-color:#b2cdf1;stop-opacity:1" />
- <stop
+ style="stop-color:#b2cdf1;stop-opacity:1" /><stop
offset="1"
stop-color="#fff"
- id="stop5" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient10562"
- id="linearGradient10564"
- x1="-1179.9999"
- y1="1314.5198"
- x2="-940.00006"
- y2="1314.5198"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.3993149,0,0,1.3993149,1306.25,-919.42736)" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient10562">
- <stop
- style="stop-color:#3580e4;stop-opacity:1"
- offset="0"
- id="stop10558" />
- <stop
- style="stop-color:#8abfdd;stop-opacity:1"
- offset="1"
- id="stop10560" />
- </linearGradient>
- <clipPath
+ id="stop5" /></linearGradient><clipPath
id="e-3"
- clipPathUnits="userSpaceOnUse">
- <path
+ clipPathUnits="userSpaceOnUse"><path
d="m 65,177 c -18.502,0 -33.5,14.998 -33.5,33.5 0.008,7.371 4.131,15.807 11.388,23.526 l 12.617,13.171 H 75.02 l 12.137,-13.245 c 6.636,-7.059 11.33,-16.117 11.344,-23.452 0,-18.502 -14.998,-33.5 -33.5,-33.5 z"
style="marker:none"
fill="#ffffff"
stroke-width="2"
- id="path34-6" />
- </clipPath>
- <radialGradient
+ id="path34-6" /></clipPath><radialGradient
r="33.5"
fy="48.405998"
fx="79.091003"
@@ -70,27 +40,20 @@
gradientTransform="matrix(0.00476,1.62228,-1.43419,0.00422,141.702,-82.047)"
gradientUnits="userSpaceOnUse"
id="f-7"
- xlink:href="#b" />
- <linearGradient
- id="b">
- <stop
+ xlink:href="#b" /><linearGradient
+ id="b"><stop
offset="0"
stop-color="#fff"
- id="stop11" />
- <stop
+ id="stop11" /><stop
offset=".519"
stop-color="#fff"
- id="stop13" />
- <stop
+ id="stop13" /><stop
offset=".734"
stop-color="#cfcfcf"
- id="stop15" />
- <stop
+ id="stop15" /><stop
offset="1"
stop-color="#dcdcdc"
- id="stop17" />
- </linearGradient>
- <radialGradient
+ id="stop17" /></linearGradient><radialGradient
r="12"
fy="54.102001"
fx="71.473999"
@@ -99,23 +62,17 @@
gradientTransform="matrix(4.50607,0,0,4.76661,-259.306,-59.706)"
gradientUnits="userSpaceOnUse"
id="g-2"
- xlink:href="#c" />
- <linearGradient
- id="c">
- <stop
+ xlink:href="#c" /><linearGradient
+ id="c"><stop
offset="0"
stop-color="#ed686f"
- id="stop20" />
- <stop
+ id="stop20" /><stop
offset=".865"
stop-color="#a51d2d"
- id="stop22" />
- <stop
+ id="stop22" /><stop
offset="1"
stop-color="#e01b24"
- id="stop24" />
- </linearGradient>
- <radialGradient
+ id="stop24" /></linearGradient><radialGradient
r="14.583"
fy="49.777"
fx="40.152"
@@ -124,23 +81,17 @@
gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
gradientUnits="userSpaceOnUse"
id="h-7"
- xlink:href="#d" />
- <linearGradient
- id="d">
- <stop
+ xlink:href="#d" /><linearGradient
+ id="d"><stop
offset="0"
stop-color="#ed686f"
- id="stop27" />
- <stop
+ id="stop27" /><stop
offset=".911"
stop-color="#a51d2d"
- id="stop29" />
- <stop
+ id="stop29" /><stop
offset="1"
stop-color="#e01b24"
- id="stop31" />
- </linearGradient>
- <radialGradient
+ id="stop31" /></linearGradient><radialGradient
r="14.583"
fy="49.777"
fx="40.152"
@@ -149,51 +100,33 @@
gradientTransform="matrix(0.87016,4.27869,-2.56693,0.52204,148.394,-163.306)"
gradientUnits="userSpaceOnUse"
id="i-6"
- xlink:href="#d" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient860"
- id="linearGradient22"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-1.575111,0,0,1.575111,1217.8748,47.173672)"
- x1="85"
- y1="107.162"
- x2="85"
- y2="86" />
- <linearGradient
- id="linearGradient860">
- <stop
+ xlink:href="#d" /><linearGradient
+ id="linearGradient860"><stop
offset="0"
stop-color="#eef4fc"
id="stop856"
- style="stop-color:#c5dcf7;stop-opacity:1" />
- <stop
+ style="stop-color:#c5dcf7;stop-opacity:1" /><stop
offset="1"
stop-color="#fff"
- id="stop858" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient860"
- id="linearGradient24"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-2.1158457,0,0,2.1158457,1459.4994,-118.92278)"
- x1="85"
- y1="110.30392"
- x2="85"
- y2="86.986084" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient860"
- id="linearGradient23"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(1.5463767,0,0,1.5463767,655.03375,-16.075361)"
- x1="85"
- y1="107.162"
- x2="85"
- y2="82.13472" />
- </defs>
- <sodipodi:namedview
+ id="stop858" /></linearGradient><style
+ id="style1">
+ .uuid-58480b73-28a0-48b2-8189-77c5c6343f96 {
+ fill: #e00;
+ stroke-width: 0px;
+ }
+ </style><clipPath
+ id="uuid-409128a3-73ae-4fb4-be0e-a3c528ddec23"><polygon
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
+ points="298.76,281.41 269.91,298.07 241.06,281.41 241.06,248.09 269.91,231.44 298.76,248.09 "
+ id="polygon1" /></clipPath><clipPath
+ id="uuid-5dc88fc6-fbe1-443d-af17-25796c346a45"><polygon
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
+ points="907.12,232.55 863.16,257.93 819.2,232.55 819.2,181.8 863.16,156.42 907.12,181.8 "
+ id="polygon2-2" /></clipPath><clipPath
+ id="uuid-931b4eba-6549-4a63-a7ed-244ec3143098"><polygon
+ class="uuid-5c6086cf-0da3-471a-8af1-b870d5b70693"
+ points="768.79,455.57 739.93,472.23 711.08,455.57 711.08,422.25 739.93,405.59 768.79,422.25 "
+ id="polygon3" /></clipPath></defs><sodipodi:namedview
units="px"
borderlayer="true"
inkscape:showpageshadow="false"
@@ -201,143 +134,71 @@
inkscape:document-rotation="0"
inkscape:current-layer="layer1"
inkscape:document-units="px"
- inkscape:cy="75.603256"
- inkscape:cx="199.00314"
- inkscape:zoom="0.98994949"
+ inkscape:cy="126.57211"
+ inkscape:cx="427.09248"
+ inkscape:zoom="0.7071068"
inkscape:pageshadow="2"
inkscape:pageopacity="0"
borderopacity="1"
bordercolor="#383838"
- pagecolor="#1f1f1f"
+ pagecolor="#353535"
id="base"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
- inkscape:window-width="1920"
- inkscape:window-height="1011"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
+ inkscape:window-width="2154"
+ inkscape:window-height="1253"
+ inkscape:window-x="26"
+ inkscape:window-y="23"
+ inkscape:window-maximized="0"
inkscape:snap-bbox="true"
inkscape:object-paths="true"
inkscape:snap-intersection-paths="true"
inkscape:snap-smooth-nodes="true"
- inkscape:snap-midpoints="true">
- <inkscape:grid
+ inkscape:snap-midpoints="true"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"><inkscape:grid
type="xygrid"
- id="grid900" />
- </sodipodi:namedview>
- <metadata
- id="metadata5">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- <cc:license
- rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Notice" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#Attribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- <cc:requires
- rdf:resource="http://creativecommons.org/ns#ShareAlike" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
+ id="grid900"
+ originx="0"
+ originy="0"
+ spacingy="1"
+ spacingx="1"
+ units="px"
+ visible="false" /></sodipodi:namedview><metadata
+ id="metadata5"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" /></cc:Work><cc:License
+ rdf:about="http://creativecommons.org/licenses/by-sa/4.0/"><cc:permits
+ rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
+ rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:requires
+ rdf:resource="http://creativecommons.org/ns#Notice" /><cc:requires
+ rdf:resource="http://creativecommons.org/ns#Attribution" /><cc:permits
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /><cc:requires
+ rdf:resource="http://creativecommons.org/ns#ShareAlike" /></cc:License></rdf:RDF></metadata><g
id="layer1"
inkscape:groupmode="layer"
inkscape:label="Layer 1"
- transform="translate(-620,9.4371882)">
- <g
- id="g4043"
- transform="translate(-15.793175)">
- <circle
- style="fill:url(#linearGradient10564);fill-opacity:1;stroke:none;stroke-width:3.66905;stroke-linecap:round;stroke-linejoin:round"
- id="path10517"
- cx="-177.02397"
- cy="920"
- r="167.91774"
- transform="rotate(-90)" />
- <path
- d="m 1066.6646,147.98131 c 12.3048,0.0174 23.474,7.19166 28.6008,18.37784 a 23.631877,23.631877 0 0 1 10.7762,-2.62748 c 12.4288,0.0178 22.7209,9.65384 23.5474,22.05492 h 0.08 c 8.6991,0 15.7508,7.05171 15.7508,15.75083 0,8.69911 -7.0522,15.75083 -15.7513,15.75083 h -88.2056 a 18.901933,18.901933 0 0 1 -18.9019,-18.901 18.901933,18.901933 0 0 1 12.6566,-17.81853 33.12417,33.12417 0 0 1 -0.056,-1.08246 c 0,-17.39824 14.1038,-31.50213 31.5025,-31.50213 z"
- id="path10"
- style="fill:url(#linearGradient22);stroke-width:0.577558" />
- <g
- id="g245"
- transform="matrix(1.5161629,0,0,1.5161629,396.40481,-143.42807)">
- <g
- id="g126"
- transform="matrix(0.75000161,0,0,0.75000161,154.45946,111.99828)">
- <g
- id="g265">
- <g
- transform="matrix(3.12129,0,0,2.9344,91.063695,-499.94397)"
- clip-path="url(#e-3)"
- id="g47-0">
- <path
- transform="translate(-8,156)"
- d="M 73,21 C 54.498,21 39.5,35.998 39.5,54.5 39.508,61.871 43,68.922 46.44,74.879 L 58,98 H 88 L 99.605,74.79 C 103,68.91 106.485,61.835 106.5,54.5 106.5,35.998 91.502,21 73,21 Z"
- style="fill:url(#f-7);marker:none"
- fill="url(#f)"
- id="path39-6" />
- <path
- d="m 64,177 c 0,0 -18.332,12.132 -18.332,30.989 0,14.571 16.174,46.011 16.174,46.011 H 67 c 0,0 1.333,-31.44 1.333,-46.011 C 68.333,189.132 64,177 64,177 Z"
- fill="url(#g)"
- id="path41-2"
- style="fill:url(#g-2)" />
- <path
- transform="translate(-8,156)"
- d="m 71.983,21.106 c -8.207,0.147 -16.328,3.285 -22.5,8.695 -6.174,5.409 -10.35,13.047 -11.574,21.163 -1.24,8.225 0.567,16.874 4.995,23.915 L 61.902,98 h 6.432 L 55.002,81.27 C 50.702,75.875 46.53,70.2 44.406,63.636 42.283,57.072 42.24,49.836 44.409,43.288 A 32.824,32.824 0 0 1 54.925,28.13 32.824,32.824 0 0 1 71.983,21.105 Z"
- fill="url(#h)"
- id="path43-6"
- style="fill:url(#h-7)" />
- <path
- transform="matrix(-1,0,0,1,137.16,155.823)"
- d="M 73.003,21.303 C 65.294,19.756 57.033,21.149 50.257,25.138 43.481,29.127 38.255,35.675 35.867,43.167 A 32.484,32.484 0 0 0 35.11,59.972 32.484,32.484 0 0 0 42.904,74.879 L 54.11,98 H 67.493 L 54.16,74.356 C 51.292,69.269 48.603,63.95 47.733,58.175 46.863,52.4 47.769,46.404 50.107,41.052 54.28,31.502 62.943,24.03 73.002,21.304 Z"
- fill="url(#i)"
- id="path45-1"
- style="fill:url(#i-6)" />
- </g>
- <path
- style="marker:none"
- d="m 271.0607,256.22128 v 19.397 a 9.702,9.702 0 0 0 9.724,9.726 h 26.326 c 5.388,0 8.594,-4.457 9.725,-9.726 v -19.397 z"
- fill="#e5a50a"
- id="path49-8" />
- <path
- style="marker:none"
- d="m 271.0607,252.06028 v 19.397 a 9.702,9.702 0 0 0 9.724,9.724 h 26.326 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
- fill="#e5a50a"
- id="path51-7" />
- <path
- style="marker:none"
- d="m 300.1907,252.06028 v 29.121 h 6.92 c 5.388,0 8.594,-4.455 9.725,-9.724 v -19.397 z"
- fill="#f3af0b"
- id="path53-9" />
- </g>
- </g>
- </g>
- <path
- style="font-variation-settings:normal;fill:url(#linearGradient24);fill-opacity:1;stroke-width:0.822282"
- d="m 1051.0577,24.011554 a 37.111799,37.111799 0 0 0 -36.9465,35.120895 c -13.3251,2.089947 -23.45686,13.564137 -23.45686,27.494149 0,15.421302 12.41476,27.836692 27.83666,27.836692 h 72.3273 c 11.9284,0 21.5316,-9.60251 21.5316,-21.530902 0,-11.928386 -9.6032,-21.532163 -21.5316,-21.532163 h -3.9868 a 37.111799,37.111799 0 0 0 1.4509,-10.27624 37.111799,37.111799 0 0 0 -37.1118,-37.111798 37.111799,37.111799 0 0 0 -0.1123,0 z"
- id="path12" />
- <path
- d="m 803.48555,82.893284 c -12.0805,0.0171 -23.046,7.06046 -28.0791,18.042576 a 23.200767,23.200767 0 0 0 -10.5796,-2.579546 c -12.2021,0.0175 -22.3064,9.477716 -23.1179,21.652566 h -0.079 c -8.5404,0 -15.4634,6.92307 -15.4634,15.46349 0,8.54042 6.9235,15.46349 15.4639,15.46349 h 86.5965 a 18.55711,18.55711 0 0 0 18.5571,-18.55619 18.55711,18.55711 0 0 0 -12.4257,-17.49347 32.519894,32.519894 0 0 0 0.055,-1.06272 c 0,-17.080836 -13.8466,-30.927426 -30.9279,-30.927426 z"
- id="path21"
- style="fill:url(#linearGradient23);fill-opacity:1;stroke-width:0.999999" />
- </g>
- </g>
-</svg>
+ transform="translate(-620,9.4371882)"><g
+ id="g69"
+ transform="matrix(3.9100987,0,0,3.9112392,-340.29335,-367.51751)"
+ style="stroke-width:0.758638"><path
+ id="path69"
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:none;stroke:#000000;stroke-width:0.802889;stroke-dasharray:none;stroke-opacity:0.260754"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="3.0249546"
+ inkscape:original="M 313.48633 103.79883 L 305.27734 108.99023 L 317.28516 113.2793 L 278.90234 137.55273 L 287.01172 144.30859 L 334.9043 114.01953 L 329.75391 109.73047 L 313.48633 103.79883 z M 339.08398 126.42578 C 336.58186 126.44685 334.02099 126.72082 331.4043 127.24805 C 326.21038 128.33537 321.15063 130.43744 316.22461 133.55273 C 311.3442 136.63918 307.7837 139.98905 305.54297 143.60352 C 303.38732 147.22202 302.62161 150.82875 303.24609 154.42383 C 303.95565 158.02294 306.10659 161.31916 309.69727 164.31055 C 313.32741 167.33481 317.52958 169.33062 322.30469 170.30078 C 327.16487 171.27497 332.19279 171.22013 337.38672 170.13281 C 342.66571 169.04952 347.74459 166.9634 352.625 163.87695 C 357.55102 160.76166 361.0924 157.39584 363.24805 153.77734 C 365.44315 150.19171 366.18612 146.59911 365.47656 143 C 364.85208 139.40492 362.72389 136.09458 359.09375 133.07031 C 355.50307 130.07892 351.27814 128.09723 346.41797 127.12305 C 344.03041 126.63796 341.58611 126.40471 339.08398 126.42578 z M 339.03711 134.75977 C 340.59668 134.65532 342.09264 134.71475 343.52344 134.9375 C 346.38503 135.38301 348.86185 136.47651 350.95312 138.21875 C 353.08387 139.99386 354.25653 141.94201 354.47266 144.06055 C 354.6888 146.17909 353.95735 148.37553 352.27734 150.65234 C 350.68241 152.93318 348.17475 155.15496 344.75391 157.31836 C 341.37867 159.45291 338.0017 160.95311 334.625 161.81641 C 331.28776 162.71258 328.18972 162.9377 325.32812 162.49219 C 322.46654 162.04668 319.96863 160.93528 317.83789 159.16016 C 315.74662 157.41792 314.59309 155.48768 314.37695 153.36914 C 314.16081 151.2506 314.87313 149.0382 316.51367 146.72852 C 318.19368 144.4517 320.72242 142.24587 324.09766 140.11133 C 327.5185 137.94792 330.87439 136.43177 334.16602 135.56445 C 335.85437 135.1328 337.47754 134.86421 339.03711 134.75977 z "
+ d="m 314.52344,100.95703 a 3.0252571,3.0252571 0 0 0 -2.6543,0.28516 l -8.20898,5.1914 a 3.0252571,3.0252571 0 0 0 0.59961,5.40625 l 6.1621,2.20118 -33.13671,20.95507 a 3.0252571,3.0252571 0 0 0 -0.31836,4.88086 l 8.10937,6.75586 a 3.0252571,3.0252571 0 0 0 3.55274,0.23242 l 47.89257,-30.28906 a 3.0252571,3.0252571 0 0 0 0.31836,-4.88086 l -5.15039,-4.28906 a 3.0252571,3.0252571 0 0 0 -0.89843,-0.51758 z m 24.53515,22.44336 c -2.70552,0.0228 -5.45955,0.32018 -8.25195,0.88281 a 3.0252571,3.0252571 0 0 0 -0.0215,0.004 c -5.57359,1.1668 -10.9804,3.42211 -16.17774,6.70898 -5.15435,3.2597 -9.07893,6.89093 -11.63476,11.01368 a 3.0252571,3.0252571 0 0 0 -0.0293,0.0449 c -2.44678,4.10719 -3.43195,8.54475 -2.67774,12.88672 a 3.0252571,3.0252571 0 0 0 0.0117,0.0684 c 0.86616,4.39343 3.51054,8.31439 7.48438,11.625 4.00932,3.34015 8.71238,5.56847 13.9414,6.63085 a 3.0252571,3.0252571 0 0 0 0.008,0.002 c 5.27203,1.05674 10.73013,0.98909 16.2832,-0.17188 0.001,-2.8e-4 0.003,-0.002 0.004,-0.002 5.65232,-1.16046 11.08416,-3.3969 16.24414,-6.66016 5.19597,-3.28601 9.11209,-6.93484 11.59179,-11.08789 2.49319,-4.07791 3.46133,-8.54055 2.61524,-12.89062 -0.77549,-4.41697 -3.41096,-8.36912 -7.41992,-11.70899 -3.98043,-3.31609 -8.70902,-5.52412 -14.00977,-6.58789 -6.3e-4,-1.3e-4 -0.001,1.3e-4 -0.002,0 -2.59631,-0.52736 -5.25296,-0.7806 -7.95899,-0.75781 z m 0.17969,14.37695 c 1.35455,-0.0907 2.62538,-0.0376 3.82031,0.14844 2.38032,0.37058 4.29192,1.22835 5.95899,2.61719 1.71385,1.4278 2.3223,2.61846 2.44531,3.82422 0.12477,1.22298 -0.24192,2.62183 -1.61914,4.48828 a 3.0252571,3.0252571 0 0 0 -0.0449,0.0625 c -1.27029,1.81658 -3.46759,3.82347 -6.66211,5.84375 -3.14603,1.98959 -6.23089,3.34817 -9.26172,4.12305 a 3.0252571,3.0252571 0 0 0 -0.0352,0.01 c -3.00691,0.80747 -5.66623,0.98001 -8.04687,0.60938 -2.37037,-0.36904 -4.30499,-1.23959 -6.01953,-2.66797 -1.66738,-1.3891 -2.26205,-2.55145 -2.38672,-3.77344 -0.12591,-1.23411 0.24428,-2.66937 1.58203,-4.56055 1.37458,-1.85462 3.60235,-3.84584 6.74609,-5.83398 3.20097,-2.02436 6.27281,-3.3982 9.21094,-4.17383 1.52545,-0.3894 2.96138,-0.62632 4.3125,-0.7168 z"
+ transform="translate(0,10.583333)" /><path
+ id="path61"
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;fill:#000000;fill-opacity:0.112011;stroke-width:3.13082"
+ d="m 313.27441,103.83552 -8.21035,5.19193 v 11.11302 l 0.77876,0.27802 -27.15183,17.17156 v 11.1125 l 8.10855,6.75514 18.45055,-11.66854 c -1.77807,3.03782 -2.57278,6.06754 -2.39106,9.08885 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0283,0.52942 -0.0318,1.05859 0,1.5875 -0.0565,1.0581 -0.008,2.11531 0.1757,3.17139 0.70955,3.59911 2.85957,6.89431 6.45025,9.8857 3.63013,3.02426 7.83291,5.02172 12.60801,5.99188 4.86018,0.97418 9.88733,0.9173 15.08125,-0.17002 5.27898,-1.08329 10.35846,-3.16795 15.23887,-6.2544 4.92601,-3.11529 8.46696,-6.48218 10.6226,-10.10067 1.82253,-2.97703 2.62822,-5.95887 2.44843,-8.94519 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52899 0.0319,-1.05822 0,-1.5875 0.031,-0.52908 0.0319,-1.05813 0,-1.5875 0.0669,-1.13924 0.005,-2.27884 -0.22014,-3.41943 -0.62449,-3.59508 -2.7519,-6.90485 -6.38204,-9.92911 -3.59068,-2.99139 -7.81606,-4.97429 -12.67623,-5.94847 -4.71017,-0.95697 -9.64459,-0.92406 -14.80064,0.0889 l 3.2861,-2.07843 v -11.1125 l -5.14904,-4.28966 z m 26.70896,42.02741 c 1.14554,-0.017 2.25436,0.0577 3.32745,0.22479 2.86159,0.44551 5.33825,1.53973 7.42952,3.28197 0.50393,0.41982 0.94985,0.84978 1.34669,1.28881 -0.008,0.0108 -0.0143,0.0213 -0.0222,0.032 -1.59494,2.28084 -4.10273,4.50286 -7.52358,6.66626 -3.37523,2.13454 -6.75136,3.63358 -10.12806,4.49688 -3.33724,0.89617 -6.43655,1.12144 -9.29814,0.67593 -2.86158,-0.44551 -5.35769,-1.55594 -7.48843,-3.33106 -0.50335,-0.41934 -0.94939,-0.85026 -1.3441,-1.2914 0.007,-0.01 0.0126,-0.0196 0.0196,-0.0294 1.68001,-2.27681 4.20777,-4.48262 7.583,-6.61717 3.42085,-2.1634 6.77701,-3.67866 10.06864,-4.54597 2.11043,-0.53957 4.12038,-0.82332 6.0296,-0.85163 z"
+ sodipodi:nodetypes="ccccccccccccccccsccscccccccccsccccccsssccscssccscs" /><path
+ id="path66-7"
+ style="font-size:18.6667px;line-height:1.25;font-family:'Red Hat Display';-inkscape-font-specification:'Red Hat Display, @wght=700';font-variation-settings:'wght' 700;letter-spacing:0px;word-spacing:0px;white-space:pre;opacity:1;vector-effect:none;fill:#f6f5f4;fill-opacity:0.0386836;stroke:#ffffff;stroke-width:0.802889;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.260754;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="3.0249546"
+ inkscape:original="M 313.48633 103.79883 L 305.27734 108.99023 L 317.28516 113.2793 L 278.90234 137.55273 L 287.01172 144.30859 L 334.9043 114.01953 L 329.75391 109.73047 L 313.48633 103.79883 z M 339.08398 126.42578 C 336.58186 126.44685 334.02099 126.72082 331.4043 127.24805 C 326.21038 128.33537 321.15063 130.43744 316.22461 133.55273 C 311.3442 136.63918 307.7837 139.98905 305.54297 143.60352 C 303.38732 147.22202 302.62161 150.82875 303.24609 154.42383 C 303.95565 158.02294 306.10659 161.31916 309.69727 164.31055 C 313.32741 167.33481 317.52958 169.33062 322.30469 170.30078 C 327.16487 171.27497 332.19279 171.22013 337.38672 170.13281 C 342.66571 169.04952 347.74459 166.9634 352.625 163.87695 C 357.55102 160.76166 361.0924 157.39584 363.24805 153.77734 C 365.44315 150.19171 366.18612 146.59911 365.47656 143 C 364.85208 139.40492 362.72389 136.09458 359.09375 133.07031 C 355.50307 130.07892 351.27814 128.09723 346.41797 127.12305 C 344.03041 126.63796 341.58611 126.40471 339.08398 126.42578 z M 339.03711 134.75977 C 340.59668 134.65532 342.09264 134.71475 343.52344 134.9375 C 346.38503 135.38301 348.86185 136.47651 350.95312 138.21875 C 353.08387 139.99386 354.25653 141.94201 354.47266 144.06055 C 354.6888 146.17909 353.95735 148.37553 352.27734 150.65234 C 350.68241 152.93318 348.17475 155.15496 344.75391 157.31836 C 341.37867 159.45291 338.0017 160.95311 334.625 161.81641 C 331.28776 162.71258 328.18972 162.9377 325.32812 162.49219 C 322.46654 162.04668 319.96863 160.93528 317.83789 159.16016 C 315.74662 157.41792 314.59309 155.48768 314.37695 153.36914 C 314.16081 151.2506 314.87313 149.0382 316.51367 146.72852 C 318.19368 144.4517 320.72242 142.24587 324.09766 140.11133 C 327.5185 137.94792 330.87439 136.43177 334.16602 135.56445 C 335.85437 135.1328 337.47754 134.86421 339.03711 134.75977 z "
+ d="m 314.52344,100.95703 a 3.0252571,3.0252571 0 0 0 -2.6543,0.28516 l -8.20898,5.1914 a 3.0252571,3.0252571 0 0 0 0.59961,5.40625 l 6.1621,2.20118 -33.13671,20.95507 a 3.0252571,3.0252571 0 0 0 -0.31836,4.88086 l 8.10937,6.75586 a 3.0252571,3.0252571 0 0 0 3.55274,0.23242 l 47.89257,-30.28906 a 3.0252571,3.0252571 0 0 0 0.31836,-4.88086 l -5.15039,-4.28906 a 3.0252571,3.0252571 0 0 0 -0.89843,-0.51758 z m 24.53515,22.44336 c -2.70552,0.0228 -5.45955,0.32018 -8.25195,0.88281 a 3.0252571,3.0252571 0 0 0 -0.0215,0.004 c -5.57359,1.1668 -10.9804,3.42211 -16.17774,6.70898 -5.15435,3.2597 -9.07893,6.89093 -11.63476,11.01368 a 3.0252571,3.0252571 0 0 0 -0.0293,0.0449 c -2.44678,4.10719 -3.43195,8.54475 -2.67774,12.88672 a 3.0252571,3.0252571 0 0 0 0.0117,0.0684 c 0.86616,4.39343 3.51054,8.31439 7.48438,11.625 4.00932,3.34015 8.71238,5.56847 13.9414,6.63085 a 3.0252571,3.0252571 0 0 0 0.008,0.002 c 5.27203,1.05674 10.73013,0.98909 16.2832,-0.17188 0.001,-2.8e-4 0.003,-0.002 0.004,-0.002 5.65232,-1.16046 11.08416,-3.3969 16.24414,-6.66016 5.19597,-3.28601 9.11209,-6.93484 11.59179,-11.08789 2.49319,-4.07791 3.46133,-8.54055 2.61524,-12.89062 -0.77549,-4.41697 -3.41096,-8.36912 -7.41992,-11.70899 -3.98043,-3.31609 -8.70902,-5.52412 -14.00977,-6.58789 -6.3e-4,-1.3e-4 -0.001,1.3e-4 -0.002,0 -2.59631,-0.52736 -5.25296,-0.7806 -7.95899,-0.75781 z m 0.17969,14.37695 c 1.35455,-0.0907 2.62538,-0.0376 3.82031,0.14844 2.38032,0.37058 4.29192,1.22835 5.95899,2.61719 1.71385,1.4278 2.3223,2.61846 2.44531,3.82422 0.12477,1.22298 -0.24192,2.62183 -1.61914,4.48828 a 3.0252571,3.0252571 0 0 0 -0.0449,0.0625 c -1.27029,1.81658 -3.46759,3.82347 -6.66211,5.84375 -3.14603,1.98959 -6.23089,3.34817 -9.26172,4.12305 a 3.0252571,3.0252571 0 0 0 -0.0352,0.01 c -3.00691,0.80747 -5.66623,0.98001 -8.04687,0.60938 -2.37037,-0.36904 -4.30499,-1.23959 -6.01953,-2.66797 -1.66738,-1.3891 -2.26205,-2.55145 -2.38672,-3.77344 -0.12591,-1.23411 0.24428,-2.66937 1.58203,-4.56055 1.37458,-1.85462 3.60235,-3.84584 6.74609,-5.83398 3.20097,-2.02436 6.27281,-3.3982 9.21094,-4.17383 1.52545,-0.3894 2.96138,-0.62632 4.3125,-0.7168 z" /></g></g></svg>
--
2.46.2

View File

@ -0,0 +1,45 @@
From 15df1086028087e5a81830323137a8730d2c5888 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 14 Mar 2017 17:04:36 +0100
Subject: [PATCH] windowMenu: Bring back workspaces submenu for static
workspaces
When the titlebar context menu was moved to the shell, the submenu for
moving to a specific workspace was intentionally left out; some people
are quite attached to it though, so bring it back when static workspaces
are used.
---
js/ui/windowMenu.js | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
index c69c183d7c..2db3962012 100644
--- a/js/ui/windowMenu.js
+++ b/js/ui/windowMenu.js
@@ -153,6 +153,23 @@ export class WindowMenu extends PopupMenu.PopupMenu {
window.change_workspace(workspace.get_neighbor(dir));
});
}
+
+ let { workspaceManager } = global;
+ let nWorkspaces = workspaceManager.n_workspaces;
+ if (nWorkspaces > 1 && !Meta.prefs_get_dynamic_workspaces()) {
+ item = new PopupMenu.PopupSubMenuMenuItem(_("Move to another workspace"));
+ this.addMenuItem(item);
+
+ let currentIndex = workspaceManager.get_active_workspace_index();
+ for (let i = 0; i < nWorkspaces; i++) {
+ let index = i;
+ let name = Meta.prefs_get_workspace_name(i);
+ let subitem = item.menu.addAction(name, () => {
+ window.change_workspace_by_index(index, false);
+ });
+ subitem.setSensitive(currentIndex != i);
+ }
+ }
}
}
--
2.45.2

View File

@ -0,0 +1,170 @@
From 8a4efef39a0f48371c632d449688f29d06b9eed7 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 12:51:24 -0400
Subject: [PATCH 1/3] authPrompt: don't fade out auth messages if user types
password up front
Right now we fade out any stale auth messages as soon as the user starts
typing. This behavior doesn't really make sense if the user is typing up
front, before a password is asked.
---
js/gdm/authPrompt.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 8a46559d90..9309f60886 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -211,7 +211,7 @@ export const AuthPrompt = GObject.registerClass({
[this._textEntry, this._passwordEntry].forEach(entry => {
entry.clutter_text.connect('text-changed', () => {
- if (!this._userVerifier.hasPendingMessages)
+ if (!this._userVerifier.hasPendingMessages && this._queryingService && !this._preemptiveAnswer)
this._fadeOutMessage();
});
--
2.45.2
From 007bbb694d4f30175caecbc9ada91515634bfd0b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Wed, 30 Sep 2015 14:36:33 -0400
Subject: [PATCH 2/3] authPrompt: don't spin unless answering question
---
js/gdm/authPrompt.js | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 9309f60886..3e72668967 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -275,13 +275,14 @@ export const AuthPrompt = GObject.registerClass({
this.verificationStatus = AuthPromptStatus.VERIFICATION_IN_PROGRESS;
this.updateSensitivity(false);
- if (shouldSpin)
- this.startSpinning();
+ if (this._queryingService) {
+ if (shouldSpin)
+ this.startSpinning();
- if (this._queryingService)
this._userVerifier.answerQuery(this._queryingService, this._entry.text);
- else
+ } else {
this._preemptiveAnswer = this._entry.text;
+ }
this.emit('next');
}
--
2.45.2
From 92f66a5ff91e47d46a48d7ee51c0808f7ce1eaf9 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 5 Oct 2015 15:26:18 -0400
Subject: [PATCH 3/3] authPrompt: stop accepting preemptive answer if user
stops typing
We only want to allow the user to type the preemptive password in
one smooth motion. If they start to type, and then stop typing,
we should discard their preemptive password as expired.
Typing ahead the password is just a convenience for users who don't
want to manually lift the shift before typing their passwords, after
all.
---
js/gdm/authPrompt.js | 36 ++++++++++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js
index 3e72668967..254b4dbb88 100644
--- a/js/gdm/authPrompt.js
+++ b/js/gdm/authPrompt.js
@@ -70,6 +70,8 @@ export const AuthPrompt = GObject.registerClass({
this._defaultButtonWellActor = null;
this._cancelledRetries = 0;
+ this._idleMonitor = global.backend.get_core_idle_monitor();
+
let reauthenticationOnly;
if (this._mode === AuthPromptMode.UNLOCK_ONLY)
reauthenticationOnly = true;
@@ -127,8 +129,14 @@ export const AuthPrompt = GObject.registerClass({
}
_onDestroy() {
+ if (this._preemptiveAnswerWatchId) {
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
+ }
+
this._inactiveEntry.destroy();
this._inactiveEntry = null;
+
this._userVerifier.destroy();
this._userVerifier = null;
}
@@ -282,6 +290,11 @@ export const AuthPrompt = GObject.registerClass({
this._userVerifier.answerQuery(this._queryingService, this._entry.text);
} else {
this._preemptiveAnswer = this._entry.text;
+
+ if (this._preemptiveAnswerWatchId) {
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
+ }
}
this.emit('next');
@@ -493,6 +506,11 @@ export const AuthPrompt = GObject.registerClass({
}
setQuestion(question) {
+ if (this._preemptiveAnswerWatchId) {
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
+ }
+
this._entry.hint_text = question;
this._authList.hide();
@@ -614,6 +632,19 @@ export const AuthPrompt = GObject.registerClass({
this._updateEntry(false);
}
+ _onUserStoppedTypePreemptiveAnswer() {
+ if (!this._preemptiveAnswerWatchId ||
+ this._preemptiveAnswer ||
+ this._queryingService)
+ return;
+
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = 0;
+
+ this._entry.text = '';
+ this.updateSensitivity(false);
+ }
+
reset() {
let oldStatus = this.verificationStatus;
this.verificationStatus = AuthPromptStatus.NOT_VERIFYING;
@@ -621,6 +652,11 @@ export const AuthPrompt = GObject.registerClass({
this.cancelButton.can_focus = this._hasCancelButton;
this._preemptiveAnswer = null;
+ if (this._preemptiveAnswerWatchId)
+ this._idleMonitor.remove_watch(this._preemptiveAnswerWatchId);
+ this._preemptiveAnswerWatchId = this._idleMonitor.add_idle_watch(500,
+ this._onUserStoppedTypePreemptiveAnswer.bind(this));
+
if (this._userVerifier)
this._userVerifier.cancel();
--
2.45.2

View File

@ -0,0 +1,105 @@
From eaa7217db15a28e88ce0b5a84827c306148561ca Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 10:57:02 -0400
Subject: [PATCH 1/3] smartcardManager: add way to detect if user logged using
(any) token
If a user uses a token at login time, we need to make sure they continue
to use the token at unlock time.
As a prerequisite for addressing that problem we need to know up front
if a user logged in with a token at all.
This commit adds the necessary api to detect that case.
---
js/misc/smartcardManager.js | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js
index 32573cd384..6c48c80a19 100644
--- a/js/misc/smartcardManager.js
+++ b/js/misc/smartcardManager.js
@@ -118,4 +118,11 @@ class SmartcardManager extends Signals.EventEmitter {
return true;
}
+
+ loggedInWithToken() {
+ if (this._loginToken)
+ return true;
+
+ return false;
+ }
}
--
2.45.2
From d7ef26d7b9d352232c9e0a24a04bcfcf6eee7d9a Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:56:53 -0400
Subject: [PATCH 2/3] gdm: only unlock with smartcard, if smartcard used for
login
If a smartcard is used for login, we need to make sure the smartcard
gets used for unlock, too.
---
js/gdm/util.js | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/js/gdm/util.js b/js/gdm/util.js
index c9c040beb7..c0d8852880 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -465,6 +465,8 @@ export class ShellUserVerifier extends Signals.EventEmitter {
this.smartcardDetected = false;
this._checkForSmartcard();
+ this._updateDefaultService();
+
this._smartcardManager.connectObject(
'smartcard-inserted', () => this._checkForSmartcard(),
'smartcard-removed', () => this._checkForSmartcard(), this);
@@ -643,7 +645,9 @@ export class ShellUserVerifier extends Signals.EventEmitter {
}
_getDetectedDefaultService() {
- if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
+ if (this._smartcardManager?.loggedInWithToken())
+ return SMARTCARD_SERVICE_NAME;
+ else if (this._settings.get_boolean(PASSWORD_AUTHENTICATION_KEY))
return PASSWORD_SERVICE_NAME;
else if (this._smartcardManager)
return SMARTCARD_SERVICE_NAME;
--
2.45.2
From 9bff98c2757e4591035e408aa9cee703cec74bdf Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Mon, 28 Sep 2015 19:57:36 -0400
Subject: [PATCH 3/3] gdm: update default service when smartcard inserted
Early on at start up we may not know if a smartcard is
available. Make sure we reupdate the default service
after we get a smartcard insertion event.
---
js/gdm/util.js | 2 ++
1 file changed, 2 insertions(+)
diff --git a/js/gdm/util.js b/js/gdm/util.js
index c0d8852880..430af4d8ef 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -490,6 +490,8 @@ export class ShellUserVerifier extends Signals.EventEmitter {
else if (this._preemptingService === SMARTCARD_SERVICE_NAME)
this._preemptingService = null;
+ this._updateDefaultService();
+
this.emit('smartcard-status-changed');
}
}
--
2.45.2

View File

@ -0,0 +1,62 @@
From 04bf0729ed6ae75736e297a10603bcb0a564cb28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 9 Jun 2020 19:42:21 +0200
Subject: [PATCH 1/2] popupMenu: Guard against non-menu-item children
This avoid a harmless but annoying warning.
---
js/ui/popupMenu.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index b6ad545087..cbbcfea1ff 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -951,7 +951,8 @@ export class PopupMenuBase extends Signals.EventEmitter {
}
_getMenuItems() {
- return this.box.get_children().map(a => a._delegate).filter(item => {
+ const children = this.box.get_children().filter(a => a._delegate !== undefined);
+ return children.map(a => a._delegate).filter(item => {
return item instanceof PopupBaseMenuItem || item instanceof PopupMenuSection;
});
}
--
2.45.2
From cffe984d9b85494fcf34500e78875b66c1cec534 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Tue, 9 Jun 2020 19:48:06 +0200
Subject: [PATCH 2/2] st/shadow: Check pipeline when painting
We shouldn't simply assume that st_shadow_helper_update() has been
called before paint() or that the pipeline was created successfully.
---
src/st/st-shadow.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/st/st-shadow.c b/src/st/st-shadow.c
index a406b61532..574445aeac 100644
--- a/src/st/st-shadow.c
+++ b/src/st/st-shadow.c
@@ -294,9 +294,10 @@ st_shadow_helper_paint (StShadowHelper *helper,
ClutterActorBox *actor_box,
uint8_t paint_opacity)
{
- _st_paint_shadow_with_opacity (helper->shadow,
- node,
- helper->pipeline,
- actor_box,
- paint_opacity);
+ if (helper->pipeline != NULL)
+ _st_paint_shadow_with_opacity (helper->shadow,
+ node,
+ helper->pipeline,
+ actor_box,
+ paint_opacity);
}
--
2.45.2

View File

@ -0,0 +1,232 @@
From f328eee88c4e700a29625e87fd6fc997a138c66b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 22 Nov 2024 19:23:59 +0100
Subject: [PATCH 1/3] loginDialog: Split out getBannerText() helper
The new methods will make it easier to add alternative sources
for the banner text.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3558>
---
js/gdm/loginDialog.js | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 27baae83ad..c3c397c0d1 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -873,11 +873,18 @@ export const LoginDialog = GObject.registerClass({
this._authPrompt.cancelButton.visible = cancelVisible;
}
+ _getBannerText() {
+ const enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
+ if (!enabled)
+ return null;
+
+ return this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
+ }
+
_updateBanner() {
- let enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
- let text = this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
+ const text = this._getBannerText();
- if (enabled && text) {
+ if (text) {
this._bannerLabel.set_text(text);
this._bannerLabel.show();
} else {
--
2.48.1
From 5f92c12c727bd447d7e539b1e6c8f3ac6ddf715a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 22 Nov 2024 19:36:42 +0100
Subject: [PATCH 2/3] loginDialog: Update banner asynchronously
We will soon allow reading the banner text from a file. Prepare
for that by making the method asynchronous.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3558>
---
js/gdm/loginDialog.js | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index c3c397c0d1..125cf299fa 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -505,9 +505,9 @@ export const LoginDialog = GObject.registerClass({
this._settings = new Gio.Settings({schema_id: GdmUtil.LOGIN_SCREEN_SCHEMA});
this._settings.connect(`changed::${GdmUtil.BANNER_MESSAGE_KEY}`,
- this._updateBanner.bind(this));
+ () => this._updateBanner().catch(logError));
this._settings.connect(`changed::${GdmUtil.BANNER_MESSAGE_TEXT_KEY}`,
- this._updateBanner.bind(this));
+ () => this._updateBanner().catch(logError));
this._settings.connect(`changed::${GdmUtil.DISABLE_USER_LIST_KEY}`,
this._updateDisableUserList.bind(this));
this._settings.connect(`changed::${GdmUtil.LOGO_KEY}`,
@@ -576,7 +576,7 @@ export const LoginDialog = GObject.registerClass({
this._bannerLabel.clutter_text.line_wrap = true;
this._bannerLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
bannerBox.add_child(this._bannerLabel);
- this._updateBanner();
+ this._updateBanner().catch(logError);
this._sessionMenuButton = new SessionMenuButton();
this._sessionMenuButton.connect('session-activated',
@@ -873,16 +873,19 @@ export const LoginDialog = GObject.registerClass({
this._authPrompt.cancelButton.visible = cancelVisible;
}
- _getBannerText() {
+ async _getBannerText() {
const enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
if (!enabled)
return null;
+ // placeholder
+ await false;
+
return this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
}
- _updateBanner() {
- const text = this._getBannerText();
+ async _updateBanner() {
+ const text = await this._getBannerText();
if (text) {
this._bannerLabel.set_text(text);
--
2.48.1
From a73a4f8455b1374b38724a532137a9b614a7fb19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 22 Nov 2024 19:17:44 +0100
Subject: [PATCH 3/3] loginDialog: Support loading banner message from file
Support the new `banner-message-path` and `banner-message-source`
settings, which allows loading the banner message from a path
instead of GSettings. This is mainly useful for `/etc/motd` and
similar mechanisms, to show the same message for both graphical
and non-graphical logins.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3558>
---
js/gdm/loginDialog.js | 53 +++++++++++++++++++++++++++++++++++++++++--
js/gdm/util.js | 2 ++
2 files changed, 53 insertions(+), 2 deletions(-)
diff --git a/js/gdm/loginDialog.js b/js/gdm/loginDialog.js
index 125cf299fa..fa91615026 100644
--- a/js/gdm/loginDialog.js
+++ b/js/gdm/loginDialog.js
@@ -46,6 +46,8 @@ const _SCROLL_ANIMATION_TIME = 500;
const _TIMED_LOGIN_IDLE_THRESHOLD = 5.0;
const _CONFLICTING_SESSION_DIALOG_TIMEOUT = 60;
+Gio._promisify(Gio.File.prototype, 'load_contents_async');
+
export const UserListItem = GObject.registerClass({
Signals: {'activate': {}},
}, class UserListItem extends St.Button {
@@ -508,6 +510,16 @@ export const LoginDialog = GObject.registerClass({
() => this._updateBanner().catch(logError));
this._settings.connect(`changed::${GdmUtil.BANNER_MESSAGE_TEXT_KEY}`,
() => this._updateBanner().catch(logError));
+ this._settings.connect(`changed::${GdmUtil.BANNER_MESSAGE_SOURCE_KEY}`,
+ () => {
+ if (this._updateBannerMessageFile())
+ this._updateBanner().catch(logError);
+ });
+ this._settings.connect(`changed::${GdmUtil.BANNER_MESSAGE_PATH_KEY}`,
+ () => {
+ if (this._updateBannerMessageFile())
+ this._updateBanner().catch(logError);
+ });
this._settings.connect(`changed::${GdmUtil.DISABLE_USER_LIST_KEY}`,
this._updateDisableUserList.bind(this));
this._settings.connect(`changed::${GdmUtil.LOGO_KEY}`,
@@ -576,6 +588,8 @@ export const LoginDialog = GObject.registerClass({
this._bannerLabel.clutter_text.line_wrap = true;
this._bannerLabel.clutter_text.ellipsize = Pango.EllipsizeMode.NONE;
bannerBox.add_child(this._bannerLabel);
+
+ this._updateBannerMessageFile();
this._updateBanner().catch(logError);
this._sessionMenuButton = new SessionMenuButton();
@@ -873,13 +887,48 @@ export const LoginDialog = GObject.registerClass({
this._authPrompt.cancelButton.visible = cancelVisible;
}
+ _updateBannerMessageFile() {
+ const path = this._settings.get_string(GdmUtil.BANNER_MESSAGE_SOURCE_KEY) === 'file'
+ ? this._settings.get_string(GdmUtil.BANNER_MESSAGE_PATH_KEY)
+ : null;
+ const file = path
+ ? Gio.File.new_for_path(path)
+ : null;
+
+ if (!file && !this._bannerMessageFile)
+ return false;
+
+ if (file && this._bannerMessageFile && this._bannerMessageFile.equal(file))
+ return false;
+
+ this._bannerMessageMonitor?.disconnectObject(this);
+ this._bannerMessageMonitor = null;
+
+ this._bannerMessageFile = file;
+
+ if (file) {
+ this._bannerMessageMonitor = file.monitor_file(Gio.FileMonitorFlags.NONE, null);
+ this._bannerMessageMonitor.connectObject(
+ 'changed', () => this._updateBanner().catch(logError), this);
+ }
+
+ return true;
+ }
+
async _getBannerText() {
const enabled = this._settings.get_boolean(GdmUtil.BANNER_MESSAGE_KEY);
if (!enabled)
return null;
- // placeholder
- await false;
+ if (this._bannerMessageFile) {
+ try {
+ const [contents] = await this._bannerMessageFile.load_contents_async(null);
+ return new TextDecoder().decode(contents);
+ } catch (e) {
+ console.error(`Failed to read banner from ${this._bannerMessageFile.get_path()}: ${e.message}`);
+ return null;
+ }
+ }
return this._settings.get_string(GdmUtil.BANNER_MESSAGE_TEXT_KEY);
}
diff --git a/js/gdm/util.js b/js/gdm/util.js
index 1e0154f36f..f6b797c321 100644
--- a/js/gdm/util.js
+++ b/js/gdm/util.js
@@ -33,7 +33,9 @@ export const PASSWORD_AUTHENTICATION_KEY = 'enable-password-authentication';
export const FINGERPRINT_AUTHENTICATION_KEY = 'enable-fingerprint-authentication';
export const SMARTCARD_AUTHENTICATION_KEY = 'enable-smartcard-authentication';
export const BANNER_MESSAGE_KEY = 'banner-message-enable';
+export const BANNER_MESSAGE_SOURCE_KEY = 'banner-message-source';
export const BANNER_MESSAGE_TEXT_KEY = 'banner-message-text';
+export const BANNER_MESSAGE_PATH_KEY = 'banner-message-path';
export const ALLOWED_FAILURES_KEY = 'allowed-failures';
export const LOGO_KEY = 'logo';
--
2.48.1

View File

@ -0,0 +1,29 @@
From 8fcaf1708fee86b1c16c9749dc1794be5a2a86fd Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Mon, 28 Feb 2022 10:27:09 -0500
Subject: [PATCH] data: Enable logo extension out of the box
Our brand team would like the logo extension to be used on new
installs.
This commit makes sure it gets enabled out of the box.
---
data/org.gnome.shell.gschema.xml.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 3dd9d2d86b..fe1e266f8c 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -12,7 +12,7 @@
</description>
</key>
<key name="enabled-extensions" type="as">
- <default>[]</default>
+ <default>['background-logo@fedorahosted.org']</default>
<summary>UUIDs of extensions to enable</summary>
<description>
GNOME Shell extensions have a UUID property; this key lists extensions
--
2.45.2

View File

@ -0,0 +1,35 @@
From 8a6298a1e7f7d46abf86ddec8ca2c8edbe4a589f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 17 Sep 2014 07:11:12 +0200
Subject: [PATCH] Replace Web with Firefox in default favorites
---
data/default-apps/dash.txt | 2 +-
js/ui/appFavorites.js | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt
index d0c2c21eb8..a926311701 100644
--- a/data/default-apps/dash.txt
+++ b/data/default-apps/dash.txt
@@ -1,4 +1,4 @@
-org.gnome.Epiphany.desktop
+org.mozilla.Firefox.desktop
org.gnome.Calendar.desktop
org.gnome.Music.desktop
gnome.Nautilus.desktop
diff --git a/js/ui/appFavorites.js b/js/ui/appFavorites.js
index e3a76dce96..b6525f3cc9 100644
--- a/js/ui/appFavorites.js
+++ b/js/ui/appFavorites.js
@@ -48,6 +48,7 @@ const RENAMED_DESKTOP_IDS = {
'gnotski.desktop': 'org.gnome.Klotski.desktop',
'gtali.desktop': 'org.gnome.Tali.desktop',
'iagno.desktop': 'org.gnome.Reversi.desktop',
+ 'firefox.desktop': 'org.mozilla.firefox.desktop',
'nautilus.desktop': 'org.gnome.Nautilus.desktop',
'org.gnome.gnome-2048.desktop': 'org.gnome.TwentyFortyEight.desktop',
'org.gnome.taquin.desktop': 'org.gnome.Taquin.desktop',
--
2.48.1

View File

@ -0,0 +1,23 @@
From c20b996f0cf89d4620d01fa777787b80b15c8a37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Thu, 9 Mar 2017 14:44:32 +0100
Subject: [PATCH] appFavorites: Add terminal
---
data/default-apps/dash.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt
index a926311701..5178256f6a 100644
--- a/data/default-apps/dash.txt
+++ b/data/default-apps/dash.txt
@@ -3,5 +3,6 @@ org.gnome.Calendar.desktop
org.gnome.Music.desktop
gnome.Nautilus.desktop
org.gnome.Software.desktop
+org.gnome.Ptyxis.desktop
org.gnome.TextEditor.desktop
org.gnome.Calculator.desktop
--
2.48.1

1983
gnome-shell.spec Normal file

File diff suppressed because it is too large Load Diff

1
sources Normal file
View File

@ -0,0 +1 @@
65a0dab1bdd6957e52c624fde21ff3fe1d189aa0d6e2a13035ab53ab51e82ff8a88d28a5308c77d4650d5e1b0f643be702ee767379c96a10308752924c79dd72 gnome-shell-47.4.tar.xz

384
tweak-app-defaults.patch Normal file
View File

@ -0,0 +1,384 @@
From cfeade9501e158b426f571d05ab15ee6dbe49e75 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 7 Feb 2025 15:01:48 +0100
Subject: [PATCH 1/3] data: Generate dash/app-grid defaults from text files
Defining default apps as serialized GVariants isn't very human-friendly,
which likely contributes to the fact that the lists are in parts horribly
outdated (Books! Cheese! Screenshot! gedit!).
Instead, generate the lists at build time from simple text files, which
should be much easier to update.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>
---
data/default-apps/app-grid.txt | 21 ++++++++++++++
data/default-apps/dash.txt | 6 ++++
data/default-apps/utilities-folder.txt | 17 +++++++++++
data/meson.build | 8 ++++++
data/org.gnome.shell.gschema.xml.in | 28 +++---------------
js/misc/config.js.in | 2 ++
js/misc/meson.build | 4 +++
js/ui/appDisplay.js | 19 ++----------
meson.build | 1 +
meson/generate-app-list.py | 40 ++++++++++++++++++++++++++
10 files changed, 106 insertions(+), 40 deletions(-)
create mode 100644 data/default-apps/app-grid.txt
create mode 100644 data/default-apps/dash.txt
create mode 100644 data/default-apps/utilities-folder.txt
create mode 100755 meson/generate-app-list.py
diff --git a/data/default-apps/app-grid.txt b/data/default-apps/app-grid.txt
new file mode 100644
index 0000000000..d78ed165eb
--- /dev/null
+++ b/data/default-apps/app-grid.txt
@@ -0,0 +1,21 @@
+org.gnome.Geary.desktop
+org.gnome.Contacts.desktop
+org.gnome.Weather.desktop
+org.gnome.clocks.desktop
+org.gnome.Maps.desktop
+org.gnome.Books.desktop
+org.gnome.Photos.desktop
+org.gnome.Totem.desktop
+org.gnome.Calculator.desktop
+org.gnome.gedit.desktop
+simple-scan.desktop
+org.gnome.Settings.desktop
+org.gnome.SystemMonitor.desktop
+org.gnome.Boxes.desktop
+org.gnome.Terminal.desktop
+Utilities # folder
+org.gnome.Characters.desktop
+yelp.desktop
+org.gnome.Screenshot.desktop
+org.gnome.Cheese.desktop
+org.gnome.font-viewer.desktop
diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt
new file mode 100644
index 0000000000..2a8e8bcd06
--- /dev/null
+++ b/data/default-apps/dash.txt
@@ -0,0 +1,6 @@
+org.gnome.Epiphany.desktop
+org.gnome.Calendar.desktop
+org.gnome.Music.desktop
+gnome.Nautilus.desktop
+org.gnome.Software.desktop
+org.gnome.TextEditor.desktop
diff --git a/data/default-apps/utilities-folder.txt b/data/default-apps/utilities-folder.txt
new file mode 100644
index 0000000000..6169977751
--- /dev/null
+++ b/data/default-apps/utilities-folder.txt
@@ -0,0 +1,17 @@
+# Sorted by name as shown in menus, not filename
+nm-connection-editor.desktop # Advanced Network Configuration
+org.gnome.DejaDup.desktop # Backups
+org.gnome.Characters.desktop # Characters
+org.gnome.Connections.desktop # Connections
+org.gnome.DiskUtility.desktop # Disks
+org.gnome.baobab.desktop # Disk Usage Analyzer
+org.gnome.Evince.desktop # Document Viewer
+org.gnome.FileRoller.desktop # File Roller
+org.gnome.font-viewer.desktop # Fonts
+org.gnome.Loupe.desktop # Image Viewer
+org.gnome.Logs.desktop # Logs
+org.freedesktop.MalcontentControl.desktop # Parental Controls
+org.gnome.seahorse.Application.desktop # Passwords and Keys
+org.freedesktop.GnomeAbrt.desktop # Problem Reporting
+org.gnome.tweaks.desktop # Tweaks
+org.gnome.Usage.desktop # Usage
diff --git a/data/meson.build b/data/meson.build
index ed13b6baea..c7565ee810 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -90,6 +90,14 @@ install_data(keybinding_files, install_dir: keysdir)
schemaconf = configuration_data()
schemaconf.set('GETTEXT_PACKAGE', meson.project_name())
+schemaconf.set('DASH_APPS', run_command(
+ generate_app_list, 'default-apps/dash.txt',
+ check: true,
+).stdout())
+schemaconf.set('APP_GRID_APPS', run_command(
+ generate_app_list, '--pages', 'default-apps/app-grid.txt',
+ check: true,
+).stdout())
schema = configure_file(
input: 'org.gnome.shell.gschema.xml.in',
output: 'org.gnome.shell.gschema.xml',
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 3cd37692a7..b1c2534f9c 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -61,7 +61,9 @@
</description>
</key>
<key name="favorite-apps" type="as">
- <default>[ 'org.gnome.Epiphany.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop']</default>
+ <default>
+ @DASH_APPS@
+ </default>
<summary>List of desktop file IDs for favorite applications</summary>
<description>
The applications corresponding to these identifiers
@@ -118,29 +120,7 @@
</key>
<key name="app-picker-layout" type="aa{sv}">
<default><![CDATA[
- [{
- 'org.gnome.Geary.desktop': <{'position': <0>}>,
- 'org.gnome.Contacts.desktop': <{'position': <1>}>,
- 'org.gnome.Weather.desktop': <{'position': <2>}>,
- 'org.gnome.clocks.desktop': <{'position': <3>}>,
- 'org.gnome.Maps.desktop': <{'position': <4>}>,
- 'org.gnome.Books.desktop': <{'position': <5>}>,
- 'org.gnome.Photos.desktop': <{'position': <6>}>,
- 'org.gnome.Totem.desktop': <{'position': <7>}>,
- 'org.gnome.Calculator.desktop': <{'position': <8>}>,
- 'org.gnome.gedit.desktop': <{'position': <9>}>,
- 'simple-scan.desktop': <{'position': <10>}>,
- 'org.gnome.Settings.desktop': <{'position': <11>}>,
- 'org.gnome.SystemMonitor.desktop': <{'position': <12>}>,
- 'org.gnome.Boxes.desktop': <{'position': <13>}>,
- 'org.gnome.Terminal.desktop': <{'position': <14>}>,
- 'Utilities': <{'position': <15>}>,
- 'org.gnome.Characters.desktop': <{'position': <16>}>,
- 'yelp.desktop': <{'position': <17>}>,
- 'org.gnome.Screenshot.desktop': <{'position': <18>}>,
- 'org.gnome.Cheese.desktop': <{'position': <19>}>,
- 'org.gnome.font-viewer.desktop': <{'position': <20>}>
- }]
+ @APP_GRID_APPS@
]]></default>
<summary>Layout of the app picker</summary>
<description>
diff --git a/js/misc/config.js.in b/js/misc/config.js.in
index a5069e438a..6485d614f5 100644
--- a/js/misc/config.js.in
+++ b/js/misc/config.js.in
@@ -20,3 +20,5 @@ export const LIBMUTTER_API_VERSION = '@LIBMUTTER_API_VERSION@';
export const HAVE_BLUETOOTH = pkg.checkSymbol('GnomeBluetooth', '3.0',
'Client.default_adapter_state');
+
+export const UTILITIES_FOLDER_APPS = @UTILS_FOLDER_APPS@;
diff --git a/js/misc/meson.build b/js/misc/meson.build
index 5fc8ca433f..4b137ef3e6 100644
--- a/js/misc/meson.build
+++ b/js/misc/meson.build
@@ -5,6 +5,10 @@ jsconf.set('GETTEXT_PACKAGE', meson.project_name())
jsconf.set('LIBMUTTER_API_VERSION', mutter_api_version)
jsconf.set10('HAVE_NETWORKMANAGER', have_networkmanager)
jsconf.set10('HAVE_PORTAL_HELPER', have_portal_helper)
+jsconf.set('UTILS_FOLDER_APPS', run_command(
+ generate_app_list, '../../data/default-apps/utilities-folder.txt',
+ check: true,
+).stdout())
jsconf.set('datadir', datadir)
jsconf.set('libexecdir', libexecdir)
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index bdce3bdeed..992004b8f9 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -24,6 +24,8 @@ import * as SystemActions from '../misc/systemActions.js';
import * as Main from './main.js';
+import {UTILITIES_FOLDER_APPS} from '../misc/config.js';
+
const MENU_POPUP_TIMEOUT = 600;
const POPDOWN_DIALOG_TIMEOUT = 500;
@@ -60,22 +62,7 @@ const DEFAULT_FOLDERS = {
'Utilities': {
name: 'X-GNOME-Utilities.directory',
categories: ['X-GNOME-Utilities'],
- apps: [
- 'org.freedesktop.GnomeAbrt.desktop',
- 'nm-connection-editor.desktop',
- 'org.gnome.baobab.desktop',
- 'org.gnome.Connections.desktop',
- 'org.gnome.DejaDup.desktop',
- 'org.gnome.DiskUtility.desktop',
- 'org.gnome.Evince.desktop',
- 'org.gnome.FileRoller.desktop',
- 'org.gnome.font-viewer.desktop',
- 'org.gnome.Loupe.desktop',
- 'org.freedesktop.MalcontentControl.desktop',
- 'org.gnome.seahorse.Application.desktop',
- 'org.gnome.tweaks.desktop',
- 'org.gnome.Usage.desktop',
- ],
+ apps: UTILITIES_FOLDER_APPS,
},
'YaST': {
name: 'suse-yast.directory',
diff --git a/meson.build b/meson.build
index c9955ca651..6f10a366bf 100644
--- a/meson.build
+++ b/meson.build
@@ -137,6 +137,7 @@ endif
mutter_typelibdir = mutter_dep.get_variable('typelibdir')
python = find_program('python3')
gjs = find_program('gjs')
+generate_app_list = find_program('meson/generate-app-list.py')
cc = meson.get_compiler('c')
diff --git a/meson/generate-app-list.py b/meson/generate-app-list.py
new file mode 100755
index 0000000000..067c36967c
--- /dev/null
+++ b/meson/generate-app-list.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python3
+
+import argparse
+
+def read_app_ids(path) -> str:
+ ids = []
+ with open(path, "r") as file:
+ for line in file:
+ # strip comments
+ line, _, _ = line.partition('#');
+ line = line.strip()
+ if len(line) > 0:
+ ids.append(line)
+ return ids
+
+def print_as_array(ids):
+ mapped_ids = list(map(lambda i: f" '{i}'", ids))
+ print('[')
+ print(',\n'.join(mapped_ids))
+ print(']')
+
+def print_as_pages(ids):
+ mapped_ids = []
+ for i, id in enumerate(ids):
+ mapped_ids.append(f" '{id}': <{{'position': <{i}>}}>")
+
+ print('[{')
+ print(',\n'.join(mapped_ids))
+ print('}]')
+
+parser = argparse.ArgumentParser()
+parser.add_argument('--pages', action='store_true')
+parser.add_argument('file')
+args = parser.parse_args()
+
+ids = read_app_ids(args.file)
+if args.pages:
+ print_as_pages(ids)
+else:
+ print_as_array(ids)
--
2.48.1
From aeb7adf061d74d75edc85f65520cb404e8a4361d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 14 Feb 2025 15:44:30 +0100
Subject: [PATCH 2/3] data: Tweak dash/app-grid defaults
With the current RHEL 10 app set, the dash and app grid look
rather empty.
Address this by
- adding Calculator to dash
- moving Characters and Baobab out of the Utilities folder
With those changes, there are at least 5 apps in the dash and 2 rows
in the app grid.
---
data/default-apps/dash.txt | 1 +
data/default-apps/utilities-folder.txt | 2 --
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/data/default-apps/dash.txt b/data/default-apps/dash.txt
index 2a8e8bcd06..d0c2c21eb8 100644
--- a/data/default-apps/dash.txt
+++ b/data/default-apps/dash.txt
@@ -4,3 +4,4 @@ org.gnome.Music.desktop
gnome.Nautilus.desktop
org.gnome.Software.desktop
org.gnome.TextEditor.desktop
+org.gnome.Calculator.desktop
diff --git a/data/default-apps/utilities-folder.txt b/data/default-apps/utilities-folder.txt
index 6169977751..187e3cfc54 100644
--- a/data/default-apps/utilities-folder.txt
+++ b/data/default-apps/utilities-folder.txt
@@ -1,10 +1,8 @@
# Sorted by name as shown in menus, not filename
nm-connection-editor.desktop # Advanced Network Configuration
org.gnome.DejaDup.desktop # Backups
-org.gnome.Characters.desktop # Characters
org.gnome.Connections.desktop # Connections
org.gnome.DiskUtility.desktop # Disks
-org.gnome.baobab.desktop # Disk Usage Analyzer
org.gnome.Evince.desktop # Document Viewer
org.gnome.FileRoller.desktop # File Roller
org.gnome.font-viewer.desktop # Fonts
--
2.48.1
From 7a21fca2f59d68896f54600b64e5d9a216203e9e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Fri, 7 Feb 2025 15:54:15 +0100
Subject: [PATCH 3/3] appDisplay: Filter apps in default folder
We currently create the default folder with the corresponding
app list, regardless of whether the apps are actually part of
the default install or not.
This matters when a user explicitly install such an app later,
as it will be hidden away in the folder rather than appended
to the app grid as expected.
To avoid that, only add currently-installed apps to the folder
when creating it.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>
---
js/ui/appDisplay.js | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index 992004b8f9..6bd2d899cd 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -1419,12 +1419,16 @@ class AppDisplay extends BaseAppView {
if (this._folderSettings.get_strv('folder-children').length > 0)
return;
+ const appSys = Shell.AppSystem.get_default();
const folders = Object.keys(DEFAULT_FOLDERS);
this._folderSettings.set_strv('folder-children', folders);
const {path} = this._folderSettings;
for (const folder of folders) {
const {name, categories, apps} = DEFAULT_FOLDERS[folder];
+ const filteredApps = apps
+ ? apps.filter(id => appSys.lookup_app(id) != null)
+ : [];
const child = new Gio.Settings({
schema_id: 'org.gnome.desktop.app-folders.folder',
path: `${path}folders/${folder}/`,
@@ -1432,8 +1436,8 @@ class AppDisplay extends BaseAppView {
child.set_string('name', name);
child.set_boolean('translate', true);
child.set_strv('categories', categories);
- if (apps)
- child.set_strv('apps', apps);
+ if (filteredApps.length > 0)
+ child.set_strv('apps', filteredApps);
}
}
--
2.48.1