status/bluetooth: Indicate progress on toggle

Turning bluetooth on or off can be very slow ­– 10-15 seconds on
my system – and we currently don't provide any feedback that
something is indeed happening until the state changes at last.

Address this by using the `acquiring` icon when the adapter is
in a transitioning state.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5773

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2444>
This commit is contained in:
Florian Müllner 2022-08-23 00:06:42 +02:00 committed by Marge Bot
parent d54dc08a32
commit 6a23e8ee0f

View File

@ -178,14 +178,31 @@ class BluetoothToggle extends QuickToggle {
this._client.bind_property('active', this._client.bind_property('active',
this, 'checked', this, 'checked',
GObject.BindingFlags.SYNC_CREATE); GObject.BindingFlags.SYNC_CREATE);
this._client.bind_property_full('active', this._client.bind_property_full('adapter-state',
this, 'icon-name', this, 'icon-name',
GObject.BindingFlags.SYNC_CREATE, GObject.BindingFlags.SYNC_CREATE,
(bind, source) => [true, source ? 'bluetooth-active-symbolic' : 'bluetooth-disabled-symbolic'], (bind, source) => [true, this._getIconNameFromState(source)],
null); null);
this.connect('clicked', () => this._client.toggleActive()); this.connect('clicked', () => this._client.toggleActive());
} }
_getIconNameFromState(state) {
switch (state) {
case AdapterState.ON:
return 'bluetooth-active-symbolic';
case AdapterState.OFF:
case AdapterState.ABSENT:
return 'bluetooth-disabled-symbolic';
case AdapterState.TURNING_ON:
case AdapterState.TURNING_OFF:
return 'bluetooth-acquiring-symbolic';
default:
console.warn(`Unexpected state ${
GObject.enum_to_string(AdapterState, state)}`);
return '';
}
}
}); });
var Indicator = GObject.registerClass( var Indicator = GObject.registerClass(