From 18be8fff41943139dd75b35cf892d431b1891d4c Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Mar 28 2023 10:28:45 +0000 Subject: import gnome-shell-3.32.2-50.el8 --- diff --git a/SOURCES/0001-layout-Initialize-regions-unconditionally.patch b/SOURCES/0001-layout-Initialize-regions-unconditionally.patch new file mode 100644 index 0000000..3f6f065 --- /dev/null +++ b/SOURCES/0001-layout-Initialize-regions-unconditionally.patch @@ -0,0 +1,51 @@ +From d2661753076a60a7981836e4a85e88c4588fb1b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 17 Nov 2022 15:21:42 +0100 +Subject: [PATCH] layout: Initialize regions unconditionally + +We currently initialize regions in all code paths except for the +greeter. But while there are no windows on the login screen, the +work area can still be used for positioning, for example for +notifications. + +Part-of: + +--- + js/ui/layout.js | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/js/ui/layout.js b/js/ui/layout.js +index beb4c0a5d..bb51946b7 100644 +--- a/js/ui/layout.js ++++ b/js/ui/layout.js +@@ -624,20 +624,19 @@ var LayoutManager = GObject.registerClass({ + reactive: true }); + this.addChrome(this._coverPane); + ++ // Force an update of the regions before we scale the UI group to ++ // get the correct allocation for the struts. ++ // Do this even when we don't animate on restart, so that maximized ++ // windows restore to the right size. ++ this._updateRegions(); ++ + if (Meta.is_restart()) { +- // On restart, we don't do an animation. Force an update of the +- // regions immediately so that maximized windows restore to the +- // right size taking struts into account. +- this._updateRegions(); ++ // On restart, we don't do an animation. + } else if (Main.sessionMode.isGreeter) { + this.panelBox.translation_y = -this.panelBox.height; + } else { + this._updateBackgrounds(); + +- // We need to force an update of the regions now before we scale +- // the UI group to get the correct allocation for the struts. +- this._updateRegions(); +- + this.keyboardBox.hide(); + + let monitor = this.primaryMonitor; +-- +2.38.1 + diff --git a/SOURCES/0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch b/SOURCES/0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch new file mode 100644 index 0000000..23c2606 --- /dev/null +++ b/SOURCES/0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch @@ -0,0 +1,59 @@ +From 96404287bc4269dea7b037e7b178e54ebf616d47 Mon Sep 17 00:00:00 2001 +From: Daniel van Vugt +Date: Tue, 24 Nov 2020 17:34:08 +0800 +Subject: [PATCH] st-bin: Disallow st_bin_set_child with already-parented + children + +Not checking for this would result in `clutter_actor_add_child` +failing, but StBin keeping a copy in `priv->child`. So later on, +`st_bin_remove` would never be called on it and this assertion +would fail and crash the whole shell: + +``` +static void +st_bin_destroy (ClutterActor *actor) +{ + StBinPrivate *priv = st_bin_get_instance_private (ST_BIN (actor)); + + if (priv->child) + clutter_actor_destroy (priv->child); + g_assert (priv->child == NULL); + +``` + +By disallowing spurious `st_bin_set_child` calls we now prevent StBin +from entering such a corrupt state and the above assertion won't fail +anymore. + +Part-of: +--- + src/st/st-bin.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/src/st/st-bin.c b/src/st/st-bin.c +index f013909e8..7959a4e95 100644 +--- a/src/st/st-bin.c ++++ b/src/st/st-bin.c +@@ -434,6 +434,19 @@ st_bin_set_child (StBin *bin, + if (priv->child == child) + return; + ++ if (child) ++ { ++ ClutterActor *parent = clutter_actor_get_parent (child); ++ ++ if (parent) ++ { ++ g_warning ("%s: The provided 'child' actor %p already has a " ++ "(different) parent %p and can't be made a child of %p.", ++ G_STRFUNC, child, parent, bin); ++ return; ++ } ++ } ++ + if (priv->child) + clutter_actor_remove_child (CLUTTER_ACTOR (bin), priv->child); + +-- +2.38.1 + diff --git a/SOURCES/fix-nm-device-settings.patch b/SOURCES/fix-nm-device-settings.patch new file mode 100644 index 0000000..db9d80e --- /dev/null +++ b/SOURCES/fix-nm-device-settings.patch @@ -0,0 +1,131 @@ +From e2a1b737156804e2647e5de938c3d170c11b6ba4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Fri, 31 Jul 2020 20:40:36 +0200 +Subject: [PATCH 1/2] status/network: Use D-Bus to launch Settings panels + +For more obscure network configurations, we need to launch the +corresponding Settings panel with additional parameters, so we +cannot simply launch the .desktop file. + +However we can do better than spawning a command line: Control center +exposes an application action we can use instead, so the process is +launched with the appropriate activation environment and startup +notification support. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1385 +--- + js/ui/status/network.js | 33 +++++++++++++++++++++++++++++---- + 1 file changed, 29 insertions(+), 4 deletions(-) + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index f8991d02f..0e7e82ce0 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -15,6 +15,8 @@ const Util = imports.misc.util; + + const { loadInterfaceXML } = imports.misc.fileUtils; + ++Gio._promisify(Gio.DBusConnection.prototype, 'call', 'call_finish'); ++ + const NMConnectionCategory = { + INVALID: 'invalid', + WIRED: 'wired', +@@ -75,6 +77,30 @@ function ensureActiveConnectionProps(active, client) { + } + } + ++function launchSettingsPanel(panel, ...args) { ++ const param = new GLib.Variant('(sav)', ++ [panel, args.map(s => new GLib.Variant('s', s))]); ++ const platformData = { ++ 'desktop-startup-id': new GLib.Variant('s', ++ '_TIME%s'.format(global.get_current_time())), ++ }; ++ try { ++ Gio.DBus.session.call( ++ 'org.gnome.ControlCenter', ++ '/org/gnome/ControlCenter', ++ 'org.freedesktop.Application', ++ 'ActivateAction', ++ new GLib.Variant('(sava{sv})', ++ ['launch-panel', [param], platformData]), ++ null, ++ Gio.DBusCallFlags.NONE, ++ -1, ++ null); ++ } catch (e) { ++ log('Failed to launch Settings panel: %s'.format(e.message)); ++ } ++} ++ + var NMConnectionItem = class { + constructor(section, connection) { + this._section = section; +@@ -534,8 +560,7 @@ var NMDeviceModem = class extends NMConnectionDevice { + } + + _autoConnect() { +- Util.spawn(['gnome-control-center', 'network', +- 'connect-3g', this._device.get_path()]); ++ launchSettingsPanel('network', 'connect-3g', this._device.get_path()); + } + + _sessionUpdated() { +@@ -920,8 +945,8 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { + || (accessPoints[0]._secType == NMAccessPointSecurity.WPA_ENT)) { + // 802.1x-enabled APs require further configuration, so they're + // handled in gnome-control-center +- Util.spawn(['gnome-control-center', 'wifi', 'connect-8021x-wifi', +- this._device.get_path(), accessPoints[0].get_path()]); ++ launchSettingsPanel('wifi', 'connect-8021x-wifi', ++ this._device.get_path(), accessPoints[0].get_path()); + } else { + let connection = new NM.SimpleConnection(); + this._client.add_and_activate_connection_async(connection, this._device, accessPoints[0].get_path(), null, null) +-- +2.38.1 + + +From 9ca1989fcc73157685742470c25f538d01d8df44 Mon Sep 17 00:00:00 2001 +From: Xiaoguang Wang +Date: Mon, 21 Feb 2022 09:11:23 +0800 +Subject: [PATCH 2/2] network: Get dbus path from NMDevice + +In the NetworkManager new version the NMDevice.get_path returns pci +path, we need to use NM prototype to get device dbus path. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4565 + +Part-of: +--- + js/ui/status/network.js | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/js/ui/status/network.js b/js/ui/status/network.js +index 0e7e82ce0..9d6a83b73 100644 +--- a/js/ui/status/network.js ++++ b/js/ui/status/network.js +@@ -946,7 +946,7 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { + // 802.1x-enabled APs require further configuration, so they're + // handled in gnome-control-center + launchSettingsPanel('wifi', 'connect-8021x-wifi', +- this._device.get_path(), accessPoints[0].get_path()); ++ this._getDeviceDBusPath(), accessPoints[0].get_path()); + } else { + let connection = new NM.SimpleConnection(); + this._client.add_and_activate_connection_async(connection, this._device, accessPoints[0].get_path(), null, null) +@@ -956,6 +956,11 @@ var NMWirelessDialog = class extends ModalDialog.ModalDialog { + this.close(); + } + ++ _getDeviceDBusPath() { ++ // nm_object_get_path() is shadowed by nm_device_get_path() ++ return NM.Object.prototype.get_path.call(this._device); ++ } ++ + _notifySsidCb(accessPoint) { + if (accessPoint.get_ssid() != null) { + accessPoint.disconnect(accessPoint._notifySsidId); +-- +2.38.1 + diff --git a/SPECS/gnome-shell.spec b/SPECS/gnome-shell.spec index da494e9..9a12512 100644 --- a/SPECS/gnome-shell.spec +++ b/SPECS/gnome-shell.spec @@ -1,6 +1,6 @@ Name: gnome-shell Version: 3.32.2 -Release: 48%{?dist} +Release: 50%{?dist} Summary: Window management and application launching for GNOME Group: User Interface/Desktops @@ -66,27 +66,30 @@ 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 +Patch60: 0001-st-bin-Disallow-st_bin_set_child-with-already-parent.patch +Patch61: 0001-layout-Initialize-regions-unconditionally.patch +Patch62: fix-nm-device-settings.patch # Backport JS invalid access warnings (#1651894, #1663171, #1642482, #1637622) -Patch60: fix-invalid-access-warnings.patch -Patch61: more-spurious-allocation-warnings.patch -Patch62: fix-some-js-warnings.patch -Patch63: fix-double-disposed-backgrounds.patch +Patch70: fix-invalid-access-warnings.patch +Patch71: more-spurious-allocation-warnings.patch +Patch72: fix-some-js-warnings.patch +Patch73: fix-double-disposed-backgrounds.patch # Backport performance fixes under load (#1820760) -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 +Patch80: 0001-environment-reduce-calls-to-g_time_zone_new_local.patch +Patch81: 0002-environment-Fix-date-conversion.patch +Patch82: 0003-shell-app-system-Monitor-for-icon-theme-changes.patch +Patch83: 0004-global-force-fsync-to-worker-thread-when-saving-stat.patch +Patch84: 0005-app-cache-add-ShellAppCache-for-GAppInfo-caching.patch +Patch85: 0006-js-Always-use-AppSystem-to-lookup-apps.patch # Stop screen recording on monitor changes (#1705392) -Patch80: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch +Patch90: 0001-screencast-Stop-recording-when-screen-size-or-resour.patch # Backport OSK fixes (#1871041) -Patch85: osk-fixes.patch -Patch86: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch +Patch95: osk-fixes.patch +Patch96: 0001-keyboard-Only-enable-keyboard-if-ClutterDeviceManage.patch # suspend/resume fix on nvidia (#1663440) Patch10001: 0001-background-refresh-after-suspend-on-wayland.patch @@ -280,6 +283,16 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/%{name}.1.gz %changelog +* Thu Dec 01 2022 Florian Müllner - 3.32.2-50 +- Fix struts on login screen + Resolves: #2138941 +- Fix launching network device settings + Resolves: #1879405 + +* Mon Nov 21 2022 Florian Müllner - 3.32.2-49 +- Fix assert durin StBin destruction + Resolves: #2130131 + * Fri Aug 12 2022 Florian Müllner - 3.32.2-48 - Fix warnings on double-disposed backgrounds Resolves: #2116555