import gnome-shell-3.32.2-48.el8

This commit is contained in:
CentOS Sources 2022-09-27 09:29:13 -04:00 committed by Stepan Oksanichenko
parent a003b368ce
commit 84f1550333
7 changed files with 397 additions and 21 deletions

View File

@ -0,0 +1,49 @@
From 0d95c2087aba7f0b07cb303c1f15d097b45f1b09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
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

View File

@ -0,0 +1,28 @@
From 3182ad73c8f88628cb51a96feba0fc32ce7f01c9 Mon Sep 17 00:00:00 2001
From: Illya Klymov <xanf@xanf.me>
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

View File

@ -0,0 +1,30 @@
From 4e555e0efeb4b31918e199d29bee99b2a4ed1c8e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
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

View File

@ -1,8 +1,8 @@
From 1a546d4df199f498b838efdccf081ada8ed1960b Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 15 Jan 2019 12:52:49 -0500
Subject: [PATCH 2/4] background: rebuild background, not just animation on
resume
From f27c4224aa96975ae44641612f5fff3772f5c294 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Mon, 22 Aug 2022 13:06:05 +0200
Subject: [PATCH] [PATCH 2/4] background: rebuild background, not just
animation on resume
Previously, we would only refresh the animation on resume
(to handle clock skew).
@ -14,7 +14,7 @@ so we should just do a full background change.
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/js/ui/background.js b/js/ui/background.js
index 06e038816..75b76a57e 100644
index 2a404ae..dd11e3e 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -254,7 +254,7 @@ var Background = class Background {
@ -25,7 +25,7 @@ index 06e038816..75b76a57e 100644
+ this.emit('changed');
});
this._settingsChangedSignalId = this._settings.connect('changed', () => {
this._settingsChangedSignalId =
--
2.21.0
2.35.3

View File

@ -0,0 +1,145 @@
From 7bdd1962213a37f6218fe15ea1a4062dd318672a Mon Sep 17 00:00:00 2001
From: Will Thompson <wjt@endlessm.com>
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
@<stdin>: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 <wjt@endlessm.com>
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

View File

@ -0,0 +1,101 @@
From 49d066234f9f528122bb40c5144b40d8b19a0071 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Mon, 22 Aug 2022 12:52:19 +0200
Subject: [PATCH] Background: Avoid double dispose and actors recreations
Subject: [PATCH 1/2] background: Use Garbage Collector to dispose background:
The same Meta.Background could be used by multiple instances of background
actors, and so should not be disposed when the actor using it is destroyed.
Instead of calling `run_dispose` directly on it, just nullify the reference
on destroy method, leaving the job of doing the proper disposition to the
gabage collector that keeps the proper reference count on the Meta.Background.
Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/501
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/558
Subject: [PATCH 2/2] background: Group 'changed' signal emission
Background is monitoring the whole `org.gnome.desktop.background` gsettings keys
for changes connecting to the non-specialized 'changed' signal and re-emitting
this as-is.
This means that when the background is changed via control-center, we get
multiple 'changed' signal events from GSettings, and for each one of this we
recreate a Background and a BackgroundActor.
Avoid this by using an idle to delay the emission of the 'changed' signal
grouping the events.
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/558
---
js/ui/background.js | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/js/ui/background.js b/js/ui/background.js
index 06e0388..2a404ae 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -257,14 +257,15 @@ var Background = class Background {
this._refreshAnimation();
});
- this._settingsChangedSignalId = this._settings.connect('changed', () => {
- this.emit('changed');
- });
+ this._settingsChangedSignalId =
+ this._settings.connect('changed', this._emitChangedSignal.bind(this));
this._load();
}
destroy() {
+ this.background = null;
+
this._cancellable.cancel();
this._removeAnimationTimeout();
@@ -288,6 +289,22 @@ var Background = class Background {
if (this._settingsChangedSignalId != 0)
this._settings.disconnect(this._settingsChangedSignalId);
this._settingsChangedSignalId = 0;
+
+ if (this._changedIdleId) {
+ GLib.source_remove(this._changedIdleId);
+ this._changedIdleId = 0;
+ }
+ }
+
+ _emitChangedSignal() {
+ if (this._changedIdleId)
+ return;
+
+ this._changedIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
+ this._changedIdleId = 0;
+ this.emit('changed');
+ return GLib.SOURCE_REMOVE;
+ });
}
updateResolution() {
@@ -343,7 +360,7 @@ var Background = class Background {
if (changedFile.equal(file)) {
let imageCache = Meta.BackgroundImageCache.get_default();
imageCache.purge(changedFile);
- this.emit('changed');
+ this._emitChangedSignal();
}
});
this._fileWatches[key] = signalId;
@@ -699,7 +716,6 @@ var BackgroundManager = class BackgroundManager {
time: FADE_ANIMATION_TIME,
transition: 'easeOutQuad',
onComplete() {
- oldBackgroundActor.background.run_dispose();
oldBackgroundActor.destroy();
}
});
--
2.35.3

View File

@ -1,6 +1,6 @@
Name: gnome-shell
Version: 3.32.2
Release: 44%{?dist}
Release: 48%{?dist}
Summary: Window management and application launching for GNOME
Group: User Interface/Desktops
@ -62,26 +62,31 @@ 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
Patch63: fix-double-disposed-backgrounds.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 +280,24 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
%{_mandir}/man1/%{name}.1.gz
%changelog
* Fri Aug 12 2022 Florian Müllner <fmuellner@redhat.com> - 3.32.2-48
- Fix warnings on double-disposed backgrounds
Resolves: #2116555
* Wed May 11 2022 Phil Wyett <philip.wyett@kathenas.org> - 3.32.2-47
- Restore missing cursor to screencast recordings
Resolves: #1993420
* Wed May 11 2022 Florian Müllner <fmuellner@redhat.com> - 3.32.2-46
- Hide volume sliders initially
Resolves: #1982779
* Thu Apr 21 2022 Florian Müllner <fmuellner@redhat.com> - 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 <fmuellner@redhat.com> - 3.32.2-44
- Fix more JS warnings
Resolves: #2025940