[gnome-control-center] Add wifi device change callback
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] Add wifi device change callback
- Date: Tue, 30 Jun 2020 04:04:49 +0000 (UTC)
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]