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>
This commit is contained in:
parent
9bc24cd271
commit
a2acecb491
@ -271,11 +271,14 @@ var ScreencastService = class extends ServiceImplementation {
|
|||||||
constructor() {
|
constructor() {
|
||||||
super(ScreencastIface, '/org/gnome/Shell/Screencast');
|
super(ScreencastIface, '/org/gnome/Shell/Screencast');
|
||||||
|
|
||||||
|
this.hold(); // gstreamer initializing can take a bit
|
||||||
this._canScreencast = ScreencastService.canScreencast();
|
this._canScreencast = ScreencastService.canScreencast();
|
||||||
|
|
||||||
Gst.init(null);
|
Gst.init(null);
|
||||||
Gtk.init();
|
Gtk.init();
|
||||||
|
|
||||||
|
this.release();
|
||||||
|
|
||||||
this._recorders = new Map();
|
this._recorders = new Map();
|
||||||
this._senders = new Map();
|
this._senders = new Map();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user