From d53285d71b42d35b88c602ee7dc33509bb10961d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Mon, 7 Jun 2021 18:28:32 +0200 Subject: [PATCH] status/network: Only list wifi networks that can be activated Setting up a connection for an Enterprise WPA(2) encrypted wireless network requires Settings. That's not available when windows are disabled via the session mode, so filter out affected entries. Part-of: --- js/ui/status/network.js | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/js/ui/status/network.js b/js/ui/status/network.js index 6e7878d20..3a1d47aa1 100644 --- a/js/ui/status/network.js +++ b/js/ui/status/network.js @@ -1,6 +1,6 @@ // -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*- /* exported NMApplet */ -const { Clutter, Gio, GLib, GObject, NM, St } = imports.gi; +const { Clutter, Gio, GLib, GObject, Meta, NM, St } = imports.gi; const Signals = imports.signals; const Animation = imports.ui.animation; @@ -816,6 +816,11 @@ class NMWirelessDialog extends ModalDialog.ModalDialog { GLib.source_remove(this._scanTimeoutId); this._scanTimeoutId = 0; } + + if (this._syncVisibilityId) { + Meta.later_remove(this._syncVisibilityId); + this._syncVisibilityId = 0; + } } _onScanTimeout() { @@ -1149,9 +1154,32 @@ class NMWirelessDialog extends ModalDialog.ModalDialog { this._itemBox.insert_child_at_index(network.item, newPos); } + this._queueSyncItemVisibility(); this._syncView(); } + _queueSyncItemVisibility() { + if (this._syncVisibilityId) + return; + + this._syncVisibilityId = Meta.later_add( + Meta.LaterType.BEFORE_REDRAW, + () => { + const { hasWindows } = Main.sessionMode; + const { WPA2_ENT, WPA_ENT } = NMAccessPointSecurity; + + for (const network of this._networks) { + const [firstAp] = network.accessPoints; + network.item.visible = + hasWindows || + network.connections.length > 0 || + (firstAp._secType !== WPA2_ENT && firstAp._secType !== WPA_ENT); + } + this._syncVisibilityId = 0; + return GLib.SOURCE_REMOVE; + }); + } + _accessPointRemoved(device, accessPoint) { let res = this._findExistingNetwork(accessPoint); @@ -1200,6 +1228,7 @@ class NMWirelessDialog extends ModalDialog.ModalDialog { _createNetworkItem(network) { network.item = new NMWirelessDialogItem(network); network.item.setActive(network == this._selectedNetwork); + network.item.hide(); network.item.connect('selected', () => { Util.ensureActorVisibleInScrollView(this._scrollView, network.item); this._selectNetwork(network);