From f4d2eeb7f7310794e4d1fbe69cc3859cbe1ea2f5 Mon Sep 17 00:00:00 2001 From: Jamison Lofthouse Date: Wed, 24 Jun 2020 12:19:57 -0400 Subject: [PATCH] Add wifi device change callback Add any wifi devices that have become managed or remove ones that have become unmanaged. Since a device could have been added or removed previously, we also have to handle multiple calls to add or remove a device. --- panels/network/cc-wifi-panel.c | 45 +++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/panels/network/cc-wifi-panel.c b/panels/network/cc-wifi-panel.c index e17610735..e5a81a489 100644 --- a/panels/network/cc-wifi-panel.c +++ b/panels/network/cc-wifi-panel.c @@ -453,18 +453,55 @@ verify_argv (CcWifiPanel *self, /* Callbacks */ static void -device_added_cb (CcWifiPanel *self, NMDevice *device) +device_state_changed_cb (CcWifiPanel *self, GParamSpec *pspec, NMDevice *device) { - if (!NM_IS_DEVICE_WIFI (device) || !nm_device_get_managed (device)) + const gchar *id; + + id = nm_device_get_udi (device); + /* Don't add a device that has already been added */ + if (!NM_IS_DEVICE_WIFI (device) || !id) return; - add_wifi_device (self, device); - check_main_stack_page (self); + if (nm_device_get_managed (device)) + { + if (gtk_stack_get_child_by_name (self->stack, id)) + return; + add_wifi_device (self, device); + check_main_stack_page (self); + } + else + { + if (!gtk_stack_get_child_by_name (self->stack, id)) + return; + remove_wifi_device (self, device); + check_main_stack_page (self); + } +} + +static void +device_added_cb (CcWifiPanel *self, NMDevice *device) +{ + if (!NM_IS_DEVICE_WIFI (device)) + return; + + if (nm_device_get_managed (device)) + { + add_wifi_device (self, device); + check_main_stack_page (self); + } + + g_signal_connect_object (device, + "notify::state", + G_CALLBACK (device_state_changed_cb), + self, + G_CONNECT_SWAPPED); } static void device_removed_cb (CcWifiPanel *self, NMDevice *device) { + const gchar *id; + if (!NM_IS_DEVICE_WIFI (device)) return;