aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-05-14 08:19:48 -0700
committerMarcel Holtmann <marcel@holtmann.org>2009-05-14 08:19:48 -0700
commitca654a9bffd6507740904165d6f71cc4ec8cb61c (patch)
tree0b5f528c5d6aad2f76877c966e46727c4781c915
parentc2e53bc9997ae6174cc889055eab0c6fac58bb82 (diff)
downloadconnman-gnome-ca654a9bffd6507740904165d6f71cc4ec8cb61c.tar.gz
Start conversion to use service interface
-rw-r--r--common/connman-client.c231
-rw-r--r--common/connman-client.h26
-rw-r--r--common/connman-dbus.c392
-rw-r--r--common/connman-dbus.h1
-rw-r--r--common/test-client.c309
5 files changed, 396 insertions, 563 deletions
diff --git a/common/connman-client.c b/common/connman-client.c
index aad0a22..73fdd92 100644
--- a/common/connman-client.c
+++ b/common/connman-client.c
@@ -45,6 +45,7 @@ struct _ConnmanClientPrivate {
GtkTreeStore *store;
DBusGProxy *dbus;
DBusGProxy *manager;
+ GHashTable *services;
ConnmanClientCallback callback;
gpointer userdata;
};
@@ -90,18 +91,41 @@ done:
static DBusGConnection *connection = NULL;
+static gint compare_index(GtkTreeModel *model, GtkTreeIter *iter1,
+ GtkTreeIter *iter2, gpointer user_data)
+{
+ guint index1, index2;
+
+ gtk_tree_model_get(model, iter1, CONNMAN_COLUMN_INDEX, &index1, -1);
+ gtk_tree_model_get(model, iter2, CONNMAN_COLUMN_INDEX, &index2, -1);
+
+ return (gint) index2 - (gint) index1;
+}
+
static void connman_client_init(ConnmanClient *client)
{
ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
DBG("client %p", client);
- priv->store = gtk_tree_store_new(_CONNMAN_NUM_COLUMNS, G_TYPE_OBJECT,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT,
- G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
- G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING,
- G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT,
- G_TYPE_STRING);
+ priv->store = gtk_tree_store_new(_CONNMAN_NUM_COLUMNS,
+ G_TYPE_OBJECT, /* proxy */
+ G_TYPE_UINT, /* index */
+ G_TYPE_STRING, /* name */
+ G_TYPE_STRING, /* icon */
+ G_TYPE_UINT, /* type */
+ G_TYPE_UINT, /* state */
+ G_TYPE_BOOLEAN, /* favorite */
+ G_TYPE_UINT, /* strength */
+ G_TYPE_UINT, /* security */
+ G_TYPE_STRING); /* passphrase */
+
+ gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(priv->store),
+ compare_index, NULL, NULL);
+
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(priv->store),
+ GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
+ GTK_SORT_DESCENDING);
g_object_set_data(G_OBJECT(priv->store),
"State", g_strdup("unavailable"));
@@ -186,157 +210,6 @@ GtkTreeModel *connman_client_get_model(ConnmanClient *client)
return model;
}
-static gboolean device_filter(GtkTreeModel *model,
- GtkTreeIter *iter, gpointer user_data)
-{
- DBusGProxy *proxy;
- gboolean active;
-
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
-
- if (proxy == NULL)
- return FALSE;
-
- active = g_str_equal(CONNMAN_DEVICE_INTERFACE,
- dbus_g_proxy_get_interface(proxy));
-
- g_object_unref(proxy);
-
- return active;
-}
-
-GtkTreeModel *connman_client_get_device_model(ConnmanClient *client)
-{
- ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
- GtkTreeModel *model;
-
- DBG("client %p", client);
-
- model = gtk_tree_model_filter_new(GTK_TREE_MODEL(priv->store), NULL);
-
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),
- device_filter, NULL, NULL);
-
- return model;
-}
-
-static gboolean device_network_filter(GtkTreeModel *model,
- GtkTreeIter *iter, gpointer user_data)
-{
- DBusGProxy *proxy;
- gboolean active;
-
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
-
- if (proxy == NULL)
- return FALSE;
-
- active = g_str_equal(CONNMAN_DEVICE_INTERFACE,
- dbus_g_proxy_get_interface(proxy));
- if (active == FALSE)
- active = g_str_equal(CONNMAN_NETWORK_INTERFACE,
- dbus_g_proxy_get_interface(proxy));
-
- g_object_unref(proxy);
-
- return active;
-}
-
-GtkTreeModel *connman_client_get_device_network_model(ConnmanClient *client)
-{
- ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
- GtkTreeModel *model;
-
- DBG("client %p", client);
-
- model = gtk_tree_model_filter_new(GTK_TREE_MODEL(priv->store), NULL);
-
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),
- device_network_filter, NULL, NULL);
-
- return model;
-}
-
-GtkTreeModel *connman_client_get_network_model(ConnmanClient *client,
- const gchar *device)
-{
- ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter iter;
- gboolean cont, found = FALSE;
-
- DBG("client %p", client);
-
- cont = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(priv->store),
- &iter);
-
- while (cont == TRUE) {
- DBusGProxy *proxy;
-
- gtk_tree_model_get(GTK_TREE_MODEL(priv->store), &iter,
- CONNMAN_COLUMN_PROXY, &proxy, -1);
-
- if (g_str_equal(CONNMAN_DEVICE_INTERFACE,
- dbus_g_proxy_get_interface(proxy)) == TRUE)
- found = g_str_has_prefix(dbus_g_proxy_get_path(proxy),
- device);
-
- g_object_unref(proxy);
-
- if (found == TRUE)
- break;
-
- cont = gtk_tree_model_iter_next(GTK_TREE_MODEL(priv->store),
- &iter);
- }
-
- if (found == TRUE) {
- path = gtk_tree_model_get_path(GTK_TREE_MODEL(priv->store),
- &iter);
- model = gtk_tree_model_filter_new(GTK_TREE_MODEL(priv->store),
- path);
- gtk_tree_path_free(path);
- } else
- model = NULL;
-
- return model;
-}
-
-static gboolean connection_filter(GtkTreeModel *model,
- GtkTreeIter *iter, gpointer user_data)
-{
- DBusGProxy *proxy;
- gboolean active;
-
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
-
- if (proxy == NULL)
- return FALSE;
-
- active = g_str_equal(CONNMAN_CONNECTION_INTERFACE,
- dbus_g_proxy_get_interface(proxy));
-
- g_object_unref(proxy);
-
- return active;
-}
-
-GtkTreeModel *connman_client_get_connection_model(ConnmanClient *client)
-{
- ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
- GtkTreeModel *model;
-
- DBG("client %p", client);
-
- model = gtk_tree_model_filter_new(GTK_TREE_MODEL(priv->store), NULL);
-
- gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),
- connection_filter, NULL, NULL);
-
- return model;
-}
-
void connman_client_set_policy(ConnmanClient *client, const gchar *device,
const gchar *policy)
{
@@ -389,10 +262,8 @@ static gboolean device_scan(GtkTreeModel *model, GtkTreePath *path,
GtkTreeIter *iter, gpointer user_data)
{
DBusGProxy *proxy;
- gboolean enabled;
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy,
- CONNMAN_COLUMN_ENABLED, &enabled, -1);
+ gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
if (proxy == NULL)
return FALSE;
@@ -401,9 +272,6 @@ static gboolean device_scan(GtkTreeModel *model, GtkTreePath *path,
CONNMAN_DEVICE_INTERFACE) == FALSE)
return FALSE;
- if (enabled == FALSE)
- return FALSE;
-
connman_propose_scan(proxy, NULL);
g_object_unref(proxy);
@@ -437,10 +305,8 @@ static gboolean network_disconnect(GtkTreeModel *model, GtkTreePath *path,
GtkTreeIter *iter, gpointer user_data)
{
DBusGProxy *proxy;
- gboolean enabled;
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy,
- CONNMAN_COLUMN_ENABLED, &enabled, -1);
+ gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
if (proxy == NULL)
return FALSE;
@@ -449,12 +315,11 @@ static gboolean network_disconnect(GtkTreeModel *model, GtkTreePath *path,
CONNMAN_NETWORK_INTERFACE) == FALSE)
return FALSE;
- if (enabled == TRUE)
- connman_disconnect(proxy, NULL);
+ connman_disconnect(proxy, NULL);
g_object_unref(proxy);
- return enabled;
+ return TRUE;
}
void connman_client_connect(ConnmanClient *client, const gchar *network)
@@ -567,33 +432,7 @@ void connman_client_set_passphrase(ConnmanClient *client, const gchar *network,
g_value_init(&value, G_TYPE_STRING);
g_value_set_string(&value, passphrase);
- connman_set_property(proxy, "WiFi.Passphrase", &value, NULL);
-
- g_value_unset(&value);
-
- g_object_unref(proxy);
-}
-
-void connman_client_set_remember(ConnmanClient *client, const gchar *network,
- gboolean remember)
-{
- ConnmanClientPrivate *priv = CONNMAN_CLIENT_GET_PRIVATE(client);
- DBusGProxy *proxy;
- GValue value = { 0 };
-
- DBG("client %p", client);
-
- if (network == NULL)
- return;
-
- proxy = connman_dbus_get_proxy(priv->store, network);
- if (proxy == NULL)
- return;
-
- g_value_init(&value, G_TYPE_BOOLEAN);
- g_value_set_boolean(&value, remember);
-
- connman_set_property(proxy, "Remember", &value, NULL);
+ connman_set_property(proxy, "Passphrase", &value, NULL);
g_value_unset(&value);
diff --git a/common/connman-client.h b/common/connman-client.h
index f30dae4..500c288 100644
--- a/common/connman-client.h
+++ b/common/connman-client.h
@@ -54,11 +54,6 @@ GType connman_client_get_type(void);
ConnmanClient *connman_client_new(void);
GtkTreeModel *connman_client_get_model(ConnmanClient *client);
-GtkTreeModel *connman_client_get_device_model(ConnmanClient *client);
-GtkTreeModel *connman_client_get_device_network_model(ConnmanClient *client);
-GtkTreeModel *connman_client_get_network_model(ConnmanClient *client,
- const gchar *device);
-GtkTreeModel *connman_client_get_connection_model(ConnmanClient *client);
void connman_client_set_policy(ConnmanClient *client, const gchar *device,
const gchar *policy);
@@ -83,19 +78,15 @@ void connman_client_set_callback(ConnmanClient *client,
enum {
CONNMAN_COLUMN_PROXY, /* G_TYPE_OBJECT */
+ CONNMAN_COLUMN_INDEX, /* G_TYPE_UINT */
CONNMAN_COLUMN_NAME, /* G_TYPE_STRING */
CONNMAN_COLUMN_ICON, /* G_TYPE_STRING */
CONNMAN_COLUMN_TYPE, /* G_TYPE_UINT */
- CONNMAN_COLUMN_ENABLED, /* G_TYPE_BOOLEAN */
- CONNMAN_COLUMN_INRANGE, /* G_TYPE_BOOLEAN */
- CONNMAN_COLUMN_REMEMBER, /* G_TYPE_BOOLEAN */
+ CONNMAN_COLUMN_STATE, /* G_TYPE_UINT */
+ CONNMAN_COLUMN_FAVORITE, /* G_TYPE_BOOLEAN */
CONNMAN_COLUMN_STRENGTH, /* G_TYPE_UINT */
CONNMAN_COLUMN_SECURITY, /* G_TYPE_UINT */
CONNMAN_COLUMN_PASSPHRASE, /* G_TYPE_STRING */
- CONNMAN_COLUMN_NETWORK,
- CONNMAN_COLUMN_ADDRESS,
- CONNMAN_COLUMN_POLICY,
- CONNMAN_COLUMN_DEVICE,
_CONNMAN_NUM_COLUMNS
};
@@ -108,11 +99,12 @@ enum {
};
enum {
- CONNMAN_POLICY_UNKNOWN,
- CONNMAN_POLICY_IGNORE,
- CONNMAN_POLICY_OFF,
- CONNMAN_POLICY_AUTO,
- CONNMAN_POLICY_MANUAL,
+ CONNMAN_STATE_UNKNOWN,
+ CONNMAN_STATE_IDLE,
+ CONNMAN_STATE_CARRIER,
+ CONNMAN_STATE_ASSOCIATION,
+ CONNMAN_STATE_CONFIGURATION,
+ CONNMAN_STATE_READY,
};
enum {
diff --git a/common/connman-dbus.c b/common/connman-dbus.c
index 9eba7ae..89c93f3 100644
--- a/common/connman-dbus.c
+++ b/common/connman-dbus.c
@@ -151,7 +151,7 @@ static void iterate_list(const GValue *value, gpointer user_data)
if (path == NULL)
return;
- *list = g_slist_prepend(*list, path);
+ *list = g_slist_append(*list, path);
}
static gint compare_path(gconstpointer a, gconstpointer b)
@@ -159,77 +159,6 @@ static gint compare_path(gconstpointer a, gconstpointer b)
return g_strcmp0(a, b);
}
-static void property_update(GtkTreeStore *store, const GValue *value,
- const char *key, connman_get_properties_reply callback)
-{
- GSList *list, *link, *old_list, *new_list = NULL;
- const char *iface;
-
- DBG("store %p key %s", store, key);
-
- if (g_str_equal(key, "Connections") == TRUE)
- iface = CONNMAN_CONNECTION_INTERFACE;
- else if (g_str_equal(key, "Devices") == TRUE)
- iface = CONNMAN_DEVICE_INTERFACE;
- else
- iface = CONNMAN_NETWORK_INTERFACE;
-
- old_list = g_object_get_data(G_OBJECT(store), key);
-
- dbus_g_type_collection_value_iterate(value, iterate_list, &new_list);
-
- g_object_set_data(G_OBJECT(store), key, new_list);
-
- for (list = new_list; list; list = list->next) {
- gchar *path = list->data;
- DBusGProxy *proxy;
-
- DBG("new path %s", path);
-
- link = g_slist_find_custom(old_list, path, compare_path);
- if (link != NULL) {
- g_free(link->data);
- old_list = g_slist_delete_link(old_list, link);
- }
-
- proxy = dbus_g_proxy_new_for_name(connection,
- CONNMAN_SERVICE, path, iface);
- if (proxy == NULL)
- continue;
-
- DBG("getting %s properties", key);
-
- connman_get_properties_async(proxy, callback, store);
- }
-
- for (list = old_list; list; list = list->next) {
- gchar *path = list->data;
- GtkTreeIter iter;
- gchar *device = NULL;
-
- DBG("old path %s", path);
-
- if (get_iter_from_path(store, &iter, path) == TRUE) {
- if (g_str_equal(key, "Connections") == TRUE)
- gtk_tree_model_get(GTK_TREE_MODEL(store), &iter,
- CONNMAN_COLUMN_DEVICE, &device, -1);
-
- gtk_tree_store_remove(store, &iter);
- }
-
- if (get_iter_from_path(store, &iter, device) == TRUE) {
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_INRANGE, FALSE,
- CONNMAN_COLUMN_ADDRESS, NULL, -1);
- }
-
- g_free(device);
- g_free(path);
- }
-
- g_slist_free(old_list);
-}
-
static guint get_type(const GValue *value)
{
const char *type = value ? g_value_get_string(value) : NULL;
@@ -263,22 +192,24 @@ static const gchar *type2icon(guint type)
return NULL;
}
-static guint get_policy(const GValue *value)
+static guint get_state(const GValue *value)
{
- const char *policy = value ? g_value_get_string(value) : NULL;
-
- if (policy == NULL)
- return CONNMAN_POLICY_UNKNOWN;
- else if (g_str_equal(policy, "ignore") == TRUE)
- return CONNMAN_POLICY_IGNORE;
- else if (g_str_equal(policy, "off") == TRUE)
- return CONNMAN_POLICY_OFF;
- else if (g_str_equal(policy, "auto") == TRUE)
- return CONNMAN_POLICY_AUTO;
- else if (g_str_equal(policy, "manual") == TRUE)
- return CONNMAN_POLICY_MANUAL;
-
- return CONNMAN_POLICY_UNKNOWN;
+ const char *type = value ? g_value_get_string(value) : NULL;
+
+ if (type == NULL)
+ return CONNMAN_STATE_UNKNOWN;
+ else if (g_str_equal(type, "idle") == TRUE)
+ return CONNMAN_STATE_IDLE;
+ else if (g_str_equal(type, "carrier") == TRUE)
+ return CONNMAN_STATE_CARRIER;
+ else if (g_str_equal(type, "association") == TRUE)
+ return CONNMAN_STATE_ASSOCIATION;
+ else if (g_str_equal(type, "configuration") == TRUE)
+ return CONNMAN_STATE_CONFIGURATION;
+ else if (g_str_equal(type, "ready") == TRUE)
+ return CONNMAN_STATE_READY;
+
+ return CONNMAN_STATE_UNKNOWN;
}
static guint get_security(const GValue *value)
@@ -299,7 +230,7 @@ static guint get_security(const GValue *value)
return CONNMAN_SECURITY_UNKNOWN;
}
-static void network_changed(DBusGProxy *proxy, const char *property,
+static void service_changed(DBusGProxy *proxy, const char *property,
GValue *value, gpointer user_data)
{
GtkTreeStore *store = user_data;
@@ -314,18 +245,14 @@ static void network_changed(DBusGProxy *proxy, const char *property,
if (get_iter_from_path(store, &iter, path) == FALSE)
return;
- if (g_str_equal(property, "Connected") == TRUE) {
- gboolean connected = g_value_get_boolean(value);
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_ENABLED, connected, -1);
- } else if (g_str_equal(property, "Available") == TRUE) {
- gboolean inrange = g_value_get_boolean(value);
+ if (g_str_equal(property, "State") == TRUE) {
+ guint state = get_state(value);
gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_INRANGE, inrange, -1);
- } else if (g_str_equal(property, "Remember") == TRUE) {
- gboolean remember = g_value_get_boolean(value);
+ CONNMAN_COLUMN_STATE, state, -1);
+ } else if (g_str_equal(property, "Favorite") == TRUE) {
+ gboolean favorite = g_value_get_boolean(value);
gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_REMEMBER, remember, -1);
+ CONNMAN_COLUMN_FAVORITE, favorite, -1);
} else if (g_str_equal(property, "Strength") == TRUE) {
guint strength = g_value_get_uchar(value);
gtk_tree_store_set(store, &iter,
@@ -333,115 +260,82 @@ static void network_changed(DBusGProxy *proxy, const char *property,
}
}
-static void network_properties(DBusGProxy *proxy, GHashTable *hash,
- GError *error, gpointer user_data)
+static void property_update(GtkTreeStore *store, const GValue *value,
+ connman_get_properties_reply callback)
{
- GtkTreeStore *store = user_data;
- GValue *value;
- const gchar *device, *name, *secret;
- gboolean connected, inrange, remember;
- guint strength, security;
- GtkTreeIter iter, parent;
-
- DBG("store %p proxy %p hash %p", store, proxy, hash);
-
- if (error != NULL || hash == NULL)
- goto done;
-
- value = g_hash_table_lookup(hash, "Device");
- device = value ? g_value_get_boxed(value) : NULL;
-
- value = g_hash_table_lookup(hash, "Name");
- name = value ? g_value_get_string(value) : NULL;
+ GSList *list, *link, *old_list, *new_list = NULL;
+ guint index = 0;
- value = g_hash_table_lookup(hash, "Connected");
- connected = value ? g_value_get_boolean(value) : FALSE;
+ DBG("store %p", store);
- value = g_hash_table_lookup(hash, "Available");
- inrange = value ? g_value_get_boolean(value) : FALSE;
+ old_list = g_object_get_data(G_OBJECT(store), "Services");
- value = g_hash_table_lookup(hash, "Remember");
- remember = value ? g_value_get_boolean(value) : FALSE;
+ dbus_g_type_collection_value_iterate(value, iterate_list, &new_list);
- value = g_hash_table_lookup(hash, "Strength");
- strength = value ? g_value_get_uchar(value) : 0;
+ g_object_set_data(G_OBJECT(store), "Services", new_list);
- value = g_hash_table_lookup(hash, "WiFi.Security");
- security = get_security(value);
+ for (list = new_list; list; list = list->next) {
+ gchar *path = list->data;
+ DBusGProxy *proxy;
+ GtkTreeIter iter;
- value = g_hash_table_lookup(hash, "WiFi.Passphrase");
- secret = value ? g_value_get_string(value) : NULL;
+ DBG("new path %s", path);
- DBG("name %s strength %d", name, strength);
+ link = g_slist_find_custom(old_list, path, compare_path);
+ if (link != NULL) {
+ g_free(link->data);
+ old_list = g_slist_delete_link(old_list, link);
+ }
- if (get_iter_from_path(store, &parent, device) == FALSE)
- return;
+ proxy = dbus_g_proxy_new_for_name(connection,
+ CONNMAN_SERVICE, path,
+ CONNMAN_SERVICE_INTERFACE);
+ if (proxy == NULL)
+ continue;
- if (get_iter_from_proxy(store, &iter, proxy) == FALSE) {
- gtk_tree_store_insert_with_values(store, &iter, &parent, -1,
+ if (get_iter_from_proxy(store, &iter, proxy) == FALSE) {
+ gtk_tree_store_insert_with_values(store, &iter, NULL, -1,
CONNMAN_COLUMN_PROXY, proxy,
- CONNMAN_COLUMN_NAME, name,
- CONNMAN_COLUMN_ENABLED, connected,
- CONNMAN_COLUMN_INRANGE, inrange,
- CONNMAN_COLUMN_REMEMBER, remember,
- CONNMAN_COLUMN_STRENGTH, strength,
- CONNMAN_COLUMN_SECURITY, security,
- CONNMAN_COLUMN_PASSPHRASE, secret, -1);
+ CONNMAN_COLUMN_INDEX, index, -1);
- dbus_g_proxy_add_signal(proxy, "PropertyChanged",
+ dbus_g_proxy_add_signal(proxy, "PropertyChanged",
G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(proxy, "PropertyChanged",
- G_CALLBACK(network_changed), store, NULL);
- } else
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_NAME, name,
- CONNMAN_COLUMN_ENABLED, connected,
- CONNMAN_COLUMN_INRANGE, inrange,
- CONNMAN_COLUMN_REMEMBER, remember,
- CONNMAN_COLUMN_STRENGTH, strength,
- CONNMAN_COLUMN_SECURITY, security,
- CONNMAN_COLUMN_PASSPHRASE, secret, -1);
+ dbus_g_proxy_connect_signal(proxy, "PropertyChanged",
+ G_CALLBACK(service_changed), store, NULL);
+ } else
+ gtk_tree_store_set(store, &iter,
+ CONNMAN_COLUMN_INDEX, index, -1);
-done:
- g_object_unref(proxy);
-}
+ DBG("getting %s properties", "Services");
-static void device_changed(DBusGProxy *proxy, const char *property,
- GValue *value, gpointer user_data)
-{
- GtkTreeStore *store = user_data;
- const char *path = dbus_g_proxy_get_path(proxy);
- GtkTreeIter iter;
+ connman_get_properties_async(proxy, callback, store);
- DBG("store %p proxy %p property %s", store, proxy, property);
+ index++;
+ }
- if (property == NULL || value == NULL)
- return;
+ for (list = old_list; list; list = list->next) {
+ gchar *path = list->data;
+ GtkTreeIter iter;
- if (get_iter_from_path(store, &iter, path) == FALSE)
- return;
+ DBG("old path %s", path);
- if (g_str_equal(property, "Policy") == TRUE) {
- guint policy = get_policy(value);
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_POLICY, policy, -1);
- } else if (g_str_equal(property, "Powered") == TRUE) {
- gboolean powered = g_value_get_boolean(value);
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_ENABLED, powered, -1);
- } else if (g_str_equal(property, "Networks") == TRUE)
- property_update(store, value, path, network_properties);
+ if (get_iter_from_path(store, &iter, path) == TRUE)
+ gtk_tree_store_remove(store, &iter);
+
+ g_free(path);
+ }
+
+ g_slist_free(old_list);
}
-static void device_properties(DBusGProxy *proxy, GHashTable *hash,
+static void service_properties(DBusGProxy *proxy, GHashTable *hash,
GError *error, gpointer user_data)
{
GtkTreeStore *store = user_data;
- const char *path = dbus_g_proxy_get_path(proxy);
GValue *value;
const gchar *name, *icon;
- guint type, policy;
- gboolean powered;
+ guint type, state, strength, security;
+ gboolean favorite;
GtkTreeIter iter;
DBG("store %p proxy %p hash %p", store, proxy, hash);
@@ -456,11 +350,17 @@ static void device_properties(DBusGProxy *proxy, GHashTable *hash,
type = get_type(value);
icon = type2icon(type);
- value = g_hash_table_lookup(hash, "Policy");
- policy = get_policy(value);
+ value = g_hash_table_lookup(hash, "State");
+ state = get_state(value);
+
+ value = g_hash_table_lookup(hash, "Favorite");
+ favorite = value ? g_value_get_boolean(value) : FALSE;
- value = g_hash_table_lookup(hash, "Powered");
- powered = value ? g_value_get_boolean(value) : FALSE;
+ value = g_hash_table_lookup(hash, "Strength");
+ strength= value ? g_value_get_uchar(value) : 0;
+
+ value = g_hash_table_lookup(hash, "Security");
+ security = get_security(value);
DBG("name %s type %d icon %s", name, type, icon);
@@ -470,115 +370,24 @@ static void device_properties(DBusGProxy *proxy, GHashTable *hash,
CONNMAN_COLUMN_NAME, name,
CONNMAN_COLUMN_ICON, icon,
CONNMAN_COLUMN_TYPE, type,
- CONNMAN_COLUMN_ENABLED, powered,
- CONNMAN_COLUMN_POLICY, policy, -1);
+ CONNMAN_COLUMN_STATE, state,
+ CONNMAN_COLUMN_FAVORITE, favorite,
+ CONNMAN_COLUMN_STRENGTH, strength,
+ CONNMAN_COLUMN_SECURITY, security, -1);
dbus_g_proxy_add_signal(proxy, "PropertyChanged",
G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(proxy, "PropertyChanged",
- G_CALLBACK(device_changed), store, NULL);
+ G_CALLBACK(service_changed), store, NULL);
} else
gtk_tree_store_set(store, &iter,
CONNMAN_COLUMN_NAME, name,
CONNMAN_COLUMN_ICON, icon,
CONNMAN_COLUMN_TYPE, type,
- CONNMAN_COLUMN_ENABLED, powered,
- CONNMAN_COLUMN_POLICY, policy, -1);
-
- value = g_hash_table_lookup(hash, "Networks");
- if (value != NULL)
- property_update(store, value, path, network_properties);
-
-done:
- g_object_unref(proxy);
-}
-
-static void connection_changed(DBusGProxy *proxy, const char *property,
- GValue *value, gpointer user_data)
-{
- GtkTreeStore *store = user_data;
- const char *path = dbus_g_proxy_get_path(proxy);
- GtkTreeIter iter;
-
- DBG("store %p proxy %p property %s", store, proxy, property);
-
- if (property == NULL || value == NULL)
- return;
-
- if (get_iter_from_path(store, &iter, path) == FALSE)
- return;
-
- if (g_str_equal(property, "Default") == TRUE) {
- gboolean enabled = g_value_get_boolean(value);
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_ENABLED, enabled, -1);
- } else if (g_str_equal(property, "Strength") == TRUE) {
- guint strength = g_value_get_uchar(value);
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_STRENGTH, strength, -1);
- }
-}
-
-static void connection_properties(DBusGProxy *proxy, GHashTable *hash,
- GError *error, gpointer user_data)
-{
- GtkTreeStore *store = user_data;
- GValue *value;
- guint type, strength;
- gboolean enabled;
- const char *device, *address;
- GtkTreeIter iter;
-
- DBG("store %p proxy %p hash %p", store, proxy, hash);
-
- if (error != NULL || hash == NULL)
- goto done;
-
- value = g_hash_table_lookup(hash, "Type");
- type = get_type(value);
-
- value = g_hash_table_lookup(hash, "Strength");
- strength = value ? g_value_get_uchar(value) : 0;
-
- value = g_hash_table_lookup(hash, "Default");
- enabled = value ? g_value_get_boolean(value) : FALSE;
-
- value = g_hash_table_lookup(hash, "IPv4.Address");
- address = value ? g_value_get_string(value) : NULL;
-
- DBG("type %d address %s", type, address);
-
- if (get_iter_from_proxy(store, &iter, proxy) == FALSE) {
- gtk_tree_store_insert_with_values(store, &iter, NULL, -1,
- CONNMAN_COLUMN_PROXY, proxy,
- CONNMAN_COLUMN_TYPE, type,
- CONNMAN_COLUMN_ENABLED, enabled,
+ CONNMAN_COLUMN_STATE, state,
+ CONNMAN_COLUMN_FAVORITE, favorite,
CONNMAN_COLUMN_STRENGTH, strength,
- CONNMAN_COLUMN_ADDRESS, address, -1);
-
- dbus_g_proxy_add_signal(proxy, "PropertyChanged",
- G_TYPE_STRING, G_TYPE_VALUE, G_TYPE_INVALID);
- dbus_g_proxy_connect_signal(proxy, "PropertyChanged",
- G_CALLBACK(connection_changed), store, NULL);
- } else
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_TYPE, type,
- CONNMAN_COLUMN_ENABLED, enabled,
- CONNMAN_COLUMN_STRENGTH, strength, -1);
-
- value = g_hash_table_lookup(hash, "Device");
- device = value ? g_value_get_boxed(value) : NULL;
-
- DBG("device %s", device);
-
- gtk_tree_store_set(store, &iter, CONNMAN_COLUMN_DEVICE, device, -1);
-
- if (get_iter_from_path(store, &iter, device) == TRUE) {
- gtk_tree_store_set(store, &iter,
- CONNMAN_COLUMN_DEVICE, device,
- CONNMAN_COLUMN_INRANGE, TRUE,
- CONNMAN_COLUMN_ADDRESS, address, -1);
- }
+ CONNMAN_COLUMN_SECURITY, security, -1);
done:
g_object_unref(proxy);
@@ -609,10 +418,8 @@ static void manager_changed(DBusGProxy *proxy, const char *property,
userdata = g_object_get_data(G_OBJECT(store), "userdata");
if (callback)
callback(state, userdata);
- } else if (g_str_equal(property, "Connections") == TRUE) {
- property_update(store, value, property, connection_properties);
- } else if (g_str_equal(property, "Devices") == TRUE) {
- property_update(store, value, property, device_properties);
+ } else if (g_str_equal(property, "Services") == TRUE) {
+ property_update(store, value, service_properties);
}
}
@@ -637,14 +444,9 @@ static void manager_properties(DBusGProxy *proxy, GHashTable *hash,
if (callback)
callback(state, NULL);
- value = g_hash_table_lookup(hash, "Devices");
- if (value != NULL)
- property_update(store, value, "Devices", device_properties);
-
- value = g_hash_table_lookup(hash, "Connections");
+ value = g_hash_table_lookup(hash, "Services");
if (value != NULL)
- property_update(store, value,
- "Connections", connection_properties);
+ property_update(store, value, service_properties);
}
DBusGProxy *connman_dbus_create_manager(DBusGConnection *conn,
diff --git a/common/connman-dbus.h b/common/connman-dbus.h
index a9fa51c..c16ca09 100644
--- a/common/connman-dbus.h
+++ b/common/connman-dbus.h
@@ -31,6 +31,7 @@
#define CONNMAN_MANAGER_PATH "/"
#define CONNMAN_PROFILE_INTERFACE CONNMAN_SERVICE ".Profile"
+#define CONNMAN_SERVICE_INTERFACE CONNMAN_SERVICE ".Service"
#define CONNMAN_DEVICE_INTERFACE CONNMAN_SERVICE ".Device"
#define CONNMAN_NETWORK_INTERFACE CONNMAN_SERVICE ".Network"
#define CONNMAN_CONNECTION_INTERFACE CONNMAN_SERVICE ".Connection"
diff --git a/common/test-client.c b/common/test-client.c
index a78823f..6db5883 100644
--- a/common/test-client.c
+++ b/common/test-client.c
@@ -30,78 +30,251 @@
static ConnmanClient *client;
-static void proxy_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell,
- GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+static const gchar *type2str(guint type)
{
- DBusGProxy *proxy;
- gchar *markup;
-
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_PROXY, &proxy, -1);
+ switch (type) {
+ case CONNMAN_TYPE_UNKNOWN:
+ return "Unknown";
+ case CONNMAN_TYPE_ETHERNET:
+ return "Ethernet";
+ case CONNMAN_TYPE_WIFI:
+ return "WiFi";
+ case CONNMAN_TYPE_WIMAX:
+ return "WiMAX";
+ case CONNMAN_TYPE_BLUETOOTH:
+ return "Bluetooth";
+ }
+
+ return NULL;
+}
- markup = g_strdup_printf("<b>%s</b>\n"
- "<span size=\"xx-small\">%s\n\n</span>",
- dbus_g_proxy_get_interface(proxy),
- dbus_g_proxy_get_path(proxy));
- g_object_set(cell, "markup", markup, NULL);
- g_free(markup);
+static const gchar *state2str(guint state)
+{
+ switch (state) {
+ case CONNMAN_STATE_UNKNOWN:
+ return "Unknown";
+ case CONNMAN_STATE_IDLE:
+ return "Not connected";
+ case CONNMAN_STATE_CARRIER:
+ return "Carrier detected";
+ case CONNMAN_STATE_ASSOCIATION:
+ return "Trying to connect";
+ case CONNMAN_STATE_CONFIGURATION:
+ return "Running configuration";
+ case CONNMAN_STATE_READY:
+ return "Connected";
+ }
+
+ return NULL;
+}
- g_object_unref(proxy);
+static const gchar *security2str(guint security)
+{
+ switch (security) {
+ case CONNMAN_SECURITY_UNKNOWN:
+ return "Unknown";
+ case CONNMAN_SECURITY_NONE:
+ return "No";
+ case CONNMAN_SECURITY_WEP:
+ return "WEP";
+ case CONNMAN_SECURITY_WPA:
+ return "WPA";
+ case CONNMAN_SECURITY_WPA2:
+ return "WPA2";
+ }
+
+ return NULL;
}
-static void name_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell,
+static void service_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
- gchar *name, *icon;
+ gchar *name;
guint type;
+ gboolean favorite;
gchar *markup;
gtk_tree_model_get(model, iter, CONNMAN_COLUMN_NAME, &name,
- CONNMAN_COLUMN_ICON, &icon,
- CONNMAN_COLUMN_TYPE, &type, -1);
+ CONNMAN_COLUMN_TYPE, &type,
+ CONNMAN_COLUMN_FAVORITE, &favorite, -1);
- markup = g_strdup_printf("Name: %s\nIcon: %s\nType: %d",
- name, icon, type);
+ markup = g_strdup_printf("<b>%s</b>\n"
+ "<span size=\"small\">%s service%s</span>",
+ name ? name : type2str(type), type2str(type),
+ favorite == TRUE ? " *" : "");
g_object_set(cell, "markup", markup, NULL);
g_free(markup);
- g_free(icon);
g_free(name);
}
static void status_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell,
GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
- gboolean enabled, inrange, remember;
+ guint state, strength, security;
gchar *markup;
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_ENABLED, &enabled,
- CONNMAN_COLUMN_INRANGE, &inrange,
- CONNMAN_COLUMN_REMEMBER, &remember, -1);
+ gtk_tree_model_get(model, iter, CONNMAN_COLUMN_STATE, &state,
+ CONNMAN_COLUMN_STRENGTH, &strength,
+ CONNMAN_COLUMN_SECURITY, &security, -1);
- markup = g_strdup_printf("Enabled: %d\n"
- "InRange: %d\nRemember: %d",
- enabled, inrange, remember);
+ markup = g_strdup_printf("<b>%s</b>\n"
+ "<span size=\"small\">%d%% - %s protection</span>",
+ state == CONNMAN_STATE_UNKNOWN ? "" : state2str(state),
+ strength, security2str(security));
g_object_set(cell, "markup", markup, NULL);
g_free(markup);
}
-static void network_to_text(GtkTreeViewColumn *column, GtkCellRenderer *cell,
- GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
+static void drag_data_get(GtkWidget *widget, GdkDragContext *context,
+ GtkSelectionData *data, guint info,
+ guint time, gpointer user_data)
{
- guint strength, security;
- gchar *secret;
- gchar *markup;
+ printf("drag-data-get\n");
+}
- gtk_tree_model_get(model, iter, CONNMAN_COLUMN_STRENGTH, &strength,
- CONNMAN_COLUMN_SECURITY, &security,
- CONNMAN_COLUMN_PASSPHRASE, &secret, -1);
+static void drag_data_received(GtkWidget *widget, GdkDragContext *context,
+ gint x, gint y, GtkSelectionData *data,
+ guint info, guint time, gpointer user_data)
+{
+ GtkTreePath *path;
- markup = g_strdup_printf("Strength: %d\nSecurity: %d\nSecret: %s",
- strength, security, secret);
- g_object_set(cell, "markup", markup, NULL);
- g_free(markup);
+ printf("drag-data-received %d,%d\n", x, y);
+
+ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
+ x, y, &path, NULL, NULL, NULL) == FALSE)
+ return;
+
+ printf("path %s\n", gtk_tree_path_to_string(path));
- g_free(secret);
+ gtk_tree_path_free(path);
+}
+
+static gboolean drag_drop(GtkWidget *widget, GdkDragContext *drag_context,
+ gint x, gint y, guint time, gpointer user_data)
+{
+ printf("drag-drop %d,%d\n", x, y);
+
+ return FALSE;
+}
+
+static void connect_callback(GtkWidget *widget, gpointer user_data)
+{
+ g_print("connect\n");
+}
+
+static void disconnect_callback(GtkWidget *widget, gpointer user_data)
+{
+ g_print("disconnect\n");
+}
+
+static void remove_callback(GtkWidget *widget, gpointer user_data)
+{
+ g_print("remove\n");
+}
+
+static void show_popup(GtkWidget *widget,
+ GdkEventButton *event, gpointer userdata)
+{
+ GtkWidget *menu;
+ GtkWidget *item;
+
+ menu = gtk_menu_new();
+
+ item = gtk_menu_item_new_with_label("Connect");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(connect_callback), NULL);
+
+ item = gtk_menu_item_new_with_label("Disconnect");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(disconnect_callback), NULL);
+
+ item = gtk_menu_item_new_with_label("Remove");
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(remove_callback), NULL);
+
+ gtk_widget_show_all(menu);
+
+ gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
+ (event != NULL) ? event->button : 0,
+ gdk_event_get_time((GdkEvent*) event));
+}
+
+static gboolean button_pressed(GtkWidget *widget,
+ GdkEventButton *event, gpointer user_data)
+{
+ GtkTreeSelection *selection;
+ GtkTreePath *path;
+
+ if (event->type != GDK_BUTTON_PRESS)
+ return FALSE;
+
+ if (event->button != 3)
+ return FALSE;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+
+ if (gtk_tree_selection_count_selected_rows(selection) != 1)
+ return FALSE;
+
+ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(widget),
+ (gint) event->x, (gint) event->y,
+ &path, NULL, NULL, NULL) == FALSE)
+ return FALSE;
+
+ gtk_tree_selection_unselect_all(selection);
+ gtk_tree_selection_select_path(selection, path);
+
+ gtk_tree_path_free(path);
+
+ show_popup(widget, event, user_data);
+
+ return TRUE;
+}
+
+static gboolean popup_callback(GtkWidget *widget, gpointer user_data)
+{
+ GtkTreeSelection *selection;
+
+ selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget));
+
+ if (gtk_tree_selection_count_selected_rows(selection) != 1)
+ return FALSE;
+
+ show_popup(widget, NULL, user_data);
+
+ return TRUE;
+}
+
+static void select_callback(GtkTreeSelection *selection, gpointer user_data)
+{
+ GtkTreeView *tree = user_data;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean selected, favorite = FALSE;
+ const GtkTargetEntry row_targets[] = {
+ { "resorting", GTK_TARGET_SAME_WIDGET, 0 }
+ };
+
+ selected = gtk_tree_selection_get_selected(selection, &model, &iter);
+ if (selected == TRUE)
+ gtk_tree_model_get(model, &iter,
+ CONNMAN_COLUMN_FAVORITE, &favorite, -1);
+
+ if (favorite == TRUE) {
+ gtk_tree_view_enable_model_drag_source(tree, GDK_BUTTON1_MASK,
+ row_targets, G_N_ELEMENTS(row_targets),
+ GDK_ACTION_MOVE);
+ gtk_tree_view_enable_model_drag_dest(tree,
+ row_targets, G_N_ELEMENTS(row_targets),
+ GDK_ACTION_MOVE);
+ } else {
+ gtk_tree_view_unset_rows_drag_source(tree);
+ gtk_tree_view_unset_rows_drag_dest(tree);
+ }
}
static GtkWidget *create_tree(void)
@@ -109,35 +282,61 @@ static GtkWidget *create_tree(void)
GtkWidget *tree;
GtkTreeModel *model;
GtkTreeSelection *selection;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
tree = gtk_tree_view_new();
+ gtk_tree_view_set_show_expanders(GTK_TREE_VIEW(tree), FALSE);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), TRUE);
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tree), TRUE);
-
- gtk_tree_view_insert_column_with_data_func(GTK_TREE_VIEW(tree), -1,
- "Proxy", gtk_cell_renderer_text_new(),
- proxy_to_text, NULL, NULL);
-
- gtk_tree_view_insert_column_with_data_func(GTK_TREE_VIEW(tree), -1,
- "Name", gtk_cell_renderer_text_new(),
- name_to_text, NULL, NULL);
+ gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(tree),
+ GTK_TREE_VIEW_GRID_LINES_NONE);
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_column_set_title(column, "Service");
+ gtk_tree_view_column_set_expand(column, TRUE);
+ gtk_tree_view_column_set_spacing(column, 6);
+ gtk_tree_view_column_set_min_width(column, 250);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
+
+ renderer = gtk_cell_renderer_pixbuf_new();
+ gtk_tree_view_column_pack_start(column, renderer, FALSE);
+ gtk_tree_view_column_add_attribute(column, renderer,
+ "icon-name", CONNMAN_COLUMN_ICON);
+
+ renderer = gtk_cell_renderer_text_new();
+ gtk_tree_view_column_pack_end(column, renderer, TRUE);
+ gtk_tree_view_column_set_cell_data_func(column, renderer,
+ service_to_text, NULL, NULL);
gtk_tree_view_insert_column_with_data_func(GTK_TREE_VIEW(tree), -1,
"Status", gtk_cell_renderer_text_new(),
- status_to_text, NULL, NULL);
-
- gtk_tree_view_insert_column_with_data_func(GTK_TREE_VIEW(tree), -1,
- "Network", gtk_cell_renderer_text_new(),
- network_to_text, NULL, NULL);
+ status_to_text, NULL, NULL);
model = connman_client_get_model(client);
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), model);
g_object_unref(model);
+ gtk_tree_view_set_search_column(GTK_TREE_VIEW(tree),
+ CONNMAN_COLUMN_NAME);
+
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE);
- gtk_tree_view_expand_all(GTK_TREE_VIEW(tree));
+ g_signal_connect(G_OBJECT(selection), "changed",
+ G_CALLBACK(select_callback), tree);
+
+ g_signal_connect(G_OBJECT(tree), "button-press-event",
+ G_CALLBACK(button_pressed), NULL);
+ g_signal_connect(G_OBJECT(tree), "popup-menu",
+ G_CALLBACK(popup_callback), NULL);
+
+ g_signal_connect(G_OBJECT(tree), "drag-drop",
+ G_CALLBACK(drag_drop), NULL);
+ g_signal_connect(G_OBJECT(tree), "drag-data-get",
+ G_CALLBACK(drag_data_get), selection);
+ g_signal_connect(G_OBJECT(tree), "drag-data-received",
+ G_CALLBACK(drag_data_received), NULL);
return tree;
}
@@ -177,7 +376,7 @@ static GtkWidget *create_window(void)
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Client Test");
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
- gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
+ gtk_window_set_default_size(GTK_WINDOW(window), 480, 400);
g_signal_connect(G_OBJECT(window), "delete-event",
G_CALLBACK(delete_callback), NULL);