ibusManager: Check existence of IBus systemd units before manual start
IBus is moving to being a systemd managed service in GNOME sessions (see https://github.com/ibus/ibus/pull/2377). Since there will be a transition period, and we still have to support non-systemd sessions, check for this existence at runtime. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2171>
This commit is contained in:
parent
352c9695f3
commit
c12f085530
@ -1,7 +1,7 @@
|
|||||||
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
||||||
/* exported getIBusManager */
|
/* exported getIBusManager */
|
||||||
|
|
||||||
const { Gio, GLib, IBus, Meta } = imports.gi;
|
const { Gio, GLib, IBus, Meta, Shell } = imports.gi;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
|
|
||||||
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
|
const IBusCandidatePopup = imports.ui.ibusCandidatePopup;
|
||||||
@ -14,11 +14,13 @@ Gio._promisify(IBus.Bus.prototype,
|
|||||||
'get_global_engine_async', 'get_global_engine_async_finish');
|
'get_global_engine_async', 'get_global_engine_async_finish');
|
||||||
Gio._promisify(IBus.Bus.prototype,
|
Gio._promisify(IBus.Bus.prototype,
|
||||||
'set_global_engine_async', 'set_global_engine_async_finish');
|
'set_global_engine_async', 'set_global_engine_async_finish');
|
||||||
|
Gio._promisify(Shell, 'util_systemd_unit_exists');
|
||||||
|
|
||||||
// Ensure runtime version matches
|
// Ensure runtime version matches
|
||||||
_checkIBusVersion(1, 5, 2);
|
_checkIBusVersion(1, 5, 2);
|
||||||
|
|
||||||
let _ibusManager = null;
|
let _ibusManager = null;
|
||||||
|
const IBUS_SYSTEMD_SERVICE = 'org.freedesktop.IBus.session.GNOME.service';
|
||||||
|
|
||||||
function _checkIBusVersion(requiredMajor, requiredMinor, requiredMicro) {
|
function _checkIBusVersion(requiredMajor, requiredMinor, requiredMicro) {
|
||||||
if ((IBus.MAJOR_VERSION > requiredMajor) ||
|
if ((IBus.MAJOR_VERSION > requiredMajor) ||
|
||||||
@ -64,7 +66,28 @@ var IBusManager = class {
|
|||||||
this._ibus.set_watch_ibus_signal(true);
|
this._ibus.set_watch_ibus_signal(true);
|
||||||
this._ibus.connect('global-engine-changed', this._engineChanged.bind(this));
|
this._ibus.connect('global-engine-changed', this._engineChanged.bind(this));
|
||||||
|
|
||||||
this._spawn(Meta.is_wayland_compositor() ? [] : ['--xim']);
|
this._queueSpawn();
|
||||||
|
}
|
||||||
|
|
||||||
|
async _ibusSystemdServiceExists() {
|
||||||
|
if (this._ibusIsSystemdService)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
this._ibusIsSystemdService =
|
||||||
|
await Shell.util_systemd_unit_exists(
|
||||||
|
IBUS_SYSTEMD_SERVICE, null);
|
||||||
|
} catch (e) {
|
||||||
|
this._ibusIsSystemdService = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._ibusIsSystemdService;
|
||||||
|
}
|
||||||
|
|
||||||
|
async _queueSpawn() {
|
||||||
|
const isSystemdService = await this._ibusSystemdServiceExists();
|
||||||
|
if (!isSystemdService)
|
||||||
|
this._spawn(Meta.is_wayland_compositor() ? [] : ['--xim']);
|
||||||
}
|
}
|
||||||
|
|
||||||
_spawn(extraArgs = []) {
|
_spawn(extraArgs = []) {
|
||||||
@ -91,8 +114,10 @@ var IBusManager = class {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
restartDaemon(extraArgs = []) {
|
async restartDaemon(extraArgs = []) {
|
||||||
this._spawn(['-r', ...extraArgs]);
|
const isSystemdService = await this._ibusSystemdServiceExists();
|
||||||
|
if (!isSystemdService)
|
||||||
|
this._spawn(['-r', ...extraArgs]);
|
||||||
}
|
}
|
||||||
|
|
||||||
_clear() {
|
_clear() {
|
||||||
|
Loading…
Reference in New Issue
Block a user