Sharing pixbuf generation code between the wireless applet and tool

This commit is contained in:
Pierre Pronchery 2013-12-07 00:17:01 +01:00
parent 24773ce8a5
commit 8381362f23
2 changed files with 39 additions and 25 deletions

View File

@ -103,6 +103,7 @@ typedef struct _WPANetwork
typedef enum _WPAScanResult
{
WSR_UPDATED = 0,
WSR_ICON,
WSR_BSSID,
WSR_FREQUENCY,
WSR_LEVEL,
@ -200,7 +201,8 @@ static WPA * _wpa_init(PanelAppletHelper * helper, GtkWidget ** widget)
gtk_box_pack_start(GTK_BOX(hbox), wpa->label, FALSE, TRUE, 0);
#endif
wpa->store = gtk_list_store_new(WSR_COUNT, G_TYPE_BOOLEAN,
G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_STRING);
GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_UINT,
G_TYPE_UINT, G_TYPE_STRING);
_wpa_start(wpa);
gtk_widget_show_all(hbox);
pango_font_description_free(bold);
@ -556,7 +558,6 @@ static void _stop_channel(WPA * wpa, WPAChannel * channel)
/* on_clicked */
static void _clicked_network_list(WPA * wpa, GtkWidget * menu);
static void _clicked_network_view(WPA * wpa, GtkWidget * menu);
static GtkWidget * _clicked_network_view_image(guint level);
static void _clicked_position_menu(GtkMenu * menu, gint * x, gint * y,
gboolean * push_in, gpointer data);
/* callbacks */
@ -657,6 +658,7 @@ static void _clicked_network_view(WPA * wpa, GtkWidget * menu)
GtkWidget * image;
GtkTreeIter iter;
gboolean valid;
GdkPixbuf * pixbuf;
gchar * bssid;
guint frequency;
guint level;
@ -671,9 +673,9 @@ static void _clicked_network_view(WPA * wpa, GtkWidget * menu)
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
for(; valid == TRUE; valid = gtk_tree_model_iter_next(model, &iter))
{
gtk_tree_model_get(model, &iter, WSR_BSSID, &bssid,
WSR_FREQUENCY, &frequency, WSR_LEVEL, &level,
WSR_SSID, &ssid, -1);
gtk_tree_model_get(model, &iter, WSR_ICON, &pixbuf,
WSR_BSSID, &bssid, WSR_FREQUENCY, &frequency,
WSR_LEVEL, &level, WSR_SSID, &ssid, -1);
menuitem = gtk_image_menu_item_new_with_label((ssid != NULL)
? ssid : bssid);
#if GTK_CHECK_VERSION(2, 12, 0)
@ -683,7 +685,7 @@ static void _clicked_network_view(WPA * wpa, GtkWidget * menu)
#endif
if(ssid != NULL)
g_object_set_data(G_OBJECT(menuitem), "ssid", ssid);
image = _clicked_network_view_image(level);
image = gtk_image_new_from_pixbuf(pixbuf);
gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem),
image);
g_signal_connect(menuitem, "activate", G_CALLBACK(
@ -696,24 +698,6 @@ static void _clicked_network_view(WPA * wpa, GtkWidget * menu)
}
}
static GtkWidget * _clicked_network_view_image(guint level)
{
char const * name;
/* FIXME check if the mapping is right (and use our own icons) */
if(level >= 100)
name = "phone-signal-100";
else if(level >= 75)
name = "phone-signal-75";
else if(level >= 50)
name = "phone-signal-50";
else if(level >= 25)
name = "phone-signal-25";
else
name = "phone-signal-00";
return gtk_image_new_from_icon_name(name, GTK_ICON_SIZE_MENU);
}
static void _clicked_on_network_activated(GtkWidget * widget, gpointer data)
{
WPA * wpa = data;
@ -823,6 +807,7 @@ static void _read_add_network(WPA * wpa, WPAChannel * channel, char const * buf,
size_t cnt, char const * ssid);
static void _read_list_networks(WPA * wpa, char const * buf, size_t cnt);
static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt);
static GdkPixbuf * _read_scan_results_pixbuf(guint level);
static void _read_status(WPA * wpa, char const * buf, size_t cnt);
static void _read_unsolicited(WPA * wpa, char const * buf, size_t cnt);
@ -1016,6 +1001,7 @@ static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt)
char * p = NULL;
char * q;
int res;
GdkPixbuf * pixbuf;
char bssid[18];
unsigned int frequency;
unsigned int level;
@ -1041,6 +1027,7 @@ static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt)
&frequency, &level, flags,
ssid)) >= 3)
{
pixbuf = _read_scan_results_pixbuf(level);
bssid[sizeof(bssid) - 1] = '\0';
flags[sizeof(flags) - 1] = '\0';
ssid[sizeof(ssid) - 1] = '\0';
@ -1051,7 +1038,7 @@ static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt)
#endif
gtk_list_store_append(wpa->store, &iter);
gtk_list_store_set(wpa->store, &iter, WSR_UPDATED, TRUE,
WSR_BSSID, bssid,
WSR_ICON, pixbuf, WSR_BSSID, bssid,
WSR_FREQUENCY, frequency,
WSR_LEVEL, level, -1);
if(res == 5)
@ -1062,6 +1049,28 @@ static void _read_scan_results(WPA * wpa, char const * buf, size_t cnt)
free(p);
}
static GdkPixbuf * _read_scan_results_pixbuf(guint level)
{
GtkIconTheme * icontheme;
char const * name;
gint size;
icontheme = gtk_icon_theme_get_default();
/* FIXME check if the mapping is right (and use our own icons) */
if(level >= 100)
name = "phone-signal-100";
else if(level >= 75)
name = "phone-signal-75";
else if(level >= 50)
name = "phone-signal-50";
else if(level >= 25)
name = "phone-signal-25";
else
name = "phone-signal-00";
gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &size, &size); /* XXX */
return gtk_icon_theme_load_icon(icontheme, name, size, 0, NULL);
}
static void _read_status(WPA * wpa, char const * buf, size_t cnt)
{
size_t i;

View File

@ -100,6 +100,11 @@ int main(int argc, char * argv[])
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(wpa->store));
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), TRUE);
renderer = gtk_cell_renderer_pixbuf_new();
column = gtk_tree_view_column_new_with_attributes("", renderer,
"pixbuf", WSR_ICON, NULL);
gtk_tree_view_column_set_sort_column_id(column, WSR_LEVEL);
gtk_tree_view_append_column(GTK_TREE_VIEW(view), column);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("SSID", renderer,
"text", WSR_SSID, NULL);