diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2008-01-16 06:29:40 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2008-01-16 06:29:40 +0100 |
commit | f84357e078bded6f0720ab4527c7f2cc21b79939 (patch) | |
tree | 638b87ca6beada05a6513a61de11d04d75d8e429 | |
parent | b31ce5aec42dc186f3128cc7cc91cf8f34ebcc66 (diff) | |
download | connman-gnome-f84357e078bded6f0720ab4527c7f2cc21b79939.tar.gz |
Add support for showing the network list
-rw-r--r-- | applet/main.c | 82 | ||||
-rw-r--r-- | applet/status.c | 15 | ||||
-rw-r--r-- | applet/status.h | 4 |
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); |