From b1227a1d04431964bdc3f927e27710d2a63901b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 16 Apr 2024 20:51:39 +0200 Subject: [PATCH] Re-apply downstream patches Not all patches have been upstreamed, so re-apply the changes from RHEL 9 that are still relevant. Downstream branding will be different in RHEL 10, so it has been left out for now and will be handled in a separate issue. Resolves: RHEL-32989 --- ...-to-window-title-instead-of-WM_CLASS.patch | 28 +++ 0001-data-Update-generated-stylesheets.patch | 59 ++++++ ...der-Refuse-to-override-system-extens.patch | 37 ++++ ...oginDialog-make-info-messages-themed.patch | 30 +++ ...n-Dump-stack-on-segfaults-by-default.patch | 38 ++++ ...eld-unblank-when-inserting-smartcard.patch | 33 ++++ 0001-st-texture-cache-purge-on-resume.patch | 66 +++++++ ...-back-workspaces-submenu-for-static-.patch | 45 +++++ ...erride-with-window-icon-if-available.patch | 46 +++++ disable-unlock-entry-until-question.patch | 178 ++++++++++++++++++ enforce-smartcard-at-unlock.patch | 113 +++++++++++ fix-some-js-warnings.patch | 62 ++++++ ...-enabled-extensions-background-logos.patch | 29 +++ gnome-shell-favourite-apps-terminal.patch | 25 +++ gnome-shell.spec | 23 ++- 15 files changed, 811 insertions(+), 1 deletion(-) create mode 100644 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch create mode 100644 0001-data-Update-generated-stylesheets.patch create mode 100644 0001-extensionDownloader-Refuse-to-override-system-extens.patch create mode 100644 0001-loginDialog-make-info-messages-themed.patch create mode 100644 0001-main-Dump-stack-on-segfaults-by-default.patch create mode 100644 0001-screenShield-unblank-when-inserting-smartcard.patch create mode 100644 0001-st-texture-cache-purge-on-resume.patch create mode 100644 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch create mode 100644 0001-windowPreview-Override-with-window-icon-if-available.patch create mode 100644 disable-unlock-entry-until-question.patch create mode 100644 enforce-smartcard-at-unlock.patch create mode 100644 fix-some-js-warnings.patch create mode 100644 gnome-shell-enabled-extensions-background-logos.patch create mode 100644 gnome-shell-favourite-apps-terminal.patch diff --git a/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch b/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch new file mode 100644 index 0000000..506d112 --- /dev/null +++ b/0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch @@ -0,0 +1,28 @@ +From 45ffbb8caf46465608fb4de883114e94f1128b12 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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 3b5df0aabb..b36a7c4e01 100644 +--- a/src/shell-app.c ++++ b/src/shell-app.c +@@ -248,7 +248,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.44.0 + diff --git a/0001-data-Update-generated-stylesheets.patch b/0001-data-Update-generated-stylesheets.patch new file mode 100644 index 0000000..c480355 --- /dev/null +++ b/0001-data-Update-generated-stylesheets.patch @@ -0,0 +1,59 @@ +From b92d3d070a2f397d6588af99dcb4a8cb98f65b8c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Tue, 16 Apr 2024 20:49:40 +0200 +Subject: [PATCH] data: Update generated stylesheets + +--- + data/theme/gnome-shell-dark.css | 4 ++++ + data/theme/gnome-shell-high-contrast.css | 4 ++++ + data/theme/gnome-shell-light.css | 4 ++++ + 3 files changed, 12 insertions(+) + +diff --git a/data/theme/gnome-shell-dark.css b/data/theme/gnome-shell-dark.css +index 70ca5deaa4..76c3334873 100644 +--- a/data/theme/gnome-shell-dark.css ++++ b/data/theme/gnome-shell-dark.css +@@ -2917,6 +2917,10 @@ StScrollBar { + .login-dialog-message { + text-align: center; } + ++.login-dialog-message-hint, .login-dialog-message { ++ color: #c2c2c2; ++ min-height: 2.75em; } ++ + .login-dialog-user-selection-box { + padding-top: 4em; + padding-bottom: 8em; } +diff --git a/data/theme/gnome-shell-high-contrast.css b/data/theme/gnome-shell-high-contrast.css +index 2751b77209..3e326542db 100644 +--- a/data/theme/gnome-shell-high-contrast.css ++++ b/data/theme/gnome-shell-high-contrast.css +@@ -3211,6 +3211,10 @@ StScrollBar { + .login-dialog-message { + text-align: center; } + ++.login-dialog-message-hint, .login-dialog-message { ++ color: #cccccc; ++ min-height: 2.75em; } ++ + .login-dialog-user-selection-box { + padding-top: 4em; + padding-bottom: 8em; } +diff --git a/data/theme/gnome-shell-light.css b/data/theme/gnome-shell-light.css +index 263ecd87f0..7ef7063367 100644 +--- a/data/theme/gnome-shell-light.css ++++ b/data/theme/gnome-shell-light.css +@@ -2917,6 +2917,10 @@ StScrollBar { + .login-dialog-message { + text-align: center; } + ++.login-dialog-message-hint, .login-dialog-message { ++ color: #c2c2c2; ++ min-height: 2.75em; } ++ + .login-dialog-user-selection-box { + padding-top: 4em; + padding-bottom: 8em; } +-- +2.43.2 + diff --git a/0001-extensionDownloader-Refuse-to-override-system-extens.patch b/0001-extensionDownloader-Refuse-to-override-system-extens.patch new file mode 100644 index 0000000..1674c6e --- /dev/null +++ b/0001-extensionDownloader-Refuse-to-override-system-extens.patch @@ -0,0 +1,37 @@ +From 26ad129561209ce62ebe2f43db5536840fcc34b0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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.44.0 + diff --git a/0001-loginDialog-make-info-messages-themed.patch b/0001-loginDialog-make-info-messages-themed.patch new file mode 100644 index 0000000..e237d75 --- /dev/null +++ b/0001-loginDialog-make-info-messages-themed.patch @@ -0,0 +1,30 @@ +From d6a0011a893ad736eb0ca18e3018acaca3000f15 Mon Sep 17 00:00:00 2001 +From: Ray Strode +Date: Mon, 26 Jun 2017 14:35:05 -0400 +Subject: [PATCH] loginDialog: make info messages themed + +They were lacking a definition before leading them to +show up invisible. +--- + data/theme/gnome-shell-sass/widgets/_login-lock.scss | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/data/theme/gnome-shell-sass/widgets/_login-lock.scss b/data/theme/gnome-shell-sass/widgets/_login-lock.scss +index 4dc9aec0b5..c9bc223db9 100644 +--- a/data/theme/gnome-shell-sass/widgets/_login-lock.scss ++++ b/data/theme/gnome-shell-sass/widgets/_login-lock.scss +@@ -80,6 +80,11 @@ $_gdm_dialog_width: 25em; + text-align: center; + } + ++.login-dialog-message-hint, .login-dialog-message { ++ color: darken($_gdm_fg, 20%); ++ min-height: 2.75em; ++} ++ + .login-dialog-user-selection-box { + // padding to ensure the box doesn't overlap the panel + padding-top: 4em; +-- +2.44.0 + diff --git a/0001-main-Dump-stack-on-segfaults-by-default.patch b/0001-main-Dump-stack-on-segfaults-by-default.patch new file mode 100644 index 0000000..022323a --- /dev/null +++ b/0001-main-Dump-stack-on-segfaults-by-default.patch @@ -0,0 +1,38 @@ +From 4c9b458862942ed8dafc13d6475a476843894977 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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 10b5f6eb0f..51b0f8d41b 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.44.0 + diff --git a/0001-screenShield-unblank-when-inserting-smartcard.patch b/0001-screenShield-unblank-when-inserting-smartcard.patch new file mode 100644 index 0000000..fc03e4f --- /dev/null +++ b/0001-screenShield-unblank-when-inserting-smartcard.patch @@ -0,0 +1,33 @@ +From 9ed103334c211058e039dd1ad76351bfc5d9866e Mon Sep 17 00:00:00 2001 +From: Ray Strode +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.44.0 + diff --git a/0001-st-texture-cache-purge-on-resume.patch b/0001-st-texture-cache-purge-on-resume.patch new file mode 100644 index 0000000..0d6b6af --- /dev/null +++ b/0001-st-texture-cache-purge-on-resume.patch @@ -0,0 +1,66 @@ +From 458413d859549b12c6be5c263d3f9a66adf2e929 Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 9f1697df2b..8cb2963d34 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -265,7 +265,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 b93db94b5a..07ce0e00bc 100644 +--- a/src/st/st-texture-cache.c ++++ b/src/st/st-texture-cache.c +@@ -129,6 +129,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->priv->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 1c5be957c4..1a4bfde73f 100644 +--- a/src/st/st-texture-cache.h ++++ b/src/st/st-texture-cache.h +@@ -52,6 +52,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.44.0 + diff --git a/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch b/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch new file mode 100644 index 0000000..2710123 --- /dev/null +++ b/0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch @@ -0,0 +1,45 @@ +From 5eaadd46539a9f6154bc32e87a6c50b420349768 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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 571a193580..76d630911a 100644 +--- a/js/ui/windowMenu.js ++++ b/js/ui/windowMenu.js +@@ -159,6 +159,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.44.0 + diff --git a/0001-windowPreview-Override-with-window-icon-if-available.patch b/0001-windowPreview-Override-with-window-icon-if-available.patch new file mode 100644 index 0000000..b1ab9ef --- /dev/null +++ b/0001-windowPreview-Override-with-window-icon-if-available.patch @@ -0,0 +1,46 @@ +From 4a18727ea97fbb676b90183c2154d4cc316133a4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 7 Mar 2024 18:22:32 +0100 +Subject: [PATCH] windowPreview: Override with window icon if available + +--- + js/ui/windowPreview.js | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/js/ui/windowPreview.js b/js/ui/windowPreview.js +index d865e6e25b..889dc18797 100644 +--- a/js/ui/windowPreview.js ++++ b/js/ui/windowPreview.js +@@ -133,6 +133,12 @@ export const WindowPreview = GObject.registerClass({ + const tracker = Shell.WindowTracker.get_default(); + const app = tracker.get_window_app(this.metaWindow); + this._icon = app.create_icon_texture(ICON_SIZE); ++ // Override with window icon if available ++ if (this._hasWindowIcon()) { ++ const textureCache = St.TextureCache.get_default(); ++ this._icon.gicon = textureCache.bind_cairo_surface_property( ++ this.metaWindow, 'icon'); ++ } + this._icon.add_style_class_name('icon-dropshadow'); + this._icon.set({ + reactive: true, +@@ -234,6 +240,16 @@ export const WindowPreview = GObject.registerClass({ + }); + } + ++ _hasWindowIcon() { ++ // HACK: GI cannot handle CairoSurface, so this ++ // will throw if the icon property is non-null ++ try { ++ return this.metaWindow.icon !== null; ++ } catch (e) { ++ return true; ++ } ++ } ++ + _updateIconScale() { + const {ControlsState} = OverviewControls; + const {currentState, initialState, finalState} = +-- +2.44.0 + diff --git a/disable-unlock-entry-until-question.patch b/disable-unlock-entry-until-question.patch new file mode 100644 index 0000000..b45f9ec --- /dev/null +++ b/disable-unlock-entry-until-question.patch @@ -0,0 +1,178 @@ +From a3d52b89afd3e56c682d6aaf5cdabd2443e1fbc9 Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 ec1c931e63..a67d0443c5 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -209,7 +209,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.44.0 + + +From 960be98ad1416de71430eebba76fd0bd94f16747 Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 a67d0443c5..36d26be7dc 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -273,13 +273,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.44.0 + + +From 7368f8100520bf84f7302ed6427bb91e5a55e8b1 Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 | 37 +++++++++++++++++++++++++++++++++++++ + 1 file changed, 37 insertions(+) + +diff --git a/js/gdm/authPrompt.js b/js/gdm/authPrompt.js +index 36d26be7dc..9da6fcf497 100644 +--- a/js/gdm/authPrompt.js ++++ b/js/gdm/authPrompt.js +@@ -3,6 +3,7 @@ + import Clutter from 'gi://Clutter'; + import GLib from 'gi://GLib'; + import GObject from 'gi://GObject'; ++import Meta from 'gi://Meta'; + import Pango from 'gi://Pango'; + import Shell from 'gi://Shell'; + import St from 'gi://St'; +@@ -70,6 +71,8 @@ export const AuthPrompt = GObject.registerClass({ + this._defaultButtonWellActor = null; + this._cancelledRetries = 0; + ++ this._idleMonitor = Meta.IdleMonitor.get_core(); ++ + let reauthenticationOnly; + if (this._mode === AuthPromptMode.UNLOCK_ONLY) + reauthenticationOnly = true; +@@ -127,8 +130,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; + } +@@ -280,6 +289,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'); +@@ -491,6 +505,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(); +@@ -612,6 +631,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; +@@ -619,6 +651,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.44.0 + diff --git a/enforce-smartcard-at-unlock.patch b/enforce-smartcard-at-unlock.patch new file mode 100644 index 0000000..1dcfa8f --- /dev/null +++ b/enforce-smartcard-at-unlock.patch @@ -0,0 +1,113 @@ +From 420178f0f4711b3d58c9880008cf847a99fb438b Mon Sep 17 00:00:00 2001 +From: Ray Strode +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.44.0 + + +From add283227afed3e32d9dd7c93b211e012d9fd85a Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/js/gdm/util.js b/js/gdm/util.js +index 97df6d687e..cfb430a24e 100644 +--- a/js/gdm/util.js ++++ b/js/gdm/util.js +@@ -125,7 +125,6 @@ export class ShellUserVerifier extends Signals.EventEmitter { + this._settings = new Gio.Settings({schema_id: LOGIN_SCREEN_SCHEMA}); + this._settings.connect('changed', () => this._onSettingsChanged()); + this._updateEnabledServices(); +- this._updateDefaultService(); + + this.addCredentialManager(OVirt.SERVICE_NAME, OVirt.getOVirtCredentialsManager()); + this.addCredentialManager(Vmware.SERVICE_NAME, Vmware.getVmwareCredentialsManager()); +@@ -463,6 +462,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); +@@ -641,7 +642,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.44.0 + + +From 2ad44eb49ab436df194d5ad78a73aef02f67a220 Mon Sep 17 00:00:00 2001 +From: Ray Strode +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 cfb430a24e..e4777225a0 100644 +--- a/js/gdm/util.js ++++ b/js/gdm/util.js +@@ -487,6 +487,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.44.0 + diff --git a/fix-some-js-warnings.patch b/fix-some-js-warnings.patch new file mode 100644 index 0000000..47ed7ff --- /dev/null +++ b/fix-some-js-warnings.patch @@ -0,0 +1,62 @@ +From 37c02e06a05170cd32acc683f745cc47bf3e52a4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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 3842d82181..2ff781a80b 100644 +--- a/js/ui/popupMenu.js ++++ b/js/ui/popupMenu.js +@@ -825,7 +825,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.44.0 + + +From a64fa15ced5e56f0b9265dc4b2482ea32e58a25b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +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 a5a0a85d09..1072cf56a7 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, + guint8 paint_opacity) + { +- _st_paint_shadow_with_opacity (helper->shadow, +- framebuffer, +- helper->pipeline, +- actor_box, +- paint_opacity); ++ if (helper->pipeline != NULL) ++ _st_paint_shadow_with_opacity (helper->shadow, ++ framebuffer, ++ helper->pipeline, ++ actor_box, ++ paint_opacity); + } +-- +2.44.0 + diff --git a/gnome-shell-enabled-extensions-background-logos.patch b/gnome-shell-enabled-extensions-background-logos.patch new file mode 100644 index 0000000..19b2e70 --- /dev/null +++ b/gnome-shell-enabled-extensions-background-logos.patch @@ -0,0 +1,29 @@ +From fd6c784f6142c19307952d0bc7ef832ac10790dd Mon Sep 17 00:00:00 2001 +From: 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 @@ + + + +- [] ++ ['background-logo@fedorahosted.org'] + UUIDs of extensions to enable + + GNOME Shell extensions have a UUID property; this key lists extensions +-- +2.44.0 + diff --git a/gnome-shell-favourite-apps-terminal.patch b/gnome-shell-favourite-apps-terminal.patch new file mode 100644 index 0000000..c17edee --- /dev/null +++ b/gnome-shell-favourite-apps-terminal.patch @@ -0,0 +1,25 @@ +From 204f14d0cac6f38c5afeb8586ee288e2773b4cb2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 9 Mar 2017 14:44:32 +0100 +Subject: [PATCH] appFavorites: Add terminal + +--- + 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 bd2bd5ead8..3dd9d2d86b 100644 +--- a/data/org.gnome.shell.gschema.xml.in ++++ b/data/org.gnome.shell.gschema.xml.in +@@ -61,7 +61,7 @@ + + + +- [ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.TextEditor.desktop'] ++ [ 'org.mozilla.firefox.desktop', 'org.gnome.Calendar.desktop', 'org.gnome.Music.desktop', 'org.gnome.Nautilus.desktop', 'org.gnome.Software.desktop', 'org.gnome.Terminal.desktop', 'org.gnome.TextEditor.desktop'] + List of desktop file IDs for favorite applications + + The applications corresponding to these identifiers +-- +2.44.0 + diff --git a/gnome-shell.spec b/gnome-shell.spec index 67d883e..629c6cd 100644 --- a/gnome-shell.spec +++ b/gnome-shell.spec @@ -10,8 +10,11 @@ License: GPL-2.0-or-later URL: https://wiki.gnome.org/Projects/GnomeShell Source0: https://download.gnome.org/sources/gnome-shell/%{major_version}/%{name}-%{tarball_version}.tar.xz -# Replace Epiphany with Firefox in the default favourite apps list +# Replace Epiphany with Firefox in the default favourite apps list, etc +# and enable background extension by default Patch: gnome-shell-favourite-apps-firefox.patch +Patch: gnome-shell-favourite-apps-terminal.patch +Patch: gnome-shell-enabled-extensions-background-logos.patch # No portal helper if WebKitGTK is not installed Patch: optional-portal-helper.patch @@ -20,6 +23,24 @@ Patch: optional-portal-helper.patch # downstream patch to stop trying on configuration errors. Patch: 0001-gdm-Work-around-failing-fingerprint-auth.patch +# GDM/Lock stuff +Patch: 0001-screenShield-unblank-when-inserting-smartcard.patch +Patch: enforce-smartcard-at-unlock.patch +Patch: disable-unlock-entry-until-question.patch +Patch: 0001-loginDialog-make-info-messages-themed.patch + +# Extensions +Patch: 0001-extensionDownloader-Refuse-to-override-system-extens.patch + +# Misc. +Patch: 0001-app-Fall-back-to-window-title-instead-of-WM_CLASS.patch +Patch: 0001-windowPreview-Override-with-window-icon-if-available.patch +Patch: 0001-windowMenu-Bring-back-workspaces-submenu-for-static-.patch +Patch: 0001-main-Dump-stack-on-segfaults-by-default.patch +Patch: 0001-st-texture-cache-purge-on-resume.patch +Patch: fix-some-js-warnings.patch +Patch: 0001-data-Update-generated-stylesheets.patch + %define eds_version 3.45.1 %define gnome_desktop_version 44.0-7 %define glib2_version 2.56.0