1 #include <glib.h>
2 #define GDK_VERSION_MIN_REQUIRED G_ENCODE_VERSION (3, 8)
3 #include <gtk/gtk.h>
4 
main(int argc,char ** argv)5 int main (int argc, char **argv)
6 {
7 	GtkWidget *window;
8 	GtkWidget *grid;
9 	GtkWidget *button;
10 	GtkWidget *menu;
11 	GtkWidget *item;
12 	GtkWidget *box;
13 	GtkWidget *label;
14 	GtkAction *action1;
15 	GtkAction *action2;
16         GtkAccelGroup *accel_group;
17 
18 	gtk_init (&argc, &argv);
19 
20 	action1 = gtk_action_new ("bold", NULL, NULL, GTK_STOCK_BOLD);
21 	action2 = gtk_action_new ("new", NULL, NULL, GTK_STOCK_NEW);
22 	gtk_action_set_always_show_image (action2, TRUE);
23 
24 	window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
25 
26         accel_group = gtk_accel_group_new ();
27         gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
28 
29 	grid = gtk_grid_new ();
30 	gtk_container_add (GTK_CONTAINER (window), grid);
31 
32         /* plain old stock button */
33         button = gtk_button_new_from_stock (GTK_STOCK_DELETE);
34         gtk_container_add (GTK_CONTAINER (grid), button);
35 
36 	/* gtk_button_set_always_show_image still works */
37         button = gtk_button_new_from_stock (GTK_STOCK_CLOSE);
38         gtk_button_set_always_show_image (GTK_BUTTON (button), TRUE);
39         gtk_container_add (GTK_CONTAINER (grid), button);
40 
41 	/* old-style image-only button */
42 	button = gtk_button_new ();
43 	gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name ("edit-find", GTK_ICON_SIZE_BUTTON));
44         gtk_container_add (GTK_CONTAINER (grid), button);
45 
46 	/* new-style image-only button */
47         button = gtk_button_new_from_icon_name ("edit-clear", GTK_ICON_SIZE_BUTTON);
48         gtk_container_add (GTK_CONTAINER (grid), button);
49 
50 	/* GtkAction-backed button */
51 	button = gtk_button_new ();
52 	gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
53         gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), action1);
54         gtk_container_add (GTK_CONTAINER (grid), button);
55 
56 	/* gtk_action_set_always_show_image still works for buttons */
57 	button = gtk_button_new ();
58 	gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
59         gtk_activatable_set_related_action (GTK_ACTIVATABLE (button), action2);
60         gtk_container_add (GTK_CONTAINER (grid), button);
61 
62 	button = gtk_menu_button_new ();
63         gtk_container_add (GTK_CONTAINER (grid), button);
64 
65 	menu = gtk_menu_new ();
66         gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
67         gtk_menu_set_accel_path (GTK_MENU (menu), "<menu>/TEST");
68 
69 	gtk_menu_button_set_popup (GTK_MENU_BUTTON (button), menu);
70 
71 	/* plain old stock menuitem */
72 	item = gtk_image_menu_item_new_from_stock (GTK_STOCK_DELETE, NULL);
73 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
74 
75 	/* gtk_image_menu_item_set_always_show_image still works */
76 	item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLOSE, accel_group);
77 	gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (item), TRUE);
78 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
79 
80 	/* new-style menuitem with image */
81 	item = gtk_menu_item_new ();
82 	box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
83 	gtk_container_add (GTK_CONTAINER (item), box);
84 	gtk_container_add (GTK_CONTAINER (box), gtk_image_new_from_icon_name ("edit-clear", GTK_ICON_SIZE_MENU));
85         label = gtk_accel_label_new ("C_lear");
86         gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
87         gtk_label_set_xalign (GTK_LABEL (label), 0.0);
88         gtk_widget_set_halign (label, GTK_ALIGN_FILL);
89 
90         gtk_widget_add_accelerator (item, "activate", accel_group,
91                                     GDK_KEY_x, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
92         gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), item);
93 	gtk_box_pack_end (GTK_BOX (box), label, TRUE, TRUE, 0);
94 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
95 
96 	/* GtkAction-backed menuitem */
97 	item = gtk_image_menu_item_new ();
98 	gtk_activatable_set_related_action (GTK_ACTIVATABLE (item), action1);
99 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
100 
101 	/* gtk_action_set_always_show_image still works for menuitems */
102 	item = gtk_image_menu_item_new ();
103 	gtk_activatable_set_related_action (GTK_ACTIVATABLE (item), action2);
104 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
105 
106 	gtk_widget_show_all (menu);
107 
108 	gtk_widget_show_all (window);
109 
110 	gtk_main ();
111 
112 	return 0;
113 }
114