1 #include <gtk/gtk.h>
2
3 static void
activate(GSimpleAction * action,GVariant * parameter,gpointer user_data)4 activate (GSimpleAction *action,
5 GVariant *parameter,
6 gpointer user_data)
7 {
8 g_print ("%s activated\n", g_action_get_name (G_ACTION (action)));
9 }
10
11 static GActionEntry entries[] = {
12 { "cut", activate, NULL, NULL, NULL },
13 { "copy", activate, NULL, NULL, NULL },
14 { "paste", activate, NULL, NULL, NULL },
15 { "bold", NULL, NULL, "false", NULL },
16 { "italic", NULL, NULL, "false", NULL },
17 { "strikethrough", NULL, NULL, "false", NULL },
18 { "underline", NULL, NULL, "false", NULL },
19 { "set-view", NULL, "s", "'list'", NULL },
20 { "action1", activate, NULL, NULL, NULL },
21 { "action2", NULL, NULL, "true", NULL },
22 { "action2a", NULL, NULL, "false", NULL },
23 { "action3", NULL, "s", "'three'", NULL },
24 { "action4", activate, NULL, NULL, NULL },
25 { "action5", activate, NULL, NULL, NULL },
26 { "action6", activate, NULL, NULL, NULL },
27 { "action7", activate, NULL, NULL, NULL },
28 { "action8", activate, NULL, NULL, NULL },
29 { "action9", activate, NULL, NULL, NULL },
30 { "action10", activate, NULL, NULL, NULL }
31 };
32
33 int
main(int argc,char * argv[])34 main (int argc, char *argv[])
35 {
36 GtkWidget *win;
37 GtkWidget *box;
38 GtkWidget *button;
39 GtkWidget *button2;
40 GtkBuilder *builder;
41 GMenuModel *model;
42 GSimpleActionGroup *actions;
43 GtkWidget *overlay;
44 GtkWidget *grid;
45 GtkWidget *popover;
46 GtkWidget *popover2;
47 GtkWidget *label;
48 GtkWidget *check;
49 GtkWidget *combo;
50 GtkWidget *header_bar;
51
52 gtk_init (&argc, &argv);
53
54 win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
55 gtk_window_set_default_size (GTK_WINDOW (win), 400, 600);
56 header_bar = gtk_header_bar_new ();
57 gtk_header_bar_set_show_close_button (GTK_HEADER_BAR (header_bar), TRUE);
58 gtk_window_set_titlebar (GTK_WINDOW (win), header_bar);
59 gtk_window_set_title (GTK_WINDOW (win), "Test GtkPopover");
60 actions = g_simple_action_group_new ();
61 g_action_map_add_action_entries (G_ACTION_MAP (actions), entries, G_N_ELEMENTS (entries), NULL);
62
63 gtk_widget_insert_action_group (win, "top", G_ACTION_GROUP (actions));
64
65 overlay = gtk_overlay_new ();
66 gtk_container_add (GTK_CONTAINER (win), overlay);
67
68 grid = gtk_grid_new ();
69 gtk_widget_set_halign (grid, GTK_ALIGN_FILL);
70 gtk_widget_set_valign (grid, GTK_ALIGN_FILL);
71 gtk_grid_set_row_spacing (GTK_GRID (grid), 10);
72 gtk_grid_set_column_spacing (GTK_GRID (grid), 10);
73 gtk_container_add (GTK_CONTAINER (overlay), grid);
74
75 label = gtk_label_new ("");
76 gtk_widget_set_hexpand (label, TRUE);
77 gtk_widget_set_vexpand (label, TRUE);
78 gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
79
80 label = gtk_label_new ("");
81 gtk_widget_set_hexpand (label, TRUE);
82 gtk_widget_set_vexpand (label, TRUE);
83 gtk_grid_attach (GTK_GRID (grid), label, 3, 6, 1, 1);
84
85 builder = gtk_builder_new_from_file ("popover.ui");
86 model = (GMenuModel *)gtk_builder_get_object (builder, "menu");
87
88 box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
89 button = gtk_menu_button_new ();
90 gtk_container_add (GTK_CONTAINER (box), button);
91 button2 = gtk_menu_button_new ();
92 gtk_container_add (GTK_CONTAINER (box), button2);
93
94 gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), model);
95 gtk_menu_button_set_use_popover (GTK_MENU_BUTTON (button), TRUE);
96 popover = GTK_WIDGET (gtk_menu_button_get_popover (GTK_MENU_BUTTON (button)));
97
98 builder = gtk_builder_new_from_file ("popover2.ui");
99 popover2 = (GtkWidget *)gtk_builder_get_object (builder, "popover");
100 gtk_menu_button_set_popover (GTK_MENU_BUTTON (button2), popover2);
101
102 g_object_set (box, "margin", 10, NULL);
103 gtk_overlay_add_overlay (GTK_OVERLAY (overlay), box);
104
105 label = gtk_label_new ("Popover hexpand");
106 check = gtk_check_button_new ();
107 g_object_bind_property (check, "active", popover, "hexpand", G_BINDING_SYNC_CREATE);
108 g_object_bind_property (check, "active", popover2, "hexpand", G_BINDING_SYNC_CREATE);
109 gtk_grid_attach (GTK_GRID (grid), label , 1, 1, 1, 1);
110 gtk_grid_attach (GTK_GRID (grid), check, 2, 1, 1, 1);
111
112 label = gtk_label_new ("Popover vexpand");
113 check = gtk_check_button_new ();
114 g_object_bind_property (check, "active", popover, "vexpand", G_BINDING_SYNC_CREATE);
115 g_object_bind_property (check, "active", popover2, "vexpand", G_BINDING_SYNC_CREATE);
116 gtk_grid_attach (GTK_GRID (grid), label , 1, 2, 1, 1);
117 gtk_grid_attach (GTK_GRID (grid), check, 2, 2, 1, 1);
118
119 label = gtk_label_new ("Button direction");
120 combo = gtk_combo_box_text_new ();
121 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "up", "Up");
122 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "down", "Down");
123 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "left", "Left");
124 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "right", "Right");
125 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
126 g_object_bind_property (combo, "active", button, "direction", G_BINDING_SYNC_CREATE);
127 g_object_bind_property (combo, "active", button2, "direction", G_BINDING_SYNC_CREATE);
128 gtk_grid_attach (GTK_GRID (grid), label , 1, 3, 1, 1);
129 gtk_grid_attach (GTK_GRID (grid), combo, 2, 3, 1, 1);
130
131 label = gtk_label_new ("Button halign");
132 combo = gtk_combo_box_text_new ();
133 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "fill", "Fill");
134 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "start", "Start");
135 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "end", "End");
136 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center", "Center");
137 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 2);
138 g_object_bind_property (combo, "active", box, "halign", G_BINDING_SYNC_CREATE);
139 gtk_grid_attach (GTK_GRID (grid), label , 1, 4, 1, 1);
140 gtk_grid_attach (GTK_GRID (grid), combo, 2, 4, 1, 1);
141
142 label = gtk_label_new ("Button valign");
143 combo = gtk_combo_box_text_new ();
144 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "fill", "Fill");
145 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "start", "Start");
146 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "end", "End");
147 gtk_combo_box_text_append (GTK_COMBO_BOX_TEXT (combo), "center", "Center");
148 gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 1);
149 g_object_bind_property (combo, "active", box, "valign", G_BINDING_SYNC_CREATE);
150 gtk_grid_attach (GTK_GRID (grid), label , 1, 5, 1, 1);
151 gtk_grid_attach (GTK_GRID (grid), combo, 2, 5, 1, 1);
152
153
154 gtk_widget_show_all (win);
155
156 gtk_main ();
157
158 return 0;
159 }
160