rfkill: Use promise to initialize proxy

There's no good reason for waiting for the proxy to be initialized
to connect signals. In fact, connecting the signal beforehand
ensures that the handler is in place when the proxy fetches the
properties, so we don't have to call the handler explicitly.

That in turn will allow us in a follow-up to rely on the signal
parameters to only process changed properties.

To achieve that by constructing the proxy manually, and then
initialize it asynchronously in a Promise.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2385>
This commit is contained in:
Florian Müllner 2022-07-18 20:44:28 +02:00 committed by Marge Bot
parent 762b4c2066
commit bb043bb761

View File

@ -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 Indicator */ /* exported Indicator */
const { Gio, GObject } = imports.gi; const {Gio, GLib, GObject} = imports.gi;
const Signals = imports.misc.signals; const Signals = imports.misc.signals;
const Main = imports.ui.main; const Main = imports.ui.main;
@ -14,22 +14,22 @@ const BUS_NAME = 'org.gnome.SettingsDaemon.Rfkill';
const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill'; const OBJECT_PATH = '/org/gnome/SettingsDaemon/Rfkill';
const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill'); const RfkillManagerInterface = loadInterfaceXML('org.gnome.SettingsDaemon.Rfkill');
const RfkillManagerProxy = Gio.DBusProxy.makeProxyWrapper(RfkillManagerInterface); const rfkillManagerInfo = Gio.DBusInterfaceInfo.new_for_xml(RfkillManagerInterface);
var RfkillManager = class extends Signals.EventEmitter { var RfkillManager = class extends Signals.EventEmitter {
constructor() { constructor() {
super(); super();
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, this._proxy = new Gio.DBusProxy({
(proxy, error) => { g_connection: Gio.DBus.session,
if (error) { g_name: BUS_NAME,
log(error.message); g_object_path: OBJECT_PATH,
return; g_interface_name: rfkillManagerInfo.name,
} g_interface_info: rfkillManagerInfo,
this._proxy.connect('g-properties-changed',
this._changed.bind(this));
this._changed();
}); });
this._proxy.connect('g-properties-changed', this._changed.bind(this));
this._proxy.init_async(GLib.PRIORITY_DEFAULT, null)
.catch(e => console.error(e.message));
} }
get airplaneMode() { get airplaneMode() {