aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-01-16 06:29:40 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-01-16 06:29:40 +0100
commitf84357e078bded6f0720ab4527c7f2cc21b79939 (patch)
tree638b87ca6beada05a6513a61de11d04d75d8e429
parentb31ce5aec42dc186f3128cc7cc91cf8f34ebcc66 (diff)
downloadconnman-gnome-f84357e078bded6f0720ab4527c7f2cc21b79939.tar.gz
Add support for showing the network list
-rw-r--r--applet/main.c82
-rw-r--r--applet/status.c15
-rw-r--r--applet/status.h4
3 files changed, 79 insertions, 22 deletions
diff --git a/applet/main.c b/applet/main.c
index 1b65ebe..39ee28b 100644
--- a/applet/main.c
+++ b/applet/main.c
@@ -111,8 +111,7 @@ static GtkWidget *create_popupmenu(void)
return menu;
}
-#if 0
-static GtkWidget *append_menuitem(GtkWidget *menu,
+static GtkWidget *append_menuitem(GtkMenu *menu,
const char *ssid, double strength)
{
GtkWidget *item;
@@ -145,20 +144,75 @@ static GtkWidget *append_menuitem(GtkWidget *menu,
return item;
}
-static GtkWidget *create_networkmenu(void)
+static void enumerate_networks(GtkMenu *menu,
+ GtkTreeModel *model, GtkTreeIter *parent)
{
- GtkWidget *menu;
+ GtkTreeIter iter;
+ gboolean cont;
+
+ cont = gtk_tree_model_iter_children(model, &iter, parent);
+
+ while (cont == TRUE) {
+ GtkWidget *item;
+ gchar *str;
+
+ gtk_tree_model_get(model, &iter,
+ CLIENT_COLUMN_NETWORK_ESSID, &str, -1);
+
+ item = append_menuitem(menu, str, 0.0);
+
+ g_free(str);
+
+ cont = gtk_tree_model_iter_next(model, &iter);
+ }
+}
+
+static gboolean menu_callback(GtkMenu *menu)
+{
+ GtkTreeModel *model;
+ GtkTreeIter parent;
GtkWidget *item;
+ gboolean cont;
- menu = gtk_menu_new();
- item = append_menuitem(menu, "Test network", 0.8);
- item = append_menuitem(menu, "Company network", 0.5);
+ model = client_get_active_model();
- return menu;
+ cont = gtk_tree_model_get_iter_first(model, &parent);
+
+ while (cont == TRUE) {
+ guint type;
+ gchar *str;
+
+ gtk_tree_model_get(model, &parent,
+ CLIENT_COLUMN_TYPE, &type,
+ CLIENT_COLUMN_PRODUCT, &str, -1);
+
+ switch (type) {
+ case CLIENT_TYPE_80211:
+ enumerate_networks(menu, model, &parent);
+ break;
+ default:
+ break;
+ }
+
+ g_free(str);
+
+ cont = gtk_tree_model_iter_next(model, &parent);
+ }
+
+ g_object_unref(model);
+
+ item = gtk_separator_menu_item_new();
+ gtk_widget_show(item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+ item = gtk_menu_item_new_with_label(_("Join Other Network..."));
+ //g_signal_connect(item, "activate",
+ // G_CALLBACK(join_callback), NULL);
+ gtk_widget_show(item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+ return TRUE;
}
-#else
-#define create_networkmenu() NULL
-#endif
static void state_callback(guint state, gint signal)
{
@@ -193,7 +247,6 @@ static void sig_term(int sig)
int main(int argc, char *argv[])
{
- GtkWidget *activate, *popup;
struct sigaction sa;
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
@@ -204,10 +257,7 @@ int main(int argc, char *argv[])
gtk_window_set_default_icon_name("stock_internet");
- activate = create_networkmenu();
- popup = create_popupmenu();
-
- status_init(activate, popup);
+ status_init(menu_callback, create_popupmenu());
client_init(NULL);
diff --git a/applet/status.c b/applet/status.c
index 1e35123..bd19da9 100644
--- a/applet/status.c
+++ b/applet/status.c
@@ -141,11 +141,16 @@ static void icon_animation_free(IconAnimation *animation)
static void activate_callback(GObject *object, gpointer user_data)
{
- GtkWidget *menu = user_data;
+ StatusCallback callback = user_data;
guint32 activate_time = gtk_get_current_event_time();
+ GtkWidget *menu;
- if (menu == NULL)
+ menu = gtk_menu_new();
+
+ if (callback == NULL || callback(GTK_MENU(menu)) == FALSE) {
+ g_object_unref(menu);
return;
+ }
gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
gtk_status_icon_position_menu,
@@ -155,12 +160,12 @@ static void activate_callback(GObject *object, gpointer user_data)
static void popup_callback(GObject *object, guint button,
guint activate_time, gpointer user_data)
{
- GtkWidget *menu = user_data;
+ GtkMenu *menu = user_data;
if (menu == NULL)
return;
- gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
+ gtk_menu_popup(menu, NULL, NULL,
gtk_status_icon_position_menu,
GTK_STATUS_ICON(object), button, activate_time);
}
@@ -171,7 +176,7 @@ static GdkPixbuf *pixbuf_none;
static GdkPixbuf *pixbuf_wired;
static GdkPixbuf *pixbuf_signal[5];
-int status_init(GtkWidget *activate, GtkWidget *popup)
+int status_init(StatusCallback activate, GtkWidget *popup)
{
GdkScreen *screen;
diff --git a/applet/status.h b/applet/status.h
index 38e3f9e..6d4a6be 100644
--- a/applet/status.h
+++ b/applet/status.h
@@ -19,7 +19,9 @@
*
*/
-int status_init(GtkWidget *activate, GtkWidget *popup);
+typedef gboolean (* StatusCallback) (GtkMenu *menu);
+
+int status_init(StatusCallback activate, GtkWidget *popup);
void status_cleanup(void);
void status_hide(void);