status/bluetooth: 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 allows us to rely on the signal parameters to only process changed properties. To achieve that, construct the proxy manually, and then initialize it asynchronously in a Promise. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
This commit is contained in:
parent
80e4ae7d7f
commit
463757569a
@ -13,7 +13,7 @@ const BUS_NAME = 'org.gnome.SettingsDaemon.Rfkill';
|
||||
const OBJECT_PATH = '/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);
|
||||
|
||||
const HAD_BLUETOOTH_DEVICES_SETUP = 'had-bluetooth-devices-setup';
|
||||
|
||||
@ -40,16 +40,19 @@ class Indicator extends PanelMenu.SystemIndicator {
|
||||
});
|
||||
this._client.connect('notify::default-adapter-powered', this._sync.bind(this));
|
||||
|
||||
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
|
||||
(proxy, error) => {
|
||||
if (error) {
|
||||
log(error.message);
|
||||
return;
|
||||
}
|
||||
|
||||
this._sync();
|
||||
});
|
||||
this._proxy.connect('g-properties-changed', this._queueSync.bind(this));
|
||||
this._proxy = new Gio.DBusProxy({
|
||||
g_connection: Gio.DBus.session,
|
||||
g_name: BUS_NAME,
|
||||
g_object_path: OBJECT_PATH,
|
||||
g_interface_name: rfkillManagerInfo.name,
|
||||
g_interface_info: rfkillManagerInfo,
|
||||
});
|
||||
this._proxy.connect('g-properties-changed', (p, properties) => {
|
||||
if ('BluetoothHardwareAirplaneMode' in properties.unpack())
|
||||
this._sync();
|
||||
});
|
||||
this._proxy.init_async(GLib.PRIORITY_DEFAULT, null)
|
||||
.catch(e => console.error(e.message));
|
||||
|
||||
this._item = new PopupMenu.PopupSubMenuMenuItem(_("Bluetooth"), true);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user