From bb33fbf7671368c9eb7f8f8173d36da9dba7868e Mon Sep 17 00:00:00 2001 From: Jonathan Blandford Date: Tue, 21 Sep 2004 22:10:37 +0000 Subject: [PATCH] Tue Sep 21 18:05:34 2004 Jonathan Blandford * configure.in: Add graphics * panel-applet/Makefile.am: Add graphics * panel-applet/icons/*: Add graphics * panel-applet/NMWirelessApplet.c: Use new menu times to display the icons fully lined up. * panel-applet/menu-info.c: * panel-applet/menu-info.h: Add another menu type. git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@163 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 14 ++ configure.in | 1 + panel-applet/Makefile.am | 2 + panel-applet/NMWirelessApplet.c | 149 +++++++++++--------- panel-applet/icons/.cvsignore | 2 + panel-applet/icons/Makefile.am | 10 ++ panel-applet/icons/nm-device-wired.png | Bin 0 -> 3766 bytes panel-applet/icons/nm-device-wireless.png | Bin 0 -> 1752 bytes panel-applet/menu-info.c | 158 ++++++++++++++++++++-- panel-applet/menu-info.h | 33 ++++- 10 files changed, 288 insertions(+), 81 deletions(-) create mode 100644 panel-applet/icons/.cvsignore create mode 100644 panel-applet/icons/Makefile.am create mode 100644 panel-applet/icons/nm-device-wired.png create mode 100644 panel-applet/icons/nm-device-wireless.png diff --git a/ChangeLog b/ChangeLog index a35b1d441..1280e4f71 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +Tue Sep 21 18:05:34 2004 Jonathan Blandford + + * configure.in: Add graphics + + * panel-applet/Makefile.am: Add graphics + + * panel-applet/icons/*: Add graphics + + * panel-applet/NMWirelessApplet.c: Use new menu times to display + the icons fully lined up. + + * panel-applet/menu-info.c: + * panel-applet/menu-info.h: Add another menu type. + Fri Sep 17 14:04:34 2004 Jonathan Blandford * panel-applet/NMWirelessApplet.c: Redo the menu item code. diff --git a/configure.in b/configure.in index c4df2964c..27a784f46 100644 --- a/configure.in +++ b/configure.in @@ -141,6 +141,7 @@ src/Makefile dispatcher-daemon/Makefile info-daemon/Makefile panel-applet/Makefile +panel-applet/icons/Makefile test/Makefile initscript/Makefile initscript/RedHat/Makefile diff --git a/panel-applet/Makefile.am b/panel-applet/Makefile.am index 17928ade9..a0b20e11c 100644 --- a/panel-applet/Makefile.am +++ b/panel-applet/Makefile.am @@ -1,3 +1,5 @@ +SUBDIRS=icons + NULL= INCLUDES = \ diff --git a/panel-applet/NMWirelessApplet.c b/panel-applet/NMWirelessApplet.c index 86181b846..f44cc351d 100644 --- a/panel-applet/NMWirelessApplet.c +++ b/panel-applet/NMWirelessApplet.c @@ -566,48 +566,46 @@ static void nmwa_menu_add_text_item (GtkWidget *menu, char *text) * Add a network device to the menu * */ -static void nmwa_menu_add_device_item (GtkWidget *menu, GdkPixbuf *icon, char *name, char *nm_device, gboolean current, NMWirelessApplet *applet) +static void nmwa_menu_add_device_item (GtkWidget *menu, NetworkDevice *device, gboolean current, gboolean multiple_devices, NMWirelessApplet *applet) { GtkWidget *menu_item; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *image; g_return_if_fail (menu != NULL); - g_return_if_fail (icon != NULL); - g_return_if_fail (name != NULL); - g_return_if_fail (nm_device != NULL); - menu_item = gtk_check_menu_item_new (); - hbox = gtk_hbox_new (FALSE, 2); - gtk_container_add (GTK_CONTAINER (menu_item), hbox); - gtk_widget_show (hbox); + menu_item = nm_menu_network_new (applet->image_size_group); + nm_menu_network_update (NM_MENU_NETWORK (menu_item), device, multiple_devices); - if ((image = gtk_image_new_from_pixbuf (icon))) - { - gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); - gtk_widget_show (image); - gtk_size_group_add_widget (applet->image_size_group, image); - } - - label = gtk_label_new (name); - if (current) - { - char *markup = g_markup_printf_escaped ("%s", name); - gtk_label_set_markup (GTK_LABEL (label), markup); - g_free (markup); - } - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); - gtk_widget_show (label); - - g_object_set_data (G_OBJECT (menu_item), "device", g_strdup (nm_device)); + g_object_set_data (G_OBJECT (menu_item), "device", g_strdup (device->nm_device)); g_signal_connect(G_OBJECT (menu_item), "activate", G_CALLBACK(nmwa_menu_item_activate), applet); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); gtk_widget_show (menu_item); } +static void nmwa_menu_add_custom_essid_item (GtkWidget *menu, NetworkDevice *device, NMWirelessApplet *applet) +{ + GtkWidget *menu_item; + GtkWidget *spacer; + GtkWidget *hbox; + GtkWidget *label; + + menu_item = gtk_menu_item_new (); + hbox = gtk_hbox_new (FALSE, 2); + spacer = gtk_frame_new (NULL); + gtk_size_group_add_widget (applet->image_size_group, spacer); + gtk_frame_set_shadow_type (GTK_FRAME (spacer), GTK_SHADOW_NONE); + gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); + label = gtk_label_new (_("Other Wireless Network...")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), label, TRUE, TRUE, 0); + + gtk_container_add (GTK_CONTAINER (menu_item), hbox); + g_object_set_data (G_OBJECT (menu_item), "device", g_strdup (device->nm_device)); + gtk_widget_set_sensitive (menu_item, FALSE); // FIXME: make this work. + gtk_widget_show_all (menu_item); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); +} + /* * nmwa_menu_device_add_networks @@ -625,23 +623,11 @@ static void nmwa_menu_device_add_networks (GtkWidget *menu, NetworkDevice *dev, if (dev->type != DEVICE_TYPE_WIRELESS_ETHERNET) return; - if (dev->networks == NULL) - { - nmwa_menu_add_text_item (menu, _("There are no wireless networks...")); - return; - } - /* Check for any security */ for (list = dev->networks; list; list = list->next) { WirelessNetwork *network = list->data; - if (FALSE && !has_encrypted)//BADHACKTOTEST - { // REMOVE! - network->encrypted = TRUE; // REMOVE! - network->active = TRUE; // REMOVE! - } // REMOVE! - if (network->encrypted) has_encrypted = TRUE; } @@ -665,6 +651,9 @@ static void nmwa_menu_device_add_networks (GtkWidget *menu, NetworkDevice *dev, gtk_widget_show (menu_item); } + + /* Add the 'Select a custom esssid entry */ + nmwa_menu_add_custom_essid_item (menu, dev, applet); } @@ -675,37 +664,59 @@ static void nmwa_menu_device_add_networks (GtkWidget *menu, NetworkDevice *dev, static void nmwa_menu_add_devices (GtkWidget *menu, NMWirelessApplet *applet) { GSList *element; + gint n_wireless_interfaces = 0; + gint n_wired_interfaces = 0; g_return_if_fail (menu != NULL); g_return_if_fail (applet != NULL); g_mutex_lock (applet->data_mutex); - element = applet->devices; - if (!element) - nmwa_menu_add_text_item (menu, _("There are no network devices...")); - else + + if (! applet->devices) { - /* Add all devices in our device list to the menu */ - while (element) + nmwa_menu_add_text_item (menu, _("No network devices have been found")); + return; + } + + for (element = applet->devices; element; element = element->next) + { + NetworkDevice *dev = (NetworkDevice *)(element->data); + + g_assert (dev); + + switch (dev->type) { - NetworkDevice *dev = (NetworkDevice *)(element->data); - - if (dev && ((dev->type == DEVICE_TYPE_WIRED_ETHERNET) || (dev->type == DEVICE_TYPE_WIRELESS_ETHERNET))) - { - GdkPixbuf *icon = (dev->type == DEVICE_TYPE_WIRED_ETHERNET) ? applet->wired_icon : applet->wireless_icon; - char *name_string; - gboolean current = (dev == applet->active_device); - - name_string = g_strdup_printf ("%s (%s)", (dev->hal_name ? dev->hal_name : dev->nm_name), - (dev->type == DEVICE_TYPE_WIRED_ETHERNET) ? "wired" : "wireless"); - nmwa_menu_add_device_item (menu, icon, name_string, dev->nm_device, current, applet); - g_free (name_string); - nmwa_menu_device_add_networks (menu, dev, applet); - nmwa_menu_add_separator_item (menu); - } - element = g_slist_next (element); + case DEVICE_TYPE_WIRELESS_ETHERNET: + n_wireless_interfaces++; + break; + case DEVICE_TYPE_WIRED_ETHERNET: + n_wired_interfaces++; + break; + default: + break; } } + + /* Add all devices in our device list to the menu */ + for (element = applet->devices; element; element = element->next) + { + NetworkDevice *dev = (NetworkDevice *)(element->data); + + if (dev && ((dev->type == DEVICE_TYPE_WIRED_ETHERNET) || (dev->type == DEVICE_TYPE_WIRELESS_ETHERNET))) + { + gboolean current = (dev == applet->active_device); + gboolean multiple_devices; + + if (dev->type == DEVICE_TYPE_WIRED_ETHERNET) + multiple_devices = (n_wired_interfaces > 1); + else if (dev->type == DEVICE_TYPE_WIRELESS_ETHERNET) + multiple_devices = (n_wireless_interfaces > 1); + + nmwa_menu_add_device_item (menu, dev, current, multiple_devices, applet); + nmwa_menu_device_add_networks (menu, dev, applet); + } + } + g_mutex_unlock (applet->data_mutex); } @@ -774,9 +785,7 @@ static GtkWidget * nmwa_populate_menu (NMWirelessApplet *applet) return NULL; } - nmwa_menu_add_text_item (menu, _("Network Connections")); nmwa_menu_add_devices (menu, applet); - nmwa_menu_add_text_item (menu, _("Other Wireless Network...")); return (menu); } @@ -992,6 +1001,14 @@ setup_stock (void) ifactory = gtk_icon_factory_new (); iset = gtk_icon_set_new (); isource = gtk_icon_source_new (); + + /* Set up custom stock images. We a bunch of icons. */ + /* All but gnome-lockscreen are icons we install. */ + gtk_icon_source_set_icon_name (isource, "nm-"); + gtk_icon_set_add_source (iset, isource); + gtk_icon_factory_add (ifactory, "gnome-lockscreen", iset); + gtk_icon_factory_add_default (ifactory); + gtk_icon_source_set_icon_name (isource, "gnome-lockscreen"); gtk_icon_set_add_source (iset, isource); gtk_icon_factory_add (ifactory, "gnome-lockscreen", iset); diff --git a/panel-applet/icons/.cvsignore b/panel-applet/icons/.cvsignore new file mode 100644 index 000000000..3dda72986 --- /dev/null +++ b/panel-applet/icons/.cvsignore @@ -0,0 +1,2 @@ +Makefile.in +Makefile diff --git a/panel-applet/icons/Makefile.am b/panel-applet/icons/Makefile.am new file mode 100644 index 000000000..3c1d9a091 --- /dev/null +++ b/panel-applet/icons/Makefile.am @@ -0,0 +1,10 @@ +NULL = + +largeicondir=${datadir}/icons/hicolor/48x48/apps +largeicon_DATA=\ + nm-device-wired.png \ + nm-device-wireless.png \ + $(NULL) + +EXTRA_DIST=\ + $(largeicon_DATA) diff --git a/panel-applet/icons/nm-device-wired.png b/panel-applet/icons/nm-device-wired.png new file mode 100644 index 0000000000000000000000000000000000000000..1bf6d7d34e0d827b0081ea0bae3a98eb1518d54f GIT binary patch literal 3766 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 RD+2=qgQu&X%Q~loCIEkYKQ#aV literal 0 HcmV?d00001 diff --git a/panel-applet/icons/nm-device-wireless.png b/panel-applet/icons/nm-device-wireless.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e9e26f6a05def656861fd0267a8b4aefe478aa GIT binary patch literal 1752 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F~)o#EXR5-N4P{`XeQ@I733XTV+SOltzA*6n zy1X)Q`0h2sf(O0%d}}+`s~)y|@OHwL{|~<&+cWE9TQ_GPSbkuBL)P?dN(|5QH;Ab<@?X0&^F5m# z9 zHF43pvqe>I+pROwaVl>s42YMyWQtP+*W&P@_)TOB!O9Q+bnOa>KFF!y3dHVFYgWR{p8IQ9k zF!)zpd^9!w6yrRL4;E8TEp52j{givo&sQ3+&u06intyowg|*G>Y4b<$2~g@GgNVJhGy7sLb_S{JP4$ z?RKV4 zvu&hr)M*L2d!9Tk?^pQjP005Wt5sD?MIOh?E6e#O+!oW{^W%9cW5xfy<(fSCoHYkZ z?}ja_{XdaQQ#5*8Z@{1Xo>L}WdG>lu^mX|&u^((7Fn`$p_#;d7_Ff}XOU45e&+k{5 zetM(f{O7+rIiF>JeslLXL+hb{({`6H8&5fvDtBkQ`3-Ll!5EFJ-nolZQ9gNwalb{C^|esi$+!Jm;Lf zY>LqFLM8>?WrrD5f;@9hJ9&BD-SXn~>1`I3*UbxWFdpuk>9ag~eTpyllB%btM30oK z8}R?-eST#6!8yG@ZI%}Ov|^|$jun6U_M!Rx&ev(Ot&7a;{jKKmG;Hl|yFN1@g!y9y zQ=;{bRf+Y9nbK{J?~fEtvOcvz@PWv+n<~e))rxRA>!v;3rRUV4wpnp`uT|m4*}@DF z%kI8X&JwgskYMxDH1T!5UfLoMGh^lp;FMoUM?DnIRRVIC$R%lZDQmP~9eVuKH z;7Wx{``doR_Rc@4d*Y$}q%tvU#eLy-NCKt_*a^+Vb|S z>^DPARhLBqnFMJ zl5d*ry_xeQ?$sJbQPYK9OAkGGpuo(`{N~>0fZJCV2KPNNmhAgoXY_oz$i|2@zUQuF z%wk)XIqCI#ZqATW-JG3)!kcnuzkHeb>TA{YKg)x|ULCKoSKp+g{lfQhPRiab_n0ew zPMFlSGivU>efPGN-REl%a9WTVwV-k5PRpX5GJpU6J?*u&*7`f+j&&r)~Ey@NwceO1{SSENb zpRv>6wkPxF24;`7rx)Mb(Kwa!u66panalZEe9m9h(Tm@Ar*NXKj9;BG +G_DEFINE_TYPE (NMMenuNetwork, nm_menu_network, GTK_TYPE_CHECK_MENU_ITEM); + +static void nm_menu_network_update_image (NMMenuNetwork *menu_network); + +static void +nm_menu_network_init (NMMenuNetwork *menu_network) +{ + GtkWidget *hbox; + + gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM (menu_network), TRUE); + hbox = gtk_hbox_new (FALSE, 2); + menu_network->image = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (hbox), menu_network->image, FALSE, FALSE, 0); + menu_network->label = gtk_label_new (NULL); + gtk_misc_set_alignment (GTK_MISC (menu_network->label), 0.0, 0.5); + gtk_box_pack_start (GTK_BOX (hbox), menu_network->label, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (menu_network), hbox); + gtk_widget_show_all (hbox); +} + + +static void +nm_menu_network_style_set (GtkWidget *widget, + GtkStyle *previous_style) +{ + GTK_WIDGET_CLASS (nm_menu_network_parent_class)->style_set (widget, previous_style); + + nm_menu_network_update_image (NM_MENU_NETWORK (widget)); +} + +static void +nm_menu_network_draw_indicator (GtkCheckMenuItem *check_menu_item, + GdkRectangle *area) +{ + /* Only draw the indicator if we're an ethernet device */ + if (NM_MENU_NETWORK (check_menu_item)->type == DEVICE_TYPE_WIRELESS_ETHERNET) + GTK_CHECK_MENU_ITEM_CLASS (nm_menu_network_parent_class)->draw_indicator (check_menu_item, area); +} + +static void +nm_menu_network_class_init (NMMenuNetworkClass *menu_network) +{ + GtkWidgetClass *widget_class; + GtkCheckMenuItemClass *check_menu_item_class; + + widget_class = GTK_WIDGET_CLASS (menu_network); + check_menu_item_class = GTK_CHECK_MENU_ITEM_CLASS (menu_network); + + widget_class->style_set = nm_menu_network_style_set; + check_menu_item_class->draw_indicator = nm_menu_network_draw_indicator; +} + +GtkWidget * +nm_menu_network_new (GtkSizeGroup *image_size_group) +{ + GtkWidget *retval = g_object_new (nm_menu_network_get_type (), NULL); + + gtk_size_group_add_widget (image_size_group, + NM_MENU_NETWORK (retval)->image); + + return retval; +} + +/* updates the image based on the icon type. It is called when themes + * change too as the icon size is theme dependent */ +static void +nm_menu_network_update_image (NMMenuNetwork *menu_network) +{ + GtkIconTheme *icon_theme; + GdkPixbuf *icon; + const gchar *icon_name = NULL; + gint size; + + if (menu_network->type == DEVICE_TYPE_WIRED_ETHERNET) + { + icon_name = "nm-device-wired"; + } + else if (menu_network->type == DEVICE_TYPE_WIRELESS_ETHERNET) + { + icon_name = "nm-device-wireless"; + } + else + { + gtk_image_set_from_pixbuf (GTK_IMAGE (menu_network->image), NULL); + return; + } + + gtk_icon_size_lookup_for_settings (gtk_settings_get_default (), + GTK_ICON_SIZE_MENU, + &size, NULL); + + icon_theme = gtk_icon_theme_get_default (); + icon = gtk_icon_theme_load_icon (icon_theme, + icon_name, + size, 0, NULL); + gtk_image_set_from_pixbuf (GTK_IMAGE (menu_network->image), icon); + if (icon) + g_object_unref (icon); +} + +void +nm_menu_network_update (NMMenuNetwork *menu_network, + NetworkDevice *network, + gint n_devices) +{ + char *text; + const char *network_name; + gint n_essids; + + menu_network->type = network->type; + n_essids = g_slist_length (network->networks); + network_name = network->hal_name ? network->hal_name : network->nm_name; + + switch (menu_network->type) + { + case DEVICE_TYPE_WIRED_ETHERNET: + if (n_devices > 1) + text = g_strdup_printf (_("Wired Network (%s)"), network_name); + else + text = g_strdup (_("Wired Network")); + break; + case DEVICE_TYPE_WIRELESS_ETHERNET: + if (n_devices > 1) + text = g_strdup_printf (ngettext ("Wireless Network (%s)", "Wireless Networks (%s)", n_essids), network_name); + else + text = g_strdup (ngettext ("Wireless Network", "Wireless Networks", n_essids)); + break; + default: + g_assert_not_reached (); + break; + } + gtk_label_set_text (GTK_LABEL (menu_network->label), text); + g_free (text); + nm_menu_network_update_image (menu_network); + + if (menu_network->type == DEVICE_TYPE_WIRELESS_ETHERNET) + gtk_widget_set_sensitive (GTK_WIDGET (menu_network), FALSE); + else + gtk_widget_set_sensitive (GTK_WIDGET (menu_network), TRUE); +} + +/* NMMenuWireless items*/ G_DEFINE_TYPE (NMMenuWireless, nm_menu_wireless, GTK_TYPE_CHECK_MENU_ITEM); static void @@ -94,19 +238,9 @@ nm_menu_wireless_update (NMMenuWireless *menu_info, char *display_essid; display_essid = nm_menu_wireless_escape_essid_for_display (network->essid); - if (network->active) - { - char *markup_essid; - markup_essid = g_markup_printf_escaped ("%s", display_essid); - gtk_label_set_markup (GTK_LABEL (menu_info->label), markup_essid); - g_free (markup_essid); - } - else - { - gtk_label_set_text (GTK_LABEL (menu_info->label), display_essid); - } - + gtk_label_set_text (GTK_LABEL (menu_info->label), display_essid); g_free (display_essid); + g_object_set (G_OBJECT (menu_info->progress_bar), "value", CLAMP ((int) network->strength, 0, 100), NULL); diff --git a/panel-applet/menu-info.h b/panel-applet/menu-info.h index d2a24a124..828f51333 100644 --- a/panel-applet/menu-info.h +++ b/panel-applet/menu-info.h @@ -1,4 +1,4 @@ -/* menu-info.h: Simple menu item for the Applet to use +/* menu-info.h: Simple menu items for the Applet to use * * Jonathan Blandford * @@ -23,11 +23,30 @@ #define MENU_INFO_H +/* We have two widgets that we use here. + */ #include #include "NMWirelessApplet.h" -#define NM_TYPE_MENU_WIRELESS (nm_menu_wireless_get_type ()) -#define NM_MENU_WIRELESS(widget) (G_TYPE_CHECK_INSTANCE_CAST ((widget), NM_TYPE_MENU_WIRELESS, NMMenuWireless)) +#define NM_TYPE_MENU_NETWORK (nm_menu_network_get_type ()) +#define NM_MENU_NETWORK(widget) (G_TYPE_CHECK_INSTANCE_CAST ((widget), NM_TYPE_MENU_NETWORK, NMMenuNetwork)) + +#define NM_TYPE_MENU_WIRELESS (nm_menu_wireless_get_type ()) +#define NM_MENU_WIRELESS(widget) (G_TYPE_CHECK_INSTANCE_CAST ((widget), NM_TYPE_MENU_WIRELESS, NMMenuWireless)) + +typedef struct +{ + GtkCheckMenuItemClass parent_class; +} NMMenuNetworkClass; + +typedef struct +{ + GtkCheckMenuItem parent; + GtkWidget *image; + GtkWidget *label; + int type; +} NMMenuNetwork; + typedef struct { @@ -45,6 +64,14 @@ typedef struct } NMMenuWireless; + + +GType nm_menu_network_get_type (void); +GtkWidget *nm_menu_network_new (GtkSizeGroup *image_size_group); +void nm_menu_network_update (NMMenuNetwork *menu_network, + NetworkDevice *network, + gboolean multiple_devices); + GType nm_menu_wireless_get_type (void); GtkWidget *nm_menu_wireless_new (GtkSizeGroup *image_size_group, GtkSizeGroup *encryption_size_group);