windowManager: Implement MetaDisplay::init-xserver hook
We do spawn gsd-xsettings, and watch its name before notifying on the given task, so the mutter bits can proceed with X11 startup. One notable change is that we only start gsd-xsettings, instead of the generic gnome-session-x11-services target. We do so as we have to wait on a dbus name to appear in order to deem the initialization done, and making it all depend on gsd-xsettings seems tidier. Less notably, we also use ::shutdown-xserver to shutdown the related services. Its major benefit is that it'd allow us to ensure the olderly shutdown of those services, but it's unused at the moment. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/836
This commit is contained in:
parent
3c4a5a67e2
commit
12e14884ef
@ -896,13 +896,36 @@ var WindowManager = class {
|
||||
}
|
||||
});
|
||||
|
||||
global.display.connect('x11-display-opened', () => {
|
||||
global.display.connect('init-xserver', (display, task) => {
|
||||
IBusManager.getIBusManager().restartDaemon(['--xim']);
|
||||
Shell.util_start_systemd_unit('gnome-session-x11-services.target', 'fail');
|
||||
Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail');
|
||||
|
||||
/* Leave this watchdog timeout so don't block indefinitely here */
|
||||
let timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, () => {
|
||||
Gio.DBus.session.unwatch_name(watchId);
|
||||
task.return_boolean(false);
|
||||
timeoutId = 0;
|
||||
return GLib.SOURCE_REMOVE;
|
||||
});
|
||||
|
||||
/* When gsd-xsettings daemon is started, we are good to resume */
|
||||
let watchId = Gio.DBus.session.watch_name(
|
||||
'org.gnome.SettingsDaemon.XSettings',
|
||||
Gio.BusNameWatcherFlags.NONE,
|
||||
() => {
|
||||
Gio.DBus.session.unwatch_name(watchId);
|
||||
if (timeoutId > 0) {
|
||||
task.return_boolean(true);
|
||||
GLib.source_remove(timeoutId);
|
||||
}
|
||||
},
|
||||
null);
|
||||
return true;
|
||||
});
|
||||
global.display.connect('x11-display-closing', () => {
|
||||
Shell.util_stop_systemd_unit('gnome-session-x11-services.target', 'fail');
|
||||
global.display.connect('shutdown-xserver', (display, task) => {
|
||||
Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail');
|
||||
IBusManager.getIBusManager().restartDaemon();
|
||||
task.return_boolean(true);
|
||||
});
|
||||
|
||||
Main.overview.connect('showing', () => {
|
||||
|
Loading…
Reference in New Issue
Block a user