bluetooth: Add getDeviceInfos function
In case where only one device is connected, we want to display its name in the menu. For that we will need more than the number of known/connected devices, so change the function to return an array of device infos instead. https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2340
This commit is contained in:
parent
da44649e6f
commit
26c2cb9f65
@ -72,46 +72,44 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// nDevices is the number of devices setup for the current default
|
_getDeviceInfos(adapter) {
|
||||||
// adapter if one exists and is powered. If unpowered or unavailable,
|
|
||||||
// nDevice is "1" if it had setup devices associated to it the last
|
|
||||||
// time it was seen, and "-1" if not.
|
|
||||||
//
|
|
||||||
// nConnectedDevices is the number of devices connected to the default
|
|
||||||
// adapter if one exists and is powered, or -1 if it's not available.
|
|
||||||
_getNDevices() {
|
|
||||||
let adapter = this._getDefaultAdapter();
|
|
||||||
if (!adapter)
|
if (!adapter)
|
||||||
return [this._hadSetupDevices ? 1 : -1, -1];
|
return [];
|
||||||
|
|
||||||
let nConnectedDevices = 0;
|
let deviceInfos = [];
|
||||||
let nDevices = 0;
|
|
||||||
let [ret, iter] = this._model.iter_children(adapter);
|
let [ret, iter] = this._model.iter_children(adapter);
|
||||||
while (ret) {
|
while (ret) {
|
||||||
let isConnected = this._model.get_value(iter,
|
const isPaired = this._model.get_value(iter,
|
||||||
GnomeBluetooth.Column.CONNECTED);
|
GnomeBluetooth.Column.PAIRED);
|
||||||
if (isConnected)
|
const isTrusted = this._model.get_value(iter,
|
||||||
nConnectedDevices++;
|
GnomeBluetooth.Column.TRUSTED);
|
||||||
|
|
||||||
|
if (!isPaired && !isTrusted)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
deviceInfos.push({
|
||||||
|
connected: this._model.get_value(iter,
|
||||||
|
GnomeBluetooth.Column.CONNECTED),
|
||||||
|
});
|
||||||
|
|
||||||
let isPaired = this._model.get_value(iter,
|
|
||||||
GnomeBluetooth.Column.PAIRED);
|
|
||||||
let isTrusted = this._model.get_value(iter,
|
|
||||||
GnomeBluetooth.Column.TRUSTED);
|
|
||||||
if (isPaired || isTrusted)
|
|
||||||
nDevices++;
|
|
||||||
ret = this._model.iter_next(iter);
|
ret = this._model.iter_next(iter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this._hadSetupDevices != (nDevices > 0)) {
|
if (this._hadSetupDevices !== (deviceInfos.length > 0)) {
|
||||||
this._hadSetupDevices = !this._hadSetupDevices;
|
this._hadSetupDevices = !this._hadSetupDevices;
|
||||||
global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
|
global.settings.set_boolean(HAD_BLUETOOTH_DEVICES_SETUP, this._hadSetupDevices);
|
||||||
}
|
}
|
||||||
|
|
||||||
return [nDevices, nConnectedDevices];
|
return deviceInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
let [nDevices, nConnectedDevices] = this._getNDevices();
|
let adapter = this._getDefaultAdapter();
|
||||||
|
let devices = this._getDeviceInfos(adapter);
|
||||||
|
const connectedDevices = devices.filter(dev => dev.connected);
|
||||||
|
const nConnectedDevices = connectedDevices.length;
|
||||||
|
const nDevices = devices.length;
|
||||||
|
|
||||||
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
let sensitive = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
|
||||||
|
|
||||||
this.menu.setSensitive(sensitive);
|
this.menu.setSensitive(sensitive);
|
||||||
@ -127,7 +125,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
if (nConnectedDevices > 0)
|
if (nConnectedDevices > 0)
|
||||||
/* Translators: this is the number of connected bluetooth devices */
|
/* Translators: this is the number of connected bluetooth devices */
|
||||||
this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
|
this._item.label.text = ngettext("%d Connected", "%d Connected", nConnectedDevices).format(nConnectedDevices);
|
||||||
else if (nConnectedDevices == -1)
|
else if (adapter === null)
|
||||||
this._item.label.text = _("Off");
|
this._item.label.text = _("Off");
|
||||||
else
|
else
|
||||||
this._item.label.text = _("On");
|
this._item.label.text = _("On");
|
||||||
|
Loading…
Reference in New Issue
Block a user