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 a35b1d441a..1280e4f71b 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 c4df2964c7..27a784f462 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 17928ade99..a0b20e11c8 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 86181b8468..f44cc351dc 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 0000000000..3dda72986f --- /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 0000000000..3c1d9a0910 --- /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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 uMSYPP4_^dwIidLxJ|cd<@7U3Z?UQWLTP&d0000 +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 d2a24a1241..828f51333d 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);