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
This commit is contained in:
@ -29,6 +29,8 @@
|
|||||||
#include <gtk/gtkaccellabel.h>
|
#include <gtk/gtkaccellabel.h>
|
||||||
#include <gtk/gtklabel.h>
|
#include <gtk/gtklabel.h>
|
||||||
#include <gtk/gtkmenuitem.h>
|
#include <gtk/gtkmenuitem.h>
|
||||||
|
#include <gtk/gtkcheckmenuitem.h>
|
||||||
|
#include <gtk/gtkradiomenuitem.h>
|
||||||
#include <gtk/gtksignal.h>
|
#include <gtk/gtksignal.h>
|
||||||
#include <libgnomeui/gtkpixmapmenuitem.h>
|
#include <libgnomeui/gtkpixmapmenuitem.h>
|
||||||
#include <libgnomeui/gnome-stock.h>
|
#include <libgnomeui/gnome-stock.h>
|
||||||
@ -65,15 +67,12 @@ gnome_app_helper_gettext (const gchar *str)
|
|||||||
/*
|
/*
|
||||||
* Creates an item with an optional icon
|
* Creates an item with an optional icon
|
||||||
*/
|
*/
|
||||||
static GtkWidget *
|
static void
|
||||||
make_item (GtkMenu *menu, const char *name, GtkWidget *pixmap)
|
make_item (GtkMenu *menu, GtkMenuItem *item, const char *name, GtkWidget *pixmap)
|
||||||
{
|
{
|
||||||
GtkWidget *label, *item;
|
GtkWidget *label;
|
||||||
guint label_accel;
|
guint label_accel;
|
||||||
|
|
||||||
if (*name == '\0')
|
|
||||||
return gtk_menu_item_new ();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Ugh. This needs to go into Gtk+
|
* 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_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
|
||||||
gtk_widget_show (label);
|
gtk_widget_show (label);
|
||||||
|
|
||||||
item = pixmap ? gtk_pixmap_menu_item_new () : gtk_menu_item_new ();
|
|
||||||
gtk_container_add (GTK_CONTAINER (item), label);
|
gtk_container_add (GTK_CONTAINER (item), label);
|
||||||
|
|
||||||
if (label_accel != GDK_VoidSymbol){
|
if (label_accel != GDK_VoidSymbol){
|
||||||
gtk_widget_add_accelerator (
|
gtk_widget_add_accelerator (
|
||||||
item,
|
GTK_WIDGET (item),
|
||||||
"activate_item",
|
"activate_item",
|
||||||
gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)),
|
gtk_menu_ensure_uline_accel_group (GTK_MENU (menu)),
|
||||||
label_accel, 0,
|
label_accel, 0,
|
||||||
GTK_ACCEL_LOCKED);
|
GTK_ACCEL_LOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pixmap){
|
if (pixmap && GTK_IS_PIXMAP_MENU_ITEM (item)){
|
||||||
gtk_widget_show (pixmap);
|
gtk_widget_show (pixmap);
|
||||||
gtk_pixmap_menu_item_set_pixmap (GTK_PIXMAP_MENU_ITEM (item), pixmap);
|
gtk_pixmap_menu_item_set_pixmap (GTK_PIXMAP_MENU_ITEM (item), pixmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
return item;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkMenu *
|
GtkMenu *
|
||||||
e_popup_menu_create (EPopupMenu *menu_list, guint32 disable_mask, guint32 hide_mask, void *default_closure)
|
e_popup_menu_create (EPopupMenu *menu_list, guint32 disable_mask, guint32 hide_mask, void *default_closure)
|
||||||
{
|
{
|
||||||
GtkMenu *menu = GTK_MENU (gtk_menu_new ());
|
GtkMenu *menu = GTK_MENU (gtk_menu_new ());
|
||||||
|
GSList *group = NULL;
|
||||||
gboolean last_item_separator = TRUE;
|
gboolean last_item_separator = TRUE;
|
||||||
int last_non_separator = -1;
|
int last_non_separator = -1;
|
||||||
int i;
|
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);
|
separator = !strcmp ("", menu_list[i].name);
|
||||||
|
|
||||||
if ((!(separator && last_item_separator)) && !(menu_list [i].disable_mask & hide_mask)) {
|
if ((!(separator && last_item_separator)) && !(menu_list [i].disable_mask & hide_mask)) {
|
||||||
GtkWidget *item;
|
GtkWidget *item = NULL;
|
||||||
|
|
||||||
if (!separator)
|
if (!separator) {
|
||||||
item = make_item (menu, L_(menu_list[i].name), menu_list[i].pixmap_widget);
|
if (menu_list[i].is_toggle)
|
||||||
else
|
item = gtk_check_menu_item_new ();
|
||||||
item = make_item (menu, "", NULL);
|
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);
|
gtk_menu_append (menu, item);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user