[gnome-shell] status/network: Add activate() to NMDeviceItem



commit be98e5b3143caf6a140f6478c3776b18fdf131f7
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Aug 3 06:44:36 2022 +0200

    status/network: Add activate() to NMDeviceItem
    
    DeviceItems are sections, and therefore not actually activatable.
    
    However when we port to quick settings, those toggles will need
    to do *something*.
    
    For that reason, provide an activate() implementation that
    
     1. deactivates the device if currently connected
    
     2. delegates the action to the most-recently used item,
        the first visible item or the auto-connect item (in that
        order)
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2408>

 js/ui/status/network.js | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
---
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 39a89e93d2..1beab28c1f 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -499,6 +499,29 @@ const NMDeviceItem = GObject.registerClass({
             this._addConnection(conn);
     }
 
+    _getActivatableItem() {
+        const [lastUsed] = this._itemSorter.itemsByMru();
+        if (lastUsed?.timestamp > 0)
+            return lastUsed;
+
+        const [firstItem] = this._itemSorter;
+        if (firstItem)
+            return firstItem;
+
+        console.assert(this._autoConnectItem.visible,
+            `${this}'s autoConnect item should be visible when otherwise empty`);
+        return this._autoConnectItem;
+    }
+
+    activate() {
+        super.activate();
+
+        if (this._activeConnection)
+            this.deactivateConnection();
+        else
+            this._getActivatableItem()?.activate();
+    }
+
     activateConnection(connection) {
         this._client.activate_connection_async(connection, this._device, null, null, null);
     }


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