[network-manager-netbook] Clear/fill the wifi list from "Add a ne connection" whenever needed.
- From: Tambet Ingo <tambeti src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [network-manager-netbook] Clear/fill the wifi list from "Add a ne connection" whenever needed.
- Date: Thu, 24 Sep 2009 11:56:49 +0000 (UTC)
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]