[gnome-control-center/gnome-3-38] network: Correctly detect when ethernet devices are hotplugged.
- From: Robert Ancell <rancell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/gnome-3-38] network: Correctly detect when ethernet devices are hotplugged.
- Date: Thu, 19 Nov 2020 23:45:39 +0000 (UTC)
commit a8df97dd31798bf25eb0c0b78bdb07026f45a95f
Author: Robert Ancell <robert ancell canonical com>
Date: Thu Nov 5 17:04:36 2020 +1300
network: Correctly detect when ethernet devices are hotplugged.
Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/995
panels/network/cc-network-panel.c | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
---
diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c
index fc97fbca8..b87e58b45 100644
--- a/panels/network/cc-network-panel.c
+++ b/panels/network/cc-network-panel.c
@@ -391,9 +391,6 @@ panel_add_device (CcNetworkPanel *self, NMDevice *device)
NetDeviceBluetooth *device_bluetooth;
g_autoptr(GDBusObject) modem_object = NULL;
- if (!nm_device_get_managed (device))
- return;
-
/* does already exist */
if (g_hash_table_lookup (self->nm_device_to_device, device) != NULL)
return;
@@ -517,19 +514,36 @@ active_connections_changed (CcNetworkPanel *self)
}
static void
-device_added_cb (CcNetworkPanel *self, NMDevice *device)
+device_managed_cb (CcNetworkPanel *self, GParamSpec *pspec, NMDevice *device)
{
- g_debug ("New device added");
+ if (!nm_device_get_managed (device))
+ return;
+
panel_add_device (self, device);
panel_refresh_device_titles (self);
}
+static void
+device_added_cb (CcNetworkPanel *self, NMDevice *device)
+{
+ g_debug ("New device added");
+
+ if (nm_device_get_managed (device))
+ device_managed_cb (self, NULL, device);
+ else
+ g_signal_connect_object (device, "notify::managed", G_CALLBACK (device_managed_cb), self,
G_CONNECT_SWAPPED);
+}
+
static void
device_removed_cb (CcNetworkPanel *self, NMDevice *device)
{
g_debug ("Device removed");
panel_remove_device (self, device);
panel_refresh_device_titles (self);
+
+ g_signal_handlers_disconnect_by_func (device,
+ G_CALLBACK (device_managed_cb),
+ self);
}
static void
@@ -537,7 +551,6 @@ manager_running (CcNetworkPanel *self)
{
const GPtrArray *devices;
int i;
- NMDevice *device_tmp;
/* clear all devices we added */
if (!nm_client_get_nm_running (self->client)) {
@@ -552,8 +565,8 @@ manager_running (CcNetworkPanel *self)
return;
}
for (i = 0; i < devices->len; i++) {
- device_tmp = g_ptr_array_index (devices, i);
- panel_add_device (self, device_tmp);
+ NMDevice *device = g_ptr_array_index (devices, i);
+ device_added_cb (self, device);
}
out:
panel_refresh_device_titles (self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]