Blob Blame History Raw
From 3e03aaba0453894aa0affd5b2e4f6a54794387cf Mon Sep 17 00:00:00 2001
From: Benjamin Berg <bberg@redhat.com>
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