[gnome-shell] status/bluetooth: Indicate progress on toggle



commit 6a23e8ee0f4e859ac3aa0098c102d13946ac3732
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Aug 23 00:06:42 2022 +0200

    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>

 js/ui/status/bluetooth.js | 21 +++++++++++++++++++--
 1 file changed, 19 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/status/bluetooth.js b/js/ui/status/bluetooth.js
index 9580e7b4c7..d4de597ad7 100644
--- a/js/ui/status/bluetooth.js
+++ b/js/ui/status/bluetooth.js
@@ -178,14 +178,31 @@ class BluetoothToggle extends QuickToggle {
         this._client.bind_property('active',
             this, 'checked',
             GObject.BindingFlags.SYNC_CREATE);
-        this._client.bind_property_full('active',
+        this._client.bind_property_full('adapter-state',
             this, 'icon-name',
             GObject.BindingFlags.SYNC_CREATE,
-            (bind, source) => [true, source ? 'bluetooth-active-symbolic' : 'bluetooth-disabled-symbolic'],
+            (bind, source) => [true, this._getIconNameFromState(source)],
             null);
 
         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(


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]