#include "dhcpcd-gtk.h"
#include "menu.h"
+#include "prefs.h"
+#include "wpa.h"
static const char *copyright = "Copyright (c) 2009 Roy Marples";
+static const char *authors[] = { "Roy Marples <roy@marples.name>", NULL };
+
+static void
+on_pref(_unused GtkMenuItem *item, _unused gpointer data)
+{
+ dhcpcd_prefs_show();
+}
-static const char *authors[] = {
- "Roy Marples <roy@marples.name>",
- NULL
-};
static void
on_quit(_unused GtkMenuItem *item, _unused gpointer data)
}
static void
+ssid_hook(_unused GtkMenuItem *item, gpointer data)
+{
+ wpa_configure((const struct if_ap *)data);
+}
+
+static void
on_about(_unused GtkMenuItem *item, _unused gpointer data)
{
gtk_window_set_default_icon_name(GTK_STOCK_NETWORK);
gtk_about_dialog_set_email_hook(email_hook, NULL, NULL);
gtk_about_dialog_set_url_hook(url_hook, NULL, NULL);
gtk_show_about_dialog(NULL,
- "version", VERSION,
- "copyright", copyright,
- "website-label", "dhcpcd Website",
- "website", "http://roy.marples.name/projects/dhcpcd",
- "authors", authors,
- "logo-icon-name", GTK_STOCK_NETWORK,
- NULL);
+ "version", VERSION,
+ "copyright", copyright,
+ "website-label", "dhcpcd Website",
+ "website", "http://roy.marples.name/projects/dhcpcd",
+ "authors", authors,
+ "logo-icon-name", GTK_STOCK_NETWORK,
+ NULL);
}
static void
GtkWidget *item, *image, *box, *label, *bar;
double perc;
int strength;
+ const char *icon;
+ char *tip;
for (gl = ifm->scan_results; gl; gl = gl->next) {
ifa = (const struct if_ap *)gl->data;
if (g_strcmp0(ifm->ssid, ifa->ssid) == 0)
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE);
if (ifa->flags == NULL)
- image = gtk_image_new_from_icon_name("network-wireless",
- GTK_ICON_SIZE_MENU);
+ icon = "network-wireless";
else
- image = gtk_image_new_from_icon_name("network-wireless-encrypted",
- GTK_ICON_SIZE_MENU);
+ icon = "network-wireless-encrypted";
+ image = gtk_image_new_from_icon_name(icon,
+ GTK_ICON_SIZE_MENU);
gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0);
bar = gtk_progress_bar_new();
perc = strength / 100.0;
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(bar), perc);
+ tip = g_strconcat(ifa->bssid, " ", ifa->flags, NULL);
+ gtk_widget_set_tooltip_text(item, tip);
+ g_free(tip);
+
gtk_widget_show(label);
gtk_widget_show(bar);
gtk_widget_show(image);
gtk_widget_show(box);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(ssid_hook), gl->data);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
}
}
{
GtkMenu *menu;
const struct if_msg *ifm;
- GList *gl;
- size_t n;
+ GSList *l;
+ size_t n, na;
notify_close();
- n = 0;
- for (gl = interfaces; gl; gl = gl->next) {
- ifm = (const struct if_msg *)gl->data;
- if (ifm->wireless)
- if (++n > 1)
+ n = na =0;
+ for (l = interfaces; l; l = l->next) {
+ ifm = (const struct if_msg *)l->data;
+ if (ifm->wireless) {
+ if (ifm->scan_results != NULL)
+ ++na;
+ if (++n > 1 && na != 0)
break;
+ }
}
- if (n == 0)
+ if (n == 0 || (n == 1 && na == 0))
return;
menu = (GtkMenu *)gtk_menu_new();
- for (gl = interfaces; gl; gl = gl->next) {
- ifm = (const struct if_msg *)gl->data;
+ for (l = interfaces; l; l = l->next) {
+ ifm = (const struct if_msg *)l->data;
if (!ifm->wireless)
continue;
if (n == 1) {
#if 0
item = gtk_image_menu_item_new_with_label(ifm->name);
image = gtk_image_new_from_icon_name("network-wireless",
- GTK_ICON_SIZE_MENU);
+ GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
}
gtk_widget_show_all(GTK_WIDGET(menu));
gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
- gtk_status_icon_position_menu, icon,
- 1, gtk_get_current_event_time());
+ gtk_status_icon_position_menu, icon,
+ 1, gtk_get_current_event_time());
}
static void
menu = (GtkMenu *)gtk_menu_new();
- item = gtk_image_menu_item_new_with_mnemonic(_("_Quit"));
- image = gtk_image_new_from_icon_name(GTK_STOCK_QUIT,
- GTK_ICON_SIZE_MENU);
+ item = gtk_image_menu_item_new_with_mnemonic(_("_Preferences"));
+ image = gtk_image_new_from_icon_name(GTK_STOCK_PREFERENCES,
+ GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(on_quit), icon);
+ G_CALLBACK(on_pref), icon);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
item = gtk_separator_menu_item_new();
item = gtk_image_menu_item_new_with_mnemonic(_("_Help"));
image = gtk_image_new_from_icon_name(GTK_STOCK_HELP,
- GTK_ICON_SIZE_MENU);
+ GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(on_help), icon);
+ G_CALLBACK(on_help), icon);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
item = gtk_image_menu_item_new_with_mnemonic(_("_About"));
image = gtk_image_new_from_icon_name(GTK_STOCK_ABOUT,
- GTK_ICON_SIZE_MENU);
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
+ g_signal_connect(G_OBJECT(item), "activate",
+ G_CALLBACK(on_about), icon);
+ gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
+
+ item = gtk_image_menu_item_new_with_mnemonic(_("_Quit"));
+ image = gtk_image_new_from_icon_name(GTK_STOCK_QUIT,
+ GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(on_about), icon);
+ G_CALLBACK(on_quit), icon);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
gtk_widget_show_all(GTK_WIDGET(menu));
gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
- gtk_status_icon_position_menu, data, button, atime);
+ gtk_status_icon_position_menu, data, button, atime);
if (button == 0)
gtk_menu_shell_select_first(GTK_MENU_SHELL(menu), FALSE);
}
menu_init(GtkStatusIcon *icon)
{
g_signal_connect_object(G_OBJECT(icon), "activate",
- G_CALLBACK(on_activate), icon, 0);
+ G_CALLBACK(on_activate), icon, 0);
g_signal_connect_object(G_OBJECT(icon), "popup_menu",
- G_CALLBACK(on_popup), icon, 0);
+ G_CALLBACK(on_popup), icon, 0);
}