106 lines
3.9 KiB
Diff
106 lines
3.9 KiB
Diff
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
|
|
|