diff --git a/SOURCES/0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch b/SOURCES/0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch new file mode 100644 index 0000000..c052297 --- /dev/null +++ b/SOURCES/0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch @@ -0,0 +1,49 @@ +From 0d95c2087aba7f0b07cb303c1f15d097b45f1b09 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= +Date: Tue, 28 Apr 2020 23:26:11 +0200 +Subject: [PATCH] main: Unset the right prevFocus actor after the focus stack + got shifted +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a modal that's not on top of the modalActorFocusStack gets popped, +we shift the focus stack as described in popModal() to ensure the chain +remains correct. That however destroys the association of a modal actor +and its prevFocus actor on the focus stack, because the prevFocus actors +are now moved to different entries of the stack. + +Now when a prevFocus actor gets destroyed, we don't handle that case +correctly and search for the modal actor that was associated with the +prevFocus actor before the stack was shifted, which means we end up +unsetting the wrong prevFocus actor. + +So fix that and search the stack for the prevFocus actor which is being +destroyed instead to unset the correct entry. + +Thanks to Florian Müllner for figuring out the actual issue and +proposing this fix. + +Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2446 +--- + js/ui/main.js | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/js/ui/main.js b/js/ui/main.js +index dd1d8463d..ca3dcaa3c 100644 +--- a/js/ui/main.js ++++ b/js/ui/main.js +@@ -486,7 +486,9 @@ function pushModal(actor, params) { + let prevFocusDestroyId; + if (prevFocus != null) { + prevFocusDestroyId = prevFocus.connect('destroy', () => { +- let index = _findModal(actor); ++ const index = modalActorFocusStack.findIndex( ++ record => record.prevFocus === prevFocus); ++ + if (index >= 0) + modalActorFocusStack[index].prevFocus = null; + }); +-- +2.35.1 + diff --git a/SOURCES/0001-shell-recorder-Restore-cursor-recording.patch b/SOURCES/0001-shell-recorder-Restore-cursor-recording.patch new file mode 100644 index 0000000..ffd31d1 --- /dev/null +++ b/SOURCES/0001-shell-recorder-Restore-cursor-recording.patch @@ -0,0 +1,28 @@ +From 3182ad73c8f88628cb51a96feba0fc32ce7f01c9 Mon Sep 17 00:00:00 2001 +From: Illya Klymov +Date: Mon, 8 Jul 2019 03:29:36 +0000 +Subject: [PATCH] shell-recorder: Restore cursor recording + +Due to changes introduced in 5357e0a1 cursor recording interaction with +magnifier was reversed. This fix restores original correct behavior +Related issue: https://gitlab.gnome.org/GNOME/gnome-shell/issues/1208 +--- + src/shell-recorder.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shell-recorder.c b/src/shell-recorder.c +index 0203ecf1c..cf1cc336f 100644 +--- a/src/shell-recorder.c ++++ b/src/shell-recorder.c +@@ -465,7 +465,7 @@ recorder_record_frame (ShellRecorder *recorder, + + g_object_get (settings, "magnifier-active", &magnifier_active, NULL); + +- if (magnifier_active) ++ if (!magnifier_active) + recorder_draw_cursor (recorder, buffer); + } + +-- +2.35.1 + diff --git a/SOURCES/0001-status-volume-Hide-sliders-initially.patch b/SOURCES/0001-status-volume-Hide-sliders-initially.patch new file mode 100644 index 0000000..ab5a86e --- /dev/null +++ b/SOURCES/0001-status-volume-Hide-sliders-initially.patch @@ -0,0 +1,30 @@ +From 4e555e0efeb4b31918e199d29bee99b2a4ed1c8e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Wed, 11 May 2022 02:34:21 +0200 +Subject: [PATCH] status/volume: Hide sliders initially + +We update the visibility on state or stream changes, but those +changes may never happen if pipewire-pulse/pulseaudio isn't +available (for example when running as root). + +Hiding the sliders is preferable in that case to showing non-working +controls. +--- + js/ui/status/volume.js | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js +index d555b426e..ab5065683 100644 +--- a/js/ui/status/volume.js ++++ b/js/ui/status/volume.js +@@ -30,6 +30,7 @@ var StreamSlider = class { + this._control = control; + + this.item = new PopupMenu.PopupBaseMenuItem({ activate: false }); ++ this.item.actor.hide(); + + this._slider = new Slider.Slider(0); + +-- +2.35.1 + diff --git a/SOURCES/defend-against-corrupt-notifications.patch b/SOURCES/defend-against-corrupt-notifications.patch new file mode 100644 index 0000000..9957a7b --- /dev/null +++ b/SOURCES/defend-against-corrupt-notifications.patch @@ -0,0 +1,145 @@ +From 7bdd1962213a37f6218fe15ea1a4062dd318672a Mon Sep 17 00:00:00 2001 +From: Will Thompson +Date: Wed, 28 Aug 2019 15:39:44 +0100 +Subject: [PATCH 1/2] global: Don't trust persistent/runtime state data + +An Endless OS system was found in the wild with a malformed +.local/share/gnome-shell/notifications. When deserialized in Python, +after passing trusted=True to g_variant_new_from_bytes(), the first +element of the first struct in the array looks like this: + + In [41]: _38.get_child_value(0).get_child_value(0) + Out[41]: GLib.Variant('s', '\Uffffffff\Uffffffff\Uffffffff\Uffffffff\Uffffffff') + +When deserialised in GJS, we get: + + gjs> v.get_child_value(0).get_child_value(0) + [object variant of type "s"] + gjs> v.get_child_value(0).get_child_value(0).get_string() + typein:43:1 malformed UTF-8 character sequence at offset 0 + @typein:43:1 + @:1:34 + +While g_variant_new_from_bytes() doesn't have much to say about its +'trusted' parameter, g_variant_new_from_data() does: + +> If data is trusted to be serialised data in normal form then trusted +> should be TRUE. This applies to serialised data created within this +> process or read from a trusted location on the disk (such as a file +> installed in /usr/lib alongside your application). You should set +> trusted to FALSE if data is read from the network, a file in the +> user's home directory, etc. + +Persistent state is read from the user's home directory, so it should +not be trusted. With trusted=False, the string value above comes out as +"". + +I don't have an explanation for how this file ended up being malformed. +I also don't have an explanation for when this started crashing: my +guess is that recent GJS became stricter about validating UTF-8 but I +could be wrong! + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/1552 +--- + src/shell-global.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shell-global.c b/src/shell-global.c +index 4b33778e0..33046f614 100644 +--- a/src/shell-global.c ++++ b/src/shell-global.c +@@ -1707,7 +1707,7 @@ load_variant (GFile *dir, + else + { + GBytes *bytes = g_mapped_file_get_bytes (mfile); +- res = g_variant_new_from_bytes (G_VARIANT_TYPE (property_type), bytes, TRUE); ++ res = g_variant_new_from_bytes (G_VARIANT_TYPE (property_type), bytes, FALSE); + g_bytes_unref (bytes); + g_mapped_file_unref (mfile); + } +-- +2.35.1 + + +From 13dcb3e4400b92a0d2f548e88b70b358240d462c Mon Sep 17 00:00:00 2001 +From: Will Thompson +Date: Wed, 28 Aug 2019 15:38:03 +0100 +Subject: [PATCH 2/2] notificationDaemon: Catch exceptions while loading + notifications + +An Endless OS system was found in the wild with a malformed +.local/share/gnome-shell/notifications which causes _loadNotifications() +to raise an exception. This exception was not previously handled and +bubbles all the way out to gnome_shell_plugin_start(), whereupon the +shell exit(1)s. The user could no longer log into their computer. + +Handle exceptions from _loadNotifications(), log them, and attempt to +continue. Ensure that this._isLoading is set to 'false' even on error, +so that future calls to _saveNotifications() can overwrite the (corrupt) +state file. + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/1552 +--- + js/ui/notificationDaemon.js | 42 ++++++++++++++++++++----------------- + 1 file changed, 23 insertions(+), 19 deletions(-) + +diff --git a/js/ui/notificationDaemon.js b/js/ui/notificationDaemon.js +index 4bdede841..dbe673b88 100644 +--- a/js/ui/notificationDaemon.js ++++ b/js/ui/notificationDaemon.js +@@ -749,29 +749,33 @@ var GtkNotificationDaemon = class GtkNotificationDaemon { + _loadNotifications() { + this._isLoading = true; + +- let value = global.get_persistent_state('a(sa(sv))', 'notifications'); +- if (value) { +- let sources = value.deep_unpack(); +- sources.forEach(([appId, notifications]) => { +- if (notifications.length == 0) +- return; +- +- let source; +- try { +- source = this._ensureAppSource(appId); +- } catch(e) { +- if (e instanceof InvalidAppError) ++ try { ++ let value = global.get_persistent_state('a(sa(sv))', 'notifications'); ++ if (value) { ++ let sources = value.deep_unpack(); ++ sources.forEach(([appId, notifications]) => { ++ if (notifications.length == 0) + return; +- throw e; +- } + +- notifications.forEach(([notificationId, notification]) => { +- source.addNotification(notificationId, notification.deep_unpack(), false); ++ let source; ++ try { ++ source = this._ensureAppSource(appId); ++ } catch (e) { ++ if (e instanceof InvalidAppError) ++ return; ++ throw e; ++ } ++ ++ notifications.forEach(([notificationId, notification]) => { ++ source.addNotification(notificationId, notification.deep_unpack(), false); ++ }); + }); +- }); ++ } ++ } catch (e) { ++ logError(e, 'Failed to load saved notifications'); ++ } finally { ++ this._isLoading = false; + } +- +- this._isLoading = false; + } + + _saveNotifications() { +-- +2.35.1 + diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index 762b958..ac23941 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.32.2 -Release: 44%{?dist} +Release: 47%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -62,26 +62,30 @@ Patch52: 0001-popupMenu-Handle-keypress-if-numlock-is-enabled.patch Patch53: 0001-theme-Update-window-preview-style.patch Patch54: warn-less.patch Patch55: 0001-networkAgent-add-support-for-SAE-secrets.patch +Patch56: 0001-main-Unset-the-right-prevFocus-actor-after-the-focus.patch +Patch57: defend-against-corrupt-notifications.patch +Patch58: 0001-status-volume-Hide-sliders-initially.patch +Patch59: 0001-shell-recorder-Restore-cursor-recording.patch # Backport JS invalid access warnings (#1651894, #1663171, #1642482, #1637622) -Patch57: fix-invalid-access-warnings.patch -Patch58: more-spurious-allocation-warnings.patch -Patch59: fix-some-js-warnings.patch +Patch60: fix-invalid-access-warnings.patch +Patch61: more-spurious-allocation-warnings.patch +Patch62: fix-some-js-warnings.patch # Backport performance fixes under load (#1820760) -Patch60: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch -Patch61: 0002-environment-Fix-date-conversion.patch -Patch62: 0003-shell-app-system-Monitor-for-icon-theme-changes.patch -Patch63: 0004-global-force-fsync-to-worker-thread-when-saving-stat.patch -Patch64: 0005-app-cache-add-ShellAppCache-for-GAppInfo-caching.patch -Patch65: 0006-js-Always-use-AppSystem-to-lookup-apps.patch +Patch70: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch +Patch71: 0002-environment-Fix-date-conversion.patch +Patch72: 0003-shell-app-system-Monitor-for-icon-theme-changes.patch +Patch73: 0004-global-force-fsync-to-worker-thread-when-saving-stat.patch +Patch74: 0005-app-cache-add-ShellAppCache-for-GAppInfo-caching.patch +Patch75: 0006-js-Always-use-AppSystem-to-lookup-apps.patch # Stop screen recording on monitor changes (#1705392) -Patch70: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch +Patch80: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch # Backport OSK fixes (#1871041) -Patch75: osk-fixes.patch -Patch76: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch +Patch85: osk-fixes.patch +Patch86: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch # suspend/resume fix on nvidia (#1663440) Patch10001: 0001-background-refresh-after-suspend-on-wayland.patch @@ -275,6 +279,20 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/%{name}.1.gz %changelog +* Wed May 11 2022 Phil Wyett - 3.32.2-47 +- Restore missing cursor to screencast recordings + Resolves: #1993420 + +* Wed May 11 2022 Florian Müllner - 3.32.2-46 +- Hide volume sliders initially + Resolves: #1982779 + +* Thu Apr 21 2022 Florian Müllner - 3.32.2-45 +- Fix lock up when previous focus actor is destroyed during modal + Resolves: #2075231 +- Defend against corrupt notifications file + Resolves: #2078564 + * Fri Nov 26 2021 Florian Müllner - 3.32.2-44 - Fix more JS warnings Resolves: #2025940