[gnome-shell] status/network: Special-case wireless hotspots
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] status/network: Special-case wireless hotspots
- Date: Wed, 10 Aug 2022 16:41:15 +0000 (UTC)
commit 8e685246e2e46534da7dfcd5d5fd3419c32addc1
Author: Florian Müllner <fmuellner gnome org>
Date: Fri Aug 5 13:40:45 2022 +0200
status/network: Special-case wireless hotspots
If any device is in hotspot mode, use the corresponding item as
primary. Disable the (future QuickMenuToggle) menu in that case,
and turn off the hotspot when activated rather than toggling the
global wireless switch.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2408>
js/ui/status/network.js | 35 ++++++++++++++++++++++++++++++++---
1 file changed, 32 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index abd3c3f518..9e2ef3a8b8 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -1124,6 +1124,14 @@ const NMWirelessDeviceItem = GObject.registerClass({
return ip4config.get_method() === NM.SETTING_IP4_CONFIG_METHOD_SHARED;
}
+ activate() {
+ if (!this.is_hotspot)
+ return;
+
+ const {activeConnection} = this._device;
+ this._client.deactivate_connection_async(activeConnection, null, null);
+ }
+
_activeApChanged() {
this._activeAccessPoint?.disconnectObject(this);
this._activeAccessPoint = this._device.active_access_point;
@@ -1690,11 +1698,20 @@ class NMDeviceSection extends NMSection {
}
});
-const NMWirelessSection = GObject.registerClass(
-class NMWirelessSection extends NMDeviceSection {
+const NMWirelessSection = GObject.registerClass({
+ Properties: {
+ 'menu-enabled': GObject.ParamSpec.boolean('menu-enabled', '', '',
+ GObject.ParamFlags.READWRITE,
+ false),
+ },
+}, class NMWirelessSection extends NMDeviceSection {
constructor() {
super(NM.DeviceType.WIFI);
+ this._itemBinding.bind('is-hotspot',
+ this, 'menu-enabled',
+ GObject.BindingFlags.INVERT_BOOLEAN);
+
this.menu.addSettingsAction(_('All Networks'),
'gnome-wifi-panel.desktop');
}
@@ -1711,7 +1728,11 @@ class NMWirelessSection extends NMDeviceSection {
}
activate() {
- this._client.wireless_enabled = !this._client.wireless_enabled;
+ const primaryItem = this._itemBinding.source;
+ if (primaryItem?.is_hotspot)
+ primaryItem.activate();
+ else
+ this._client.wireless_enabled = !this._client.wireless_enabled;
}
_createDeviceMenuItem(device) {
@@ -1722,6 +1743,14 @@ class NMWirelessSection extends NMDeviceSection {
// handled via a property binding
}
+ _getPrimaryItem() {
+ const hotspot = [...this._items.values()].find(i => i.is_hotspot);
+ if (hotspot)
+ return hotspot;
+
+ return super._getPrimaryItem();
+ }
+
_shouldShowDevice(device) {
// don't disappear if wireless-enabled is false
if (device.state === NM.DeviceState.UNAVAILABLE)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]