status/bluetooth: Clear list of connected signals on adapter changes

With the porting of gnome-bluetooth to the new GListModel API the
behavior regarding removing adapters changed: It now no longer
guarantees to emit "device-removed" signals for the paired devices when
the adapter gets removed.

This means we need to do that ourselves now, so clear the list of
connected signals when the default adapter changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2214>
This commit is contained in:
Jonas Dreßler 2022-02-24 19:35:06 +01:00 committed by Marge Bot
parent 94d9264d96
commit eeabdd150c

View File

@ -27,6 +27,17 @@ class Indicator extends PanelMenu.SystemIndicator {
this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP); this._hadSetupDevices = global.settings.get_boolean(HAD_BLUETOOTH_DEVICES_SETUP);
this._client = new GnomeBluetooth.Client(); this._client = new GnomeBluetooth.Client();
this._client.connect('notify::default-adapter', () => {
const newAdapter = this._client.default_adapter ?? null;
if (newAdapter && this._adapter)
this._setHadSetupDevices(this._getDeviceInfos().length > 0);
this._adapter = newAdapter;
this._deviceNotifyConnected.clear();
this._sync();
});
this._client.connect('notify::default-adapter-powered', this._sync.bind(this)); this._client.connect('notify::default-adapter-powered', this._sync.bind(this));
this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH, this._proxy = new RfkillManagerProxy(Gio.DBus.session, BUS_NAME, OBJECT_PATH,
@ -133,10 +144,6 @@ class Indicator extends PanelMenu.SystemIndicator {
const connectedDevices = devices.filter(dev => dev.connected); const connectedDevices = devices.filter(dev => dev.connected);
const nConnectedDevices = connectedDevices.length; const nConnectedDevices = connectedDevices.length;
if (this._client.default_adapter && this._adapter)
this._setHadSetupDevices(devices.length > 0);
this._adapter = this._client.default_adapter ?? null;
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter; let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
this.menu.setSensitive(sensitive); this.menu.setSensitive(sensitive);