[network-manager-netbook] Clear/fill the wifi list from "Add a ne connection" whenever needed.



commit b9cdd3d97d0edb41d24aa6e79f92d2bd7821b160
Author: Tambet Ingo <tambet gmail com>
Date:   Thu Sep 24 11:21:20 2009 +0300

    Clear/fill the wifi list from "Add a ne connection" whenever needed.
    
    Listen for wifi enabled/disabled, offline enabled/disabled, device
    added/removed, ap added/removed signals and keep the list up to date.

 src/nmn-wifi-list.c |   77 +++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 68 insertions(+), 9 deletions(-)
---
diff --git a/src/nmn-wifi-list.c b/src/nmn-wifi-list.c
index ec6af11..3cdbf5c 100644
--- a/src/nmn-wifi-list.c
+++ b/src/nmn-wifi-list.c
@@ -188,10 +188,16 @@ ap_removed (NMDeviceWifi *device,
             NMAccessPoint *ap,
             gpointer user_data)
 {
-    /* FIXME */
+    GtkContainer *container = GTK_CONTAINER (user_data);
+    GList *items;
 
-    /*     NmnWifiList *list = NMN_WIFI_LIST (user_data); */
-    /*     NmnWifiListPrivate *priv = GET_PRIVATE (list); */
+    items = gtk_container_get_children (container);
+    while (items) {
+        if (nmn_wifi_item_get_ap (NMN_WIFI_ITEM (items->data)) == ap)
+            gtk_container_remove (container, GTK_WIDGET (items->data));
+
+        items = g_list_delete_link (items, items);
+    }
 }
 
 static void
@@ -221,14 +227,21 @@ device_removed (NMClient *client,
                 NMDevice *device,
                 gpointer user_data)
 {
-    /* FIXME */
-    g_debug (G_STRLOC);
+    GtkContainer *container = GTK_CONTAINER (user_data);
+    GList *items;
+
+    items = gtk_container_get_children (container);
+    while (items) {
+        if (nmn_network_item_get_device (NMN_NETWORK_ITEM (items->data)) == device)
+            gtk_container_remove (container, GTK_WIDGET (items->data));
+
+        items = g_list_delete_link (items, items);
+    }
 }
 
-static gboolean
-populate_list (gpointer data)
+static void
+populate_list (NmnWifiList *list)
 {
-    NmnWifiList *list = NMN_WIFI_LIST (data);
     NmnWifiListPrivate *priv = GET_PRIVATE (list);
     NMClient *client;
     const GPtrArray *devices;
@@ -238,6 +251,42 @@ populate_list (gpointer data)
     devices = nm_client_get_devices (client);
     for (i = 0; devices && i < devices->len; i++)
         device_added (client, NM_DEVICE (g_ptr_array_index (devices, i)), list);
+}
+
+static void
+clear_list (NmnWifiList *list)
+{
+    GtkContainer *container;
+    GList *items;
+
+    container = GTK_CONTAINER (list);
+    items = gtk_container_get_children (container);
+    while (items) {
+        gtk_container_remove (container, GTK_WIDGET (items->data));
+        items = g_list_delete_link (items, items);
+    }
+}
+
+static void
+wifi_toggled (NmnNMData *nm_data,
+              gboolean active,
+              gpointer user_data)
+{
+    NmnWifiList *list = NMN_WIFI_LIST (user_data);
+
+    if (nmn_nm_data_wifi_get_active (nm_data) && !nmn_nm_data_offline_mode_get_active (nm_data))
+        populate_list (list);
+    else
+        clear_list (list);
+}
+
+static gboolean
+construction_done (gpointer data)
+{
+    NmnWifiList *list = NMN_WIFI_LIST (data);
+    NmnWifiListPrivate *priv = GET_PRIVATE (list);
+
+    wifi_toggled (priv->nm_data, FALSE, list);
 
     return FALSE;
 }
@@ -281,8 +330,18 @@ constructor (GType type,
                       G_CALLBACK (device_removed),
                       object);
 
+    g_signal_connect (priv->nm_data,
+                      "wifi-toggled",
+                      G_CALLBACK (wifi_toggled),
+                      object);
+
+    g_signal_connect (priv->nm_data,
+                      "offline-mode-toggled",
+                      G_CALLBACK (wifi_toggled),
+                      object);
+
     source = g_idle_source_new ();
-    g_source_set_closure (source, g_cclosure_new_object (G_CALLBACK (populate_list), object));
+    g_source_set_closure (source, g_cclosure_new_object (G_CALLBACK (construction_done), object));
     g_source_attach (source, NULL);
     g_source_unref (source);
 



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