diff --git a/data/24/network-cellular-signal-excellent-secure-symbolic.svg b/data/24/network-cellular-signal-excellent-secure-symbolic.svg deleted file mode 100644 index 12990e37a..000000000 --- a/data/24/network-cellular-signal-excellent-secure-symbolic.svg +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/data/24/network-cellular-signal-good-secure-symbolic.svg b/data/24/network-cellular-signal-good-secure-symbolic.svg deleted file mode 100644 index 0291318c3..000000000 --- a/data/24/network-cellular-signal-good-secure-symbolic.svg +++ /dev/null @@ -1,20 +0,0 @@ - - diff --git a/data/24/network-cellular-signal-none-secure-symbolic.svg b/data/24/network-cellular-signal-none-secure-symbolic.svg deleted file mode 100644 index 076fb28b4..000000000 --- a/data/24/network-cellular-signal-none-secure-symbolic.svg +++ /dev/null @@ -1,17 +0,0 @@ - - diff --git a/data/24/network-cellular-signal-ok-secure-symbolic.svg b/data/24/network-cellular-signal-ok-secure-symbolic.svg deleted file mode 100644 index 7ce7017bd..000000000 --- a/data/24/network-cellular-signal-ok-secure-symbolic.svg +++ /dev/null @@ -1,20 +0,0 @@ - - diff --git a/data/24/network-cellular-signal-weak-secure-symbolic.svg b/data/24/network-cellular-signal-weak-secure-symbolic.svg deleted file mode 100644 index d38fe12d9..000000000 --- a/data/24/network-cellular-signal-weak-secure-symbolic.svg +++ /dev/null @@ -1,25 +0,0 @@ - - diff --git a/data/24/network-wired-secure-symbolic.svg b/data/24/network-wired-secure-symbolic.svg deleted file mode 100644 index 40ae55358..000000000 --- a/data/24/network-wired-secure-symbolic.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/data/24/network-wireless-signal-excellent-secure-symbolic.svg b/data/24/network-wireless-signal-excellent-secure-symbolic.svg deleted file mode 100644 index a20eb3612..000000000 --- a/data/24/network-wireless-signal-excellent-secure-symbolic.svg +++ /dev/null @@ -1,13 +0,0 @@ - - diff --git a/data/24/network-wireless-signal-good-secure-symbolic.svg b/data/24/network-wireless-signal-good-secure-symbolic.svg deleted file mode 100644 index 27575dd76..000000000 --- a/data/24/network-wireless-signal-good-secure-symbolic.svg +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/data/24/network-wireless-signal-ok-secure-symbolic.svg b/data/24/network-wireless-signal-ok-secure-symbolic.svg deleted file mode 100644 index 1a2c1f8e6..000000000 --- a/data/24/network-wireless-signal-ok-secure-symbolic.svg +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/data/24/network-wireless-signal-weak-secure-symbolic.svg b/data/24/network-wireless-signal-weak-secure-symbolic.svg deleted file mode 100644 index b77752b01..000000000 --- a/data/24/network-wireless-signal-weak-secure-symbolic.svg +++ /dev/null @@ -1,16 +0,0 @@ - - diff --git a/data/network.gresource.xml b/data/network.gresource.xml index 0a4332597..597231290 100644 --- a/data/network.gresource.xml +++ b/data/network.gresource.xml @@ -16,25 +16,15 @@ 24/network-cellular-no-route-symbolic.svg 24/network-cellular-offline-symbolic.svg - 24/network-cellular-signal-excellent-secure-symbolic.svg 24/network-cellular-signal-excellent-symbolic.svg - 24/network-cellular-signal-good-secure-symbolic.svg 24/network-cellular-signal-good-symbolic.svg - 24/network-cellular-signal-none-secure-symbolic.svg 24/network-cellular-signal-none-symbolic.svg - 24/network-cellular-signal-ok-secure-symbolic.svg 24/network-cellular-signal-ok-symbolic.svg - 24/network-cellular-signal-weak-secure-symbolic.svg 24/network-cellular-signal-weak-symbolic.svg - 24/network-cellular-signal-excellent-secure-symbolic.svg 24/network-cellular-signal-excellent-symbolic.svg - 24/network-cellular-signal-good-secure-symbolic.svg 24/network-cellular-signal-good-symbolic.svg - 24/network-cellular-signal-none-secure-symbolic.svg 24/network-cellular-signal-none-symbolic.svg - 24/network-cellular-signal-ok-secure-symbolic.svg 24/network-cellular-signal-ok-symbolic.svg - 24/network-cellular-signal-weak-secure-symbolic.svg 24/network-cellular-signal-weak-symbolic.svg 16/network-vpn-acquiring-symbolic.svg @@ -57,7 +47,6 @@ 24/network-wired-connected-symbolic.svg 24/network-wired-no-route-symbolic.svg 24/network-wired-offline-symbolic.svg - 24/network-wired-secure-symbolic.svg 24/network-wireless-no-route-symbolic.svg 24/network-wireless-offline-symbolic.svg @@ -69,21 +58,13 @@ 16/network-wireless-signal-ok-symbolic.svg 16/network-wireless-signal-weak-symbolic.svg - 24/network-wireless-signal-excellent-secure-symbolic.svg 24/network-wireless-signal-excellent-symbolic.svg - 24/network-wireless-signal-good-secure-symbolic.svg 24/network-wireless-signal-good-symbolic.svg - 24/network-wireless-signal-ok-secure-symbolic.svg 24/network-wireless-signal-ok-symbolic.svg - 24/network-wireless-signal-weak-secure-symbolic.svg 24/network-wireless-signal-weak-symbolic.svg - 24/network-wireless-signal-excellent-secure-symbolic.svg 24/network-wireless-signal-excellent-symbolic.svg - 24/network-wireless-signal-good-secure-symbolic.svg 24/network-wireless-signal-good-symbolic.svg - 24/network-wireless-signal-ok-secure-symbolic.svg 24/network-wireless-signal-ok-symbolic.svg - 24/network-wireless-signal-weak-secure-symbolic.svg 24/network-wireless-signal-weak-symbolic.svg diff --git a/data/network.metainfo.xml.in b/data/network.metainfo.xml.in index db2f4154f..dfcea1761 100644 --- a/data/network.metainfo.xml.in +++ b/data/network.metainfo.xml.in @@ -109,6 +109,7 @@ + Separate VPN icon from network icon VPN switch jumps due to WiFi list height change Network adapter names aren't truncated Disabled wireless inconsistent diff --git a/src/Indicator.vala b/src/Indicator.vala index eda2b30e3..0aa75762f 100644 --- a/src/Indicator.vala +++ b/src/Indicator.vala @@ -52,7 +52,6 @@ public class Network.Indicator : Wingpanel.Indicator { popover_widget = new Widgets.PopoverWidget (is_in_session); popover_widget.notify["state"].connect (on_state_changed); - popover_widget.notify["secure"].connect (on_state_changed); popover_widget.notify["extra-info"].connect (on_state_changed); popover_widget.settings_shown.connect (() => { close (); }); @@ -98,7 +97,7 @@ public class Network.Indicator : Wingpanel.Indicator { assert (popover_widget != null); assert (display_widget != null); - display_widget.update_state (popover_widget.state, popover_widget.secure, popover_widget.extra_info); + display_widget.update_state (popover_widget.state, popover_widget.extra_info); update_tooltip (); } diff --git a/src/Widgets/DisplayWidget.vala b/src/Widgets/DisplayWidget.vala index 6d958f37a..bd9b6f066 100644 --- a/src/Widgets/DisplayWidget.vala +++ b/src/Widgets/DisplayWidget.vala @@ -7,6 +7,9 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { private Gtk.Image image; private Gtk.Label extra_info_label; private Gtk.Revealer extra_info_revealer; + private Gtk.Revealer vpn_revealer; + private NM.Client nm_client; + private NM.VpnConnection? active_vpn_connection = null; private uint wifi_animation_timeout; private int wifi_animation_state = 0; @@ -29,11 +32,29 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { transition_type = SLIDE_LEFT }; + var vpn_image = new Gtk.Image.from_icon_name ("network-vpn-connected-symbolic", Gtk.IconSize.MENU) { + margin_start = 6 + }; + + vpn_revealer = new Gtk.Revealer () { + transition_type = Gtk.RevealerTransitionType.SLIDE_LEFT + }; + vpn_revealer.add (vpn_image); + add (image); add (extra_info_revealer); + + try { + nm_client = new NM.Client (); + + update_vpn_connection (); + nm_client.notify["active-connections"].connect (update_vpn_connection); + } catch (Error e) { + critical (e.message); + } } - public void update_state (Network.State state, bool secure, string? extra_info = null) { + public void update_state (Network.State state, string? extra_info = null) { extra_info_revealer.reveal_child = extra_info != null; extra_info_label.label = extra_info; @@ -55,19 +76,19 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { image.icon_name = "panel-network-wired-acquiring-symbolic"; break; case Network.State.CONNECTED_WIRED: - image.icon_name = "panel-network-wired-%ssymbolic".printf (secure? "secure-" : "connected-"); + image.icon_name = "panel-network-wired-connected-symbolic"; break; case Network.State.CONNECTED_WIFI_WEAK: - image.icon_name = "panel-network-wireless-signal-weak-%ssymbolic".printf (secure? "secure-" : ""); + image.icon_name = "panel-network-wireless-signal-weak-symbolic"; break; case Network.State.CONNECTED_WIFI_OK: - image.icon_name = "panel-network-wireless-signal-ok-%ssymbolic".printf (secure? "secure-" : ""); + image.icon_name = "panel-network-wireless-signal-ok-symbolic"; break; case Network.State.CONNECTED_WIFI_GOOD: - image.icon_name = "panel-network-wireless-signal-good-%ssymbolic".printf (secure? "secure-" : ""); + image.icon_name = "panel-network-wireless-signal-good-symbolic"; break; case Network.State.CONNECTED_WIFI_EXCELLENT: - image.icon_name = "panel-network-wireless-signal-excellent-%ssymbolic".printf (secure? "secure-" : ""); + image.icon_name = "panel-network-wireless-signal-excellent-symbolic"; break; case Network.State.CONNECTING_WIFI: wifi_animation_timeout = Timeout.add (300, () => { @@ -87,21 +108,21 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { strength = "excellent"; break; } - image.icon_name = "panel-network-wireless-signal-" + strength + (secure? "-secure" : "") + "-symbolic"; + image.icon_name = "panel-network-wireless-signal-%s-symbolic".printf (strength); return true; }); break; case Network.State.CONNECTED_MOBILE_WEAK: - image.icon_name = "panel-network-cellular-signal-weak-%ssymbolic".printf (secure ? "secure-" : ""); + image.icon_name = "panel-network-cellular-signal-weak-symbolic"; break; case Network.State.CONNECTED_MOBILE_OK: - image.icon_name = "panel-network-cellular-signal-ok-%ssymbolic".printf (secure ? "secure-" : ""); + image.icon_name = "panel-network-cellular-signal-ok-symbolic"; break; case Network.State.CONNECTED_MOBILE_GOOD: - image.icon_name = "panel-network-cellular-signal-good-%ssymbolic".printf (secure ? "secure-" : ""); + image.icon_name = "panel-network-cellular-signal-good-symbolic"; break; case Network.State.CONNECTED_MOBILE_EXCELLENT: - image.icon_name = "panel-network-cellular-signal-excellent-%ssymbolic".printf (secure ? "secure-" : ""); + image.icon_name = "panel-network-cellular-signal-excellent-symbolic"; break; case Network.State.CONNECTING_MOBILE: cellular_animation_timeout = Timeout.add (300, () => { @@ -122,7 +143,7 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { break; } - image.icon_name = "panel-network-cellular-signal-" + strength + (secure ? "secure-" : "") + "-symbolic"; + image.icon_name = "panel-network-cellular-signal-%s-symbolic".printf (strength); return true; }); break; @@ -143,4 +164,26 @@ public class Network.Widgets.DisplayWidget : Gtk.Box { break; } } + + private void update_vpn_connection () { + active_vpn_connection.vpn_state_changed.disconnect (reveal_vpn); + active_vpn_connection = null; + + nm_client.get_active_connections ().foreach ((connection) => { + if (active_vpn_connection == null && connection.vpn) { + active_vpn_connection = (NM.VpnConnection) connection; + active_vpn_connection.vpn_state_changed.connect (reveal_vpn); + } + }); + + reveal_vpn (); + } + + private void reveal_vpn () { + if (active_vpn_connection != null && active_vpn_connection.get_vpn_state () == NM.VpnConnectionState.ACTIVATED) { + vpn_revealer.reveal_child = true; + } else { + vpn_revealer.reveal_child = false; + } + } } diff --git a/src/Widgets/PopoverWidget.vala b/src/Widgets/PopoverWidget.vala index e056d5197..0f948b4e3 100644 --- a/src/Widgets/PopoverWidget.vala +++ b/src/Widgets/PopoverWidget.vala @@ -8,7 +8,6 @@ public class Network.Widgets.PopoverWidget : Gtk.Box { public GLib.List? network_interface { get; private owned set; } - public bool secure { private set; get; default = false; } public string? extra_info { private set; get; default = null; } public Network.State state { private set; get; default = Network.State.CONNECTING_WIRED; } @@ -125,7 +124,6 @@ public class Network.Widgets.PopoverWidget : Gtk.Box { toggle_revealer.reveal_child = other_box.get_child_at_index (0) != null; show_all (); - update_vpn_connection (); hidden_item.clicked.connect (() => { bool found = false; @@ -140,7 +138,6 @@ public class Network.Widgets.PopoverWidget : Gtk.Box { /* Monitor network manager */ nm_client.device_added.connect (device_added_cb); nm_client.device_removed.connect (device_removed_cb); - nm_client.notify["active-connections"].connect (update_vpn_connection); nm_client.notify["networking-enabled"].connect (update_state); vpn_interface.notify["state"].connect (update_state); @@ -312,28 +309,4 @@ public class Network.Widgets.PopoverWidget : Gtk.Box { state = next_state; } } - - private void update_vpn_connection () { - /* Stupid heuristic for now: at least one connection must be secure to - * display the secure badge. */ - // Reset the current status - secure = false; - nm_client.get_active_connections ().foreach ((ac) => { - unowned string connection_type = ac.get_connection_type (); - if (connection_type == NM.SettingVpn.SETTING_NAME) { - /* We cannot rely on the sole state_changed signal, as it will - * silently ignore sub-vpn specific states, like tun/tap - * interface connection etc. That's why we keep a separate - * implementation for the signal handlers. */ - var _connection = (NM.VpnConnection) ac; - secure = secure || (_connection.get_vpn_state () == NM.VpnConnectionState.ACTIVATED); - _connection.vpn_state_changed.disconnect (update_vpn_connection); - _connection.vpn_state_changed.connect (update_vpn_connection); - } else if (connection_type == NM.SettingWireGuard.SETTING_NAME) { - secure = secure || (ac.get_state () == NM.ActiveConnectionState.ACTIVATED); - ac.state_changed.disconnect (update_vpn_connection); - ac.state_changed.connect (update_vpn_connection); - } - }); - } }