Backport missing screencast if gstreamer1-vaapi is installed

This commit is contained in:
Jonas Ådahl 2022-11-17 10:50:26 +01:00
parent afc53bbc9f
commit 83294bac3a
2 changed files with 113 additions and 1 deletions

View File

@ -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 <jadahl@redhat.com> - 43.1-3
- Backport missing screencast if gstreamer1-vaapi is installed
* Wed Nov 16 2022 Adam Williamson <awilliam@redhat.com> - 43.1-2
- Backport MR #2534 to fix layout switching in password entries

105
post-43.1-fixes.patch Normal file
View File

@ -0,0 +1,105 @@
From 3851180cb02ab96d1ca18153fa3372bb46cdb691 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2533>
(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?= <fmuellner@gnome.org>
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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2533>
(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