aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-01-16 06:27:28 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-01-16 06:27:28 +0100
commitb31ce5aec42dc186f3128cc7cc91cf8f34ebcc66 (patch)
tree976154e691a50843e8c615130149ebde02a9eb0f
parent524ed51d8cfe3a34ed932a4f0c357215b01abca0 (diff)
downloadconnman-gnome-b31ce5aec42dc186f3128cc7cc91cf8f34ebcc66.tar.gz
Handle signal that indicate a new network
-rw-r--r--common/client.c61
-rw-r--r--common/test-client.c34
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,