[gnome-control-center] Add wifi device change callback



commit f4d2eeb7f7310794e4d1fbe69cc3859cbe1ea2f5
Author: Jamison Lofthouse <jamison lofthouse gmail com>
Date:   Wed Jun 24 12:19:57 2020 -0400

    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 | 43 +++++++++++++++++++++++++++++++++++++++---
 1 file changed, 40 insertions(+), 3 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
@@ -452,19 +452,56 @@ verify_argv (CcWifiPanel  *self,
 
 /* Callbacks */
 
+static void
+device_state_changed_cb (CcWifiPanel *self, GParamSpec *pspec, NMDevice *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;
+
+  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) || !nm_device_get_managed (device))
+  if (!NM_IS_DEVICE_WIFI (device))
     return;
 
-  add_wifi_device (self, device);
-  check_main_stack_page (self);
+  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;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]