windowManager: Handle return value/errors from systemd unit calls

These may produce errors, and return a value indicating we should
proceed further. Check for those when starting/stopping gsd-xsettings.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1238
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2755
This commit is contained in:
Carlos Garnacho 2020-05-07 11:15:46 +02:00 committed by Florian Müllner
parent af34c8d2f4
commit 0ecddafc20

View File

@ -900,8 +900,9 @@ var WindowManager = class {
global.display.connect('init-xserver', (display, task) => {
IBusManager.getIBusManager().restartDaemon(['--xim']);
Shell.util_start_systemd_unit('gsd-xsettings.target', 'fail');
try {
if (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);
@ -923,12 +924,21 @@ var WindowManager = class {
}
},
null);
}
} catch (e) {
log('Error starting gsd-xsettings: %s'.format(e.message));
}
return true;
});
global.display.connect('x11-display-closing', () => {
if (!Meta.is_wayland_compositor())
return;
try {
Shell.util_stop_systemd_unit('gsd-xsettings.target', 'fail');
} catch (e) {
log('Error stopping gsd-xsettings: %s'.format(e.message));
}
IBusManager.getIBusManager().restartDaemon();
});