diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-01-16 06:27:28 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-01-16 06:27:28 +0100 |
commit | b31ce5aec42dc186f3128cc7cc91cf8f34ebcc66 (patch) | |
tree | 976154e691a50843e8c615130149ebde02a9eb0f | |
parent | 524ed51d8cfe3a34ed932a4f0c357215b01abca0 (diff) | |
download | connman-gnome-b31ce5aec42dc186f3128cc7cc91cf8f34ebcc66.tar.gz |
Handle signal that indicate a new network
-rw-r--r-- | common/client.c | 61 | ||||
-rw-r--r-- | common/test-client.c | 34 |
2 files changed, 95 insertions, 0 deletions
diff --git a/common/client.c b/common/client.c index 734328e..a6c5ad4 100644 --- a/common/client.c +++ b/common/client.c @@ -251,6 +251,44 @@ static void ipv4_notify(DBusGProxy *object, handle_ipv4(hash, &iter); } +static void append_network(GHashTable *hash, GtkTreeIter *parent) +{ + GtkTreeModel *model = GTK_TREE_MODEL(store); + GtkTreeIter iter; + GValue *value; + const char *str; + gchar *essid; + gboolean cont; + + value = g_hash_table_lookup(hash, "ESSID"); + if (value == NULL) + return; + + str = g_value_get_string(value); + if (str == NULL) + return; + + cont = gtk_tree_model_iter_children(model, &iter, parent); + + while (cont == TRUE) { + gtk_tree_model_get(model, &iter, + CLIENT_COLUMN_NETWORK_ESSID, &essid, -1); + + if (strcmp(str, essid) == 0) { + g_free(essid); + return; + } + + g_free(essid); + + cont = gtk_tree_model_iter_next(model, &iter); + } + + gtk_tree_store_insert_with_values(store, &iter, parent, -1, + CLIENT_COLUMN_ACTIVE, TRUE, + CLIENT_COLUMN_NETWORK_ESSID, str, -1); +} + static void handle_network(GHashTable *hash, GtkTreeIter *iter, gboolean secrets) { @@ -451,6 +489,19 @@ static void policy_changed(DBusGProxy *proxy, const char *policy, string_to_policy(policy), -1); } +static void network_found(DBusGProxy *proxy, GHashTable *hash, + gpointer user_data) +{ + GtkTreeModel *model = GTK_TREE_MODEL(store); + GtkTreeIter iter; + + if (gtk_tree_model_get_iter_from_string(model, &iter, + user_data) == FALSE) + return; + + append_network(hash, &iter); +} + static void network_changed(DBusGProxy *proxy, GHashTable *hash, gpointer user_data) { @@ -558,6 +609,16 @@ static void add_interface(DBusGProxy *manager, const char *path) index = gtk_tree_model_get_string_from_iter(model, &iter); + dbus_g_proxy_add_signal(proxy, "NetworkFound", + dbus_g_type_get_map("GHashTable", + G_TYPE_STRING, G_TYPE_VALUE), + G_TYPE_INVALID); + + dbus_g_proxy_connect_signal(proxy, "NetworkFound", + G_CALLBACK(network_found), index, signal_closure); + + index = gtk_tree_model_get_string_from_iter(model, &iter); + dbus_g_proxy_add_signal(proxy, "NetworkChanged", dbus_g_type_get_map("GHashTable", G_TYPE_STRING, G_TYPE_VALUE), diff --git a/common/test-client.c b/common/test-client.c index ef19c0e..193ce90 100644 --- a/common/test-client.c +++ b/common/test-client.c @@ -33,6 +33,7 @@ static void state_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + GtkTreeIter parent; gboolean active; guint state, signal; gchar *markup; @@ -42,6 +43,12 @@ static void state_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, CLIENT_COLUMN_STATE, &state, CLIENT_COLUMN_SIGNAL, &signal, -1); + if (gtk_tree_model_iter_parent(model, &parent, iter) == TRUE) { + g_object_set(cell, "text", + active == TRUE ? "Valid" : "", NULL); + return; + } + switch (state) { case CLIENT_STATE_OFF: str = "Off"; @@ -84,10 +91,16 @@ static void state_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, static void type_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + GtkTreeIter parent; guint type; gchar *driver, *markup; const char *str; + if (gtk_tree_model_iter_parent(model, &parent, iter) == TRUE) { + g_object_set(cell, "text", NULL, NULL); + return; + } + gtk_tree_model_get(model, iter, CLIENT_COLUMN_TYPE, &type, CLIENT_COLUMN_DRIVER, &driver, -1); @@ -113,10 +126,16 @@ static void type_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, static void policy_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + GtkTreeIter parent; guint policy; gchar *markup; const char *str; + if (gtk_tree_model_iter_parent(model, &parent, iter) == TRUE) { + g_object_set(cell, "text", NULL, NULL); + return; + } + gtk_tree_model_get(model, iter, CLIENT_COLUMN_POLICY, &policy, -1); switch (policy) { @@ -142,8 +161,17 @@ static void policy_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, static void network_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + GtkTreeIter parent; gchar *essid, *psk, *markup; + if (gtk_tree_model_iter_parent(model, &parent, iter) == TRUE) { + gtk_tree_model_get(model, iter, + CLIENT_COLUMN_NETWORK_ESSID, &essid, -1); + g_object_set(cell, "text", essid, NULL); + g_free(essid); + return; + } + gtk_tree_model_get(model, iter, CLIENT_COLUMN_NETWORK_ESSID, &essid, CLIENT_COLUMN_NETWORK_PSK, &psk, -1); @@ -162,10 +190,16 @@ static void network_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, static void ipv4_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { + GtkTreeIter parent; guint state, method; gchar *address, *netmask, *gateway, *markup; const char *str; + if (gtk_tree_model_iter_parent(model, &parent, iter) == TRUE) { + g_object_set(cell, "text", NULL, NULL); + return; + } + gtk_tree_model_get(model, iter, CLIENT_COLUMN_STATE, &state, CLIENT_COLUMN_IPV4_METHOD, &method, CLIENT_COLUMN_IPV4_ADDRESS, &address, |