2 * (SLIK) SimpLIstic sKin functions
4 * Copyright (C) 2008 - 2012 The Geeqie Team
8 * This software is released under the GNU General Public License (GNU GPL).
9 * Please read the included file COPYING for more information.
10 * This software comes with no warranty of any kind, use at your own risk!
28 *-----------------------------------------------------------------------------
30 *-----------------------------------------------------------------------------
33 static void menu_item_finish(GtkWidget *menu, GtkWidget *item, GCallback func, gpointer data)
35 if (func) g_signal_connect(G_OBJECT(item), "activate", func, data);
36 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
37 gtk_widget_show(item);
40 GtkWidget *menu_item_add(GtkWidget *menu, const gchar *label,
41 GCallback func, gpointer data)
45 item = gtk_menu_item_new_with_mnemonic(label);
46 menu_item_finish(menu, item, func, data);
51 GtkWidget *menu_item_add_stock(GtkWidget *menu, const gchar *label, const gchar *stock_id,
52 GCallback func, gpointer data)
57 item = gtk_image_menu_item_new_with_mnemonic(label);
58 image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU);
59 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
60 gtk_widget_show(image);
61 menu_item_finish(menu, item, func, data);
66 GtkWidget *menu_item_add_sensitive(GtkWidget *menu, const gchar *label, gboolean sensitive,
67 GCallback func, gpointer data)
71 item = menu_item_add(menu, label, func, data);
72 gtk_widget_set_sensitive(item, sensitive);
77 GtkWidget *menu_item_add_stock_sensitive(GtkWidget *menu, const gchar *label, const gchar *stock_id, gboolean sensitive,
78 GCallback func, gpointer data)
82 item = menu_item_add_stock(menu, label, stock_id, func, data);
83 gtk_widget_set_sensitive(item, sensitive);
88 GtkWidget *menu_item_add_check(GtkWidget *menu, const gchar *label, gboolean active,
89 GCallback func, gpointer data)
93 item = gtk_check_menu_item_new_with_mnemonic(label);
94 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), active);
95 menu_item_finish(menu, item, func, data);
100 GtkWidget *menu_item_add_radio(GtkWidget *menu, const gchar *label, gpointer item_data, gboolean active,
101 GCallback func, gpointer data)
103 GtkWidget *item = menu_item_add_check(menu, label, active, func, data);
104 g_object_set_data(G_OBJECT(item), "menu_item_radio_data", item_data);
105 g_object_set(G_OBJECT(item), "draw-as-radio", TRUE, NULL);
110 void menu_item_add_divider(GtkWidget *menu)
112 GtkWidget *item = gtk_menu_item_new();
113 gtk_widget_set_sensitive(item, FALSE);
114 gtk_menu_shell_append(GTK_MENU_SHELL(menu),item);
115 gtk_widget_show(item);
118 GtkWidget *menu_item_add_simple(GtkWidget *menu, const gchar *label,
119 GCallback func, gpointer data)
121 GtkWidget *item = gtk_menu_item_new_with_label(label);
122 menu_item_finish(menu, item, func, data);
128 *-----------------------------------------------------------------------------
130 *-----------------------------------------------------------------------------
133 static void popup_menu_short_lived_cb(GtkWidget *widget, gpointer data)
135 /* destroy the menu */
136 g_object_unref(G_OBJECT(data));
139 GtkWidget *popup_menu_short_lived(void)
143 menu = gtk_menu_new();
145 /* take ownership of menu */
146 #ifdef GTK_OBJECT_FLOATING
148 g_object_ref(G_OBJECT(menu));
149 gtk_object_sink(GTK_OBJECT(menu));
152 g_object_ref_sink(G_OBJECT(menu));
155 g_signal_connect(G_OBJECT(menu), "selection_done",
156 G_CALLBACK(popup_menu_short_lived_cb), menu);
160 gboolean popup_menu_position_clamp(GtkMenu *menu, gint *x, gint *y, gint height)
162 gboolean adjusted = FALSE;
165 GtkRequisition requisition;
167 gtk_widget_get_requisition(GTK_WIDGET(menu), &requisition);
168 w = requisition.width;
169 h = requisition.height;
170 xw = gdk_screen_width();
171 xh = gdk_screen_height();
182 *y = MAX(0, *y - h - height);
204 /* vim: set shiftwidth=8 softtabstop=0 cindent cinoptions={1s: */