diff --git a/gnome-shell.spec b/gnome-shell.spec index 1bf4024..a025020 100644 --- a/gnome-shell.spec +++ b/gnome-shell.spec @@ -2,7 +2,7 @@ Name: gnome-shell Version: 43.1 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Window management and application launching for GNOME License: GPLv2+ @@ -14,6 +14,10 @@ Source0: https://download.gnome.org/sources/gnome-shell/43/%{name}-%{tarb # Fix layout switching in password entry boxes Patch1: 2534.patch +# Backport broken screen cast fix if gstreamer1-vaapi was installed. +# https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2533 +Patch2: post-43.1-fixes.patch + # Replace Epiphany with Firefox in the default favourite apps list Patch10001: gnome-shell-favourite-apps-firefox.patch @@ -236,6 +240,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de %{_mandir}/man1/gnome-shell.1* %changelog +* Thu Nov 17 2022 Jonas Ã…dahl - 43.1-3 +- Backport missing screencast if gstreamer1-vaapi is installed + * Wed Nov 16 2022 Adam Williamson - 43.1-2 - Backport MR #2534 to fix layout switching in password entries diff --git a/post-43.1-fixes.patch b/post-43.1-fixes.patch new file mode 100644 index 0000000..a337668 --- /dev/null +++ b/post-43.1-fixes.patch @@ -0,0 +1,105 @@ +From 3851180cb02ab96d1ca18153fa3372bb46cdb691 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Sun, 6 Nov 2022 11:56:41 +0100 +Subject: [PATCH 1/2] dbusService/screencast: Hold during gstreamer checks + +Some gstreamer plugins require a connection to the display server, +so they block until the server is up and running. That's why we +moved the check into the D-Bus service, so that the blocking would +not lock up the compositor itself. + +However the block can still delay the service initialization so +much that auto-shutdown hits immediately when returning from the +constructor. If that happens, the proxy on the shell side is no +longer backed by a remote object when the init callback runs, and +all properties therefore resolve as `null`. + +As a result, gnome-shell thinks that screencasts aren't supported +and hides the screencast button. + +Fix this by holding the service during the gstreamer checks, so +that the auto-shutdown timeout only starts after the service is +ready. + +https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6051 + +Part-of: +(cherry picked from commit a2acecb491e53e889dd995d3db386aaa182e04a0) +--- + js/dbusServices/screencast/screencastService.js | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/js/dbusServices/screencast/screencastService.js b/js/dbusServices/screencast/screencastService.js +index f7f36da886..a2bb23cfea 100644 +--- a/js/dbusServices/screencast/screencastService.js ++++ b/js/dbusServices/screencast/screencastService.js +@@ -271,11 +271,14 @@ var ScreencastService = class extends ServiceImplementation { + constructor() { + super(ScreencastIface, '/org/gnome/Shell/Screencast'); + ++ this.hold(); // gstreamer initializing can take a bit + this._canScreencast = ScreencastService.canScreencast(); + + Gst.init(null); + Gtk.init(); + ++ this.release(); ++ + this._recorders = new Map(); + this._senders = new Map(); + +-- +2.38.1 + + +From 41235b44ae02be26aa290c66d5a2a1ec9e458568 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Sun, 6 Nov 2022 13:06:44 +0100 +Subject: [PATCH 2/2] screenshot: Cache ScreencastSupported property + +The screencast service shuts down when not in use, so it is almost +certainly not running when handling the screencast shortcut. + +Instead of making sure the service is restarted, just cache the +property when initializing the proxy. + +Part-of: +(cherry picked from commit 144daf200c12f313c2cc7c01daef9e26e396a328) +--- + js/ui/screenshot.js | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js +index a01fbe3c94..b2ea6fad2b 100644 +--- a/js/ui/screenshot.js ++++ b/js/ui/screenshot.js +@@ -1017,6 +1017,7 @@ var ScreenshotUI = GObject.registerClass({ + }); + + this._screencastInProgress = false; ++ this._screencastSupported = false; + + this._screencastProxy = new ScreencastProxy( + Gio.DBus.session, +@@ -1028,7 +1029,8 @@ var ScreenshotUI = GObject.registerClass({ + return; + } + +- this._castButton.visible = this._screencastProxy.ScreencastSupported; ++ this._screencastSupported = this._screencastProxy.ScreencastSupported; ++ this._castButton.visible = this._screencastSupported; + }); + + this._lockdownSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.lockdown' }); +@@ -1450,7 +1452,7 @@ var ScreenshotUI = GObject.registerClass({ + if (this._screencastInProgress) + return; + +- if (mode === UIMode.SCREENCAST && !this._screencastProxy.ScreencastSupported) ++ if (mode === UIMode.SCREENCAST && !this._screencastSupported) + return; + + this._castButton.checked = mode === UIMode.SCREENCAST; +-- +2.38.1 +