From 3e03aaba0453894aa0affd5b2e4f6a54794387cf Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Wed, 28 Jul 2021 22:16:21 +0200 Subject: [PATCH 1/8] network: Populate AP list from idle handler Doing this should prevent the UI from becoming completely unusable as updates of the AP list should be batched up rather than processed sequentially. --- panels/network/net-device-wifi.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c index 313e9ab8c..33758e499 100644 --- a/panels/network/net-device-wifi.c +++ b/panels/network/net-device-wifi.c @@ -64,6 +64,7 @@ struct _NetDeviceWifiPrivate gchar *selected_connection_id; gchar *selected_ap_id; guint scan_id; + guint populate_ap_list_idle_id; GCancellable *cancellable; }; @@ -1619,6 +1620,7 @@ net_device_wifi_finalize (GObject *object) g_clear_object (&priv->cancellable); } disable_scan_timeout (device_wifi); + g_clear_handle_id (&priv->populate_ap_list_idle_id, g_source_remove); g_clear_pointer (&priv->details_dialog, gtk_widget_destroy); g_object_unref (priv->builder); @@ -2145,8 +2147,8 @@ open_history (NetDeviceWifi *device_wifi) gtk_window_present (GTK_WINDOW (dialog)); } -static void -populate_ap_list (NetDeviceWifi *device_wifi) +static gboolean +populate_ap_list_idle (NetDeviceWifi *device_wifi) { GtkWidget *list; GtkSizeGroup *rows; @@ -2162,6 +2164,8 @@ populate_ap_list (NetDeviceWifi *device_wifi) GtkWidget *button; GList *children, *child; + device_wifi->priv->populate_ap_list_idle_id = 0; + list = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, "listbox")); children = gtk_container_get_children (GTK_CONTAINER (list)); @@ -2217,6 +2221,17 @@ populate_ap_list (NetDeviceWifi *device_wifi) g_slist_free (connections); g_ptr_array_free (aps_unique, TRUE); + + return G_SOURCE_REMOVE; +} + +static void +populate_ap_list (NetDeviceWifi *device_wifi) +{ + if (device_wifi->priv->populate_ap_list_idle_id != 0) + return; + + device_wifi->priv->populate_ap_list_idle_id = g_idle_add ((GSourceFunc) populate_ap_list_idle, device_wifi); } static void -- 2.34.1