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>
This commit is contained in:
Florian Müllner 2022-08-03 06:44:36 +02:00 committed by Marge Bot
parent 2231fce157
commit be98e5b314

View File

@ -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);
}