diff options
author | JP Rosevear <jpr@ximian.com> | 2002-04-18 23:37:57 +0800 |
---|---|---|
committer | JP Rosevear <jpr@src.gnome.org> | 2002-04-18 23:37:57 +0800 |
commit | b997798e3573be6e4e8051807ca66a03756d4bec (patch) | |
tree | 6cd794eb8be3666bc114b9af02b2f163215607c3 | |
parent | 59b2f41e54f9f77b9e3f5e87e531ae15939b865f (diff) | |
download | gsoc2013-evolution-b997798e3573be6e4e8051807ca66a03756d4bec.tar.gz gsoc2013-evolution-b997798e3573be6e4e8051807ca66a03756d4bec.tar.zst gsoc2013-evolution-b997798e3573be6e4e8051807ca66a03756d4bec.zip |
handle toggle and radio items (make_item): the item is now passed in from
2002-04-18 JP Rosevear <jpr@ximian.com>
* gal/widgets/e-popup-menu.c (e_popup_menu_create): handle toggle
and radio items
(make_item): the item is now passed in from above and not returned
svn path=/trunk/; revision=16508
-rw-r--r-- | widgets/misc/e-popup-menu.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/widgets/misc/e-popup-menu.c b/widgets/misc/e-popup-menu.c index f735166883..780ed55c76 100644 --- a/widgets/misc/e-popup-menu.c +++ b/widgets/misc/e-popup-menu.c @@ -29,6 +29,8 @@ #include <gtk/gtkaccellabel.h> #include <gtk/gtklabel.h> #include <gtk/gtkmenuitem.h> +#include <gtk/gtkcheckmenuitem.h> +#include <gtk/gtkradiomenuitem.h> #include <gtk/gtksignal.h> #include <libgnomeui/gtkpixmapmenuitem.h> #include <libgnomeui/gnome-stock.h> @@ -65,15 +67,12 @@ gnome_app_helper_gettext (const gchar *str) /* * Creates an item with an optional icon */ -static GtkWidget * -make_item (GtkMenu *menu, const char *name, GtkWidget *pixmap) +static void +make_item (GtkMenu *menu, GtkMenuItem *item, const char *name, GtkWidget *pixmap) { - GtkWidget *label, *item; + GtkWidget *label; guint label_accel; - - if (*name == '\0') - return gtk_menu_item_new (); - + /* * Ugh. This needs to go into Gtk+ */ @@ -82,30 +81,28 @@ make_item (GtkMenu *menu, const char *name, GtkWidget *pixmap) gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_widget_show (label); - item = pixmap ? gtk_pixmap_menu_item_new () : gtk_menu_item_new (); gtk_container_add (GTK_CONTAINER (item), label); if (label_accel != GDK_VoidSymbol){ gtk_widget_add_accelerator ( - item, + GTK_WIDGET (item), "activate_item", gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)), label_accel, 0, GTK_ACCEL_LOCKED); } - if (pixmap){ + if (pixmap && GTK_IS_PIXMAP_MENU_ITEM (item)){ gtk_widget_show (pixmap); gtk_pixmap_menu_item_set_pixmap (GTK_PIXMAP_MENU_ITEM (item), pixmap); } - - return item; } GtkMenu * e_popup_menu_create (EPopupMenu *menu_list, guint32 disable_mask, guint32 hide_mask, void *default_closure) { GtkMenu *menu = GTK_MENU (gtk_menu_new ()); + GSList *group = NULL; gboolean last_item_separator = TRUE; int last_non_separator = -1; int i; @@ -122,12 +119,24 @@ e_popup_menu_create (EPopupMenu *menu_list, guint32 disable_mask, guint32 hide_m separator = !strcmp ("", menu_list[i].name); if ((!(separator && last_item_separator)) && !(menu_list [i].disable_mask & hide_mask)) { - GtkWidget *item; + GtkWidget *item = NULL; - if (!separator) - item = make_item (menu, L_(menu_list[i].name), menu_list[i].pixmap_widget); - else - item = make_item (menu, "", NULL); + if (!separator) { + if (menu_list[i].is_toggle) + item = gtk_check_menu_item_new (); + else if (menu_list[i].is_radio) + item = gtk_radio_menu_item_new (group); + else + item = menu_list[i].pixmap_widget ? gtk_pixmap_menu_item_new () : gtk_menu_item_new (); + if (menu_list[i].is_toggle || menu_list[i].is_radio) + gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), menu_list[i].is_active); + if (menu_list[i].is_radio) + group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (item)); + + make_item (menu, GTK_MENU_ITEM (item), L_(menu_list[i].name), menu_list[i].pixmap_widget); + } else { + item = gtk_menu_item_new (); + } gtk_menu_append (menu, item); |