68 #include "gnc-csv-gnumeric-popup.h" 70 #include <glib/gi18n.h> 73 popup_item_activate (GtkWidget *item, gpointer *user_data)
76 g_object_get_data (G_OBJECT (item),
"descriptor");
77 GnumericPopupMenuHandler handler =
78 g_object_get_data (G_OBJECT (item),
"handler");
80 g_return_if_fail (elem != NULL);
81 g_return_if_fail (handler != NULL);
83 if (handler (elem, user_data))
84 gtk_widget_destroy (gtk_widget_get_toplevel (item));
88 gnumeric_create_popup_menu_list (GSList *elements,
89 GnumericPopupMenuHandler handler,
93 GdkEventButton *event)
95 GtkWidget *menu = gtk_menu_new ();
98 for (; elements != NULL ; elements = elements->next)
101 char const *
const name = element->name;
102 char const *
const pix_name = element->pixmap;
104 if (element->display_filter != 0 &&
105 !(element->display_filter & display_filter))
108 if (name != NULL && *name !=
'\0')
110 GtkWidget *label = gtk_label_new_with_mnemonic (name);
111 GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
113 item = gtk_menu_item_new();
114 gtk_box_set_homogeneous (GTK_BOX (box), FALSE);
115 gtk_widget_set_hexpand (GTK_WIDGET(box), FALSE);
116 gtk_widget_set_halign (GTK_WIDGET(box), GTK_ALIGN_START);
118 if (pix_name != NULL)
120 GtkWidget *image = gtk_image_new_from_icon_name (pix_name,
123 gtk_container_add (GTK_CONTAINER (box), image);
124 gtk_widget_show (image);
126 gtk_box_pack_end (GTK_BOX (box), label, TRUE, TRUE, 0);
127 gtk_container_add (GTK_CONTAINER (item), box);
129 if (element->sensitive_filter != 0 &&
130 (element->sensitive_filter & sensitive_filter))
131 gtk_widget_set_sensitive (GTK_WIDGET (item), FALSE);
136 item = gtk_separator_menu_item_new ();
138 gtk_widget_show_all (item);
140 if (element->index != 0)
142 g_signal_connect (G_OBJECT (item),
144 G_CALLBACK (&popup_item_activate), user_data);
146 G_OBJECT (item),
"descriptor", (gpointer)(element));
148 G_OBJECT (item),
"handler", (gpointer)handler);
151 gtk_widget_show (item);
152 gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
155 gnumeric_popup_menu (GTK_MENU (menu), event);
160 GnumericPopupMenuHandler handler,
162 int display_filter,
int sensitive_filter,
163 GdkEventButton *event)
168 for (i = 0; elements [i].name != NULL; i++)
169 tmp = g_slist_prepend (tmp, (gpointer)(elements + i));
171 tmp = g_slist_reverse (tmp);
172 gnumeric_create_popup_menu_list (tmp, handler, user_data,
173 display_filter, sensitive_filter, event);
178 kill_popup_menu (GtkWidget *widget, GtkMenu *menu)
180 g_return_if_fail (menu != NULL);
181 g_return_if_fail (GTK_IS_MENU (menu));
183 g_object_unref (G_OBJECT (menu));
195 gnumeric_popup_menu (GtkMenu *menu, GdkEventButton *event)
197 g_return_if_fail (menu != NULL);
198 g_return_if_fail (GTK_IS_MENU (menu));
200 g_object_ref_sink (menu);
203 gtk_menu_set_screen (menu,
204 gdk_window_get_screen (event->window));
206 g_signal_connect (G_OBJECT (menu),
208 G_CALLBACK (kill_popup_menu), menu);
214 gtk_menu_popup_at_pointer (GTK_MENU(menu), (GdkEvent *) event);