status/bluetooth: Use JS Set for tracking signal connections
We can make things a bit fancier here and use a JS Set instead of an object for tracking which devices we're having a signal handler connected to. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2188>
This commit is contained in:
parent
5068c15a9d
commit
34dcf2f7b1
@ -55,10 +55,14 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
this._syncId = 0;
|
this._syncId = 0;
|
||||||
this._adapter = null;
|
this._adapter = null;
|
||||||
|
|
||||||
this._store = this._client.get_devices();
|
this._deviceNotifyConnected = new Set();
|
||||||
this._deviceNotifyConnected = [];
|
|
||||||
|
const deviceStore = this._client.get_devices();
|
||||||
|
for (let i = 0; i < deviceStore.get_n_items(); i++)
|
||||||
|
this._connectDeviceNotify(deviceStore.get_item(i));
|
||||||
|
|
||||||
this._client.connect('device-removed', (c, path) => {
|
this._client.connect('device-removed', (c, path) => {
|
||||||
this._deviceNotifyConnected[path] = false;
|
this._deviceNotifyConnected.delete(path);
|
||||||
this._queueSync.bind(this);
|
this._queueSync.bind(this);
|
||||||
});
|
});
|
||||||
this._client.connect('device-added', (c, device) => {
|
this._client.connect('device-added', (c, device) => {
|
||||||
@ -79,21 +83,25 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_connectDeviceNotify(device) {
|
_connectDeviceNotify(device) {
|
||||||
if (this._deviceNotifyConnected[device.get_object_path()] !== true)
|
const path = device.get_object_path();
|
||||||
|
|
||||||
|
if (this._deviceNotifyConnected.has(path))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
device.connect('notify::alias', this._queueSync.bind(this));
|
device.connect('notify::alias', this._queueSync.bind(this));
|
||||||
device.connect('notify::paired', this._queueSync.bind(this));
|
device.connect('notify::paired', this._queueSync.bind(this));
|
||||||
device.connect('notify::trusted', this._queueSync.bind(this));
|
device.connect('notify::trusted', this._queueSync.bind(this));
|
||||||
device.connect('notify::connected', this._queueSync.bind(this));
|
device.connect('notify::connected', this._queueSync.bind(this));
|
||||||
this._deviceNotifyConnected.push([device.get_object_path(), true]);
|
|
||||||
|
this._deviceNotifyConnected.add(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
_getDeviceInfos() {
|
_getDeviceInfos() {
|
||||||
|
const deviceStore = this._client.get_devices();
|
||||||
let deviceInfos = [];
|
let deviceInfos = [];
|
||||||
const numDevices = this._store.get_n_items();
|
|
||||||
|
|
||||||
for (let i = 0; i < numDevices; i++) {
|
for (let i = 0; i < deviceStore.get_n_items(); i++) {
|
||||||
const device = this._store.get_item(i);
|
const device = deviceStore.get_item(i);
|
||||||
|
|
||||||
if (device.paired || device.trusted) {
|
if (device.paired || device.trusted) {
|
||||||
deviceInfos.push({
|
deviceInfos.push({
|
||||||
@ -101,7 +109,6 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
name: device.alias,
|
name: device.alias,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
this._connectDeviceNotify(device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return deviceInfos;
|
return deviceInfos;
|
||||||
|
Loading…
Reference in New Issue
Block a user