50 #include "gnc-csv-gnumeric-popup.h"
52 #include <glib/gi18n.h>
55 popup_item_activate (GtkWidget *item, gpointer *user_data)
58 g_object_get_data (G_OBJECT (item),
"descriptor");
59 GnumericPopupMenuHandler handler =
60 g_object_get_data (G_OBJECT (item),
"handler");
62 g_return_if_fail (elem != NULL);
63 g_return_if_fail (handler != NULL);
65 if (handler (elem, user_data))
66 gtk_widget_destroy (gtk_widget_get_toplevel (item));
70 gnumeric_create_popup_menu_list (GSList *elements,
71 GnumericPopupMenuHandler handler,
75 GdkEventButton *event)
77 GtkWidget *menu, *item;
80 menu = gtk_menu_new ();
82 for (; elements != NULL ; elements = elements->next)
85 char const *
const name = element->name;
86 char const *
const pix_name = element->pixmap;
90 if (element->display_filter != 0 &&
91 !(element->display_filter & display_filter))
94 if (name != NULL && *name !=
'\0')
97 item = gtk_image_menu_item_new_with_mnemonic (trans);
98 if (element->sensitive_filter != 0 &&
99 (element->sensitive_filter & sensitive_filter))
100 gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
101 if (pix_name != NULL)
103 GtkWidget *image = gtk_image_new_from_stock (pix_name,
105 gtk_widget_show (image);
106 gtk_image_menu_item_set_image (
107 GTK_IMAGE_MENU_ITEM (item),
114 item = gtk_menu_item_new ();
115 gtk_widget_set_sensitive (item, FALSE);
118 if (element->index != 0)
120 g_signal_connect (G_OBJECT (item),
122 G_CALLBACK (&popup_item_activate), user_data);
124 G_OBJECT (item),
"descriptor", (gpointer)(element));
126 G_OBJECT (item),
"handler", (gpointer)handler);
129 gtk_widget_show (item);
130 gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
133 gnumeric_popup_menu (GTK_MENU (menu), event);
138 GnumericPopupMenuHandler handler,
140 int display_filter,
int sensitive_filter,
141 GdkEventButton *event)
146 for (i = 0; elements [i].name != NULL; i++)
147 tmp = g_slist_prepend (tmp, (gpointer)(elements + i));
149 tmp = g_slist_reverse (tmp);
150 gnumeric_create_popup_menu_list (tmp, handler, user_data,
151 display_filter, sensitive_filter, event);
156 kill_popup_menu (GtkWidget *widget, GtkMenu *menu)
158 g_return_if_fail (menu != NULL);
159 g_return_if_fail (GTK_IS_MENU (menu));
161 g_object_unref (G_OBJECT (menu));
173 gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event)
175 g_return_if_fail (menu != NULL);
176 g_return_if_fail (GTK_IS_MENU (menu));
178 g_object_ref_sink (menu);
181 gtk_menu_set_screen (menu,
182 gdk_drawable_get_screen (event->window));
184 g_signal_connect (G_OBJECT (menu),
186 G_CALLBACK (kill_popup_menu), menu);
192 gtk_menu_popup (menu, NULL, NULL, NULL, NULL, 0,
193 (event != NULL) ? event->time
194 : gtk_get_current_event_time());