[gnome-shell] status/network: Merge NMConnectionSection and NMConnectionDevice



commit 7357a80d2b908c0a76596662310e740e15bcdbce
Author: Florian Müllner <fmuellner gnome org>
Date:   Tue Aug 2 15:36:38 2022 +0200

    status/network: Merge NMConnectionSection and NMConnectionDevice
    
    Now that the VPN section isn't using NMConnectionSection anymore,
    NMConnectionDevice is the only subclass.
    
    Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2407>

 js/ui/status/network.js | 189 ++++++++++++++++++++----------------------------
 1 file changed, 77 insertions(+), 112 deletions(-)
---
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 5c3cd7bcbb..406509834b 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -302,14 +302,16 @@ const NMDeviceConnectionItem = GObject.registerClass({
     }
 });
 
-var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter {
-    constructor(client) {
+var NMDeviceItem = class NMDeviceItem extends Signals.EventEmitter {
+    constructor(client, device) {
         super();
 
-        if (this.constructor === NMConnectionSection)
+        if (this.constructor === NMDeviceItem)
             throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
 
         this._client = client;
+        this._device = device;
+        this._deviceName = '';
 
         this._connectionItems = new Map();
         this._itemSorter = new ItemSorter();
@@ -319,42 +321,86 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
         this.item = new PopupMenu.PopupSubMenuMenuItem('', true);
         this.item.menu.addMenuItem(this._section);
 
-        this._client.connectObject('notify::connectivity',
-            this._iconChanged.bind(this), this);
+        this._autoConnectItem = this.item.menu.addAction(_('Connect'), this._autoConnect.bind(this));
+        this._deactivateItem = this.item.menu.addAction(_('Turn Off'),
+            () => this.deactivateConnection());
+
+        this._client.connectObject(
+            'notify::connectivity', () => this._iconChanged(),
+            'notify::primary-connection', () => this._iconChanged(),
+            this);
+
+        this._device.connectObject(
+            'notify::active-connection', () => this._activeConnectionChanged(),
+            'state-changed', this._deviceStateChanged.bind(this),
+            this);
     }
 
     destroy() {
         this._client.disconnectObject(this);
+        this._device.disconnectObject(this);
         this.item.destroy();
     }
 
-    _iconChanged() {
-        this._connectionItems.forEach(
-            item => (item.icon_name = this.getIndicatorIcon()));
+    _canReachInternet() {
+        if (this._client.primary_connection !== this._device.active_connection)
+            return true;
+
+        return this._client.connectivity === NM.ConnectivityState.FULL;
+    }
+
+    _autoConnect() {
+        let connection = new NM.SimpleConnection();
+        this._client.add_and_activate_connection_async(connection, this._device, null, null, null);
+    }
+
+    _activeConnectionChanged() {
+        if (this._activeConnection) {
+            let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
+            item.setActiveConnection(null);
+            this._activeConnection = null;
+        }
+
         this._sync();
-        this.emit('icon-changed');
     }
 
-    _sync() {
-        let nItems = this._connectionItems.size;
+    _deviceStateChanged(device, newstate, oldstate, reason) {
+        if (newstate === oldstate) {
+            log('device emitted state-changed without actually changing state');
+            return;
+        }
 
-        for (const item of this._connectionItems.values())
-            item.radio_mode = nItems > 1;
+        /* Emit a notification if activation fails, but don't do it
+           if the reason is no secrets, as that indicates the user
+           cancelled the agent dialog */
+        if (newstate === NM.DeviceState.FAILED &&
+            reason !== NM.DeviceStateReason.NO_SECRETS)
+            this.emit('activation-failed');
 
-        this.item.label.text = this._getStatus();
-        this.item.icon.icon_name = this._getMenuIcon();
+        this._sync();
+    }
+
+    _iconChanged() {
+        this._connectionItems.forEach(
+            item => (item.icon_name = this.getIndicatorIcon()));
+        this._sync();
+        this.emit('icon-changed');
     }
 
     _getMenuIcon() {
         return this.getIndicatorIcon();
     }
 
-    _connectionValid(_connection) {
-        return true;
+    _connectionValid(connection) {
+        return this._device.connection_valid(connection);
     }
 
-    _makeConnectionItem(connection) {
-        return new NMConnectionItem(this, connection);
+    activateConnection(connection) {
+        this._client.activate_connection_async(connection, this._device, null, null, null);
+    }
+
+    deactivateConnection(_activeConnection) {
+        this._device.disconnect(null);
     }
 
     checkConnection(connection) {
@@ -385,7 +431,7 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
     }
 
     _addConnection(connection) {
-        let item = this._makeConnectionItem(connection);
+        const item = new NMDeviceConnectionItem(this, connection);
         if (!item)
             return;
 
@@ -410,91 +456,6 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
 
         this._sync();
     }
-};
-
-var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
-    constructor(client, device) {
-        super(client);
-
-        if (this.constructor === NMDeviceItem)
-            throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
-
-        this._device = device;
-        this._deviceName = '';
-
-        this._autoConnectItem = this.item.menu.addAction(_("Connect"), this._autoConnect.bind(this));
-        this._deactivateItem = this.item.menu.addAction(_('Turn Off'),
-            () => this.deactivateConnection());
-
-        this._client.connectObject(
-            'notify::primary-connection', () => this._iconChanged(),
-            this);
-
-        this._device.connectObject(
-            'state-changed', this._deviceStateChanged.bind(this),
-            'notify::active-connection', this._activeConnectionChanged.bind(this),
-            this);
-    }
-
-    _canReachInternet() {
-        if (this._client.primary_connection != this._device.active_connection)
-            return true;
-
-        return this._client.connectivity == NM.ConnectivityState.FULL;
-    }
-
-    _autoConnect() {
-        let connection = new NM.SimpleConnection();
-        this._client.add_and_activate_connection_async(connection, this._device, null, null, null);
-    }
-
-    destroy() {
-        this._device.disconnectObject(this);
-
-        super.destroy();
-    }
-
-    _activeConnectionChanged() {
-        if (this._activeConnection) {
-            let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
-            item.setActiveConnection(null);
-            this._activeConnection = null;
-        }
-
-        this._sync();
-    }
-
-    _deviceStateChanged(device, newstate, oldstate, reason) {
-        if (newstate == oldstate) {
-            log('device emitted state-changed without actually changing state');
-            return;
-        }
-
-        /* Emit a notification if activation fails, but don't do it
-           if the reason is no secrets, as that indicates the user
-           cancelled the agent dialog */
-        if (newstate == NM.DeviceState.FAILED &&
-            reason != NM.DeviceStateReason.NO_SECRETS)
-            this.emit('activation-failed');
-
-        this._sync();
-    }
-
-    _connectionValid(connection) {
-        return this._device.connection_valid(connection);
-    }
-
-    _makeConnectionItem(connection) {
-        return new NMDeviceConnectionItem(this, connection);
-    }
-
-    activateConnection(connection) {
-        this._client.activate_connection_async(connection, this._device, null, null, null);
-    }
-
-    deactivateConnection(_activeConnection) {
-        this._device.disconnect(null);
-    }
 
     setDeviceName(name) {
         this._deviceName = name;
@@ -507,6 +468,10 @@ var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
         return this._deviceName;
     }
 
+    _getStatus() {
+        return this._getDescription();
+    }
+
     _sync() {
         let nItems = this._connectionItems.size;
         this._autoConnectItem.visible = nItems === 0;
@@ -524,11 +489,11 @@ var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
             }
         }
 
-        super._sync();
-    }
+        for (const item of this._connectionItems.values())
+            item.radio_mode = nItems > 1;
 
-    _getStatus() {
-        return this._getDescription();
+        this.item.label.text = this._getStatus();
+        this.item.icon.icon_name = this._getMenuIcon();
     }
 };
 
@@ -1972,7 +1937,7 @@ class Indicator extends PanelMenu.SystemIndicator {
         if (!skipSyncDeviceNames)
             this._syncDeviceNames();
 
-        if (wrapper instanceof NMConnectionSection) {
+        if (wrapper instanceof NMDeviceItem) {
             this._connections.forEach(connection => {
                 wrapper.checkConnection(connection);
             });
@@ -2107,7 +2072,7 @@ class Indicator extends PanelMenu.SystemIndicator {
         } else {
             const {devices} = this._deviceSections.get(section);
             for (let i = 0; i < devices.length; i++) {
-                if (devices[i] instanceof NMConnectionSection)
+                if (devices[i] instanceof NMDeviceItem)
                     devices[i].removeConnection(connection);
             }
         }
@@ -2127,7 +2092,7 @@ class Indicator extends PanelMenu.SystemIndicator {
 
         const {devices} = this._deviceSections.get(section);
         devices.forEach(wrapper => {
-            if (wrapper instanceof NMConnectionSection)
+            if (wrapper instanceof NMDeviceItem)
                 wrapper.checkConnection(connection);
         });
     }


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