4 action_activated (GSimpleAction *action,
8 GtkWindow *parent = user_data;
11 dialog = gtk_message_dialog_new (parent,
12 GTK_DIALOG_DESTROY_WITH_PARENT,
15 "Activated action `%s`",
16 g_action_get_name (G_ACTION (action)));
18 g_signal_connect_swapped (dialog, "response",
19 G_CALLBACK (gtk_widget_destroy), dialog);
21 gtk_widget_show_all (dialog);
24 static GActionEntry doc_entries[] = {
25 { "save", action_activated },
26 { "print", action_activated },
27 { "share", action_activated }
30 static GActionEntry win_entries[] = {
31 { "fullscreen", action_activated },
32 { "close", action_activated },
35 const gchar *menu_ui =
37 " <menu id='doc-menu'>"
40 " <attribute name='label'>_Save</attribute>"
41 " <attribute name='action'>save</attribute>"
44 " <attribute name='label'>_Print</attribute>"
45 " <attribute name='action'>print</attribute>"
48 " <attribute name='label'>_Share</attribute>"
49 " <attribute name='action'>share</attribute>"
53 " <menu id='win-menu'>"
56 " <attribute name='label'>_Fullscreen</attribute>"
57 " <attribute name='action'>fullscreen</attribute>"
60 " <attribute name='label'>_Close</attribute>"
61 " <attribute name='action'>close</attribute>"
68 activate (GApplication *app,
73 GSimpleActionGroup *doc_actions;
80 if (gtk_application_get_windows (GTK_APPLICATION (app)) != NULL)
83 win = gtk_application_window_new (GTK_APPLICATION (app));
85 doc_actions = g_simple_action_group_new ();
86 g_simple_action_group_add_entries (doc_actions, doc_entries,
87 G_N_ELEMENTS (doc_entries), win);
89 g_action_map_add_action_entries (G_ACTION_MAP (win), win_entries,
90 G_N_ELEMENTS (win_entries), win);
92 builder = gtk_builder_new ();
93 gtk_builder_add_from_string (builder, menu_ui, -1, NULL);
95 doc_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "doc-menu"));
96 win_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "win-menu"));
98 button_menu = g_menu_new ();
100 section = g_menu_item_new_section (NULL, doc_menu);
101 g_menu_item_set_attribute (section, "action-namespace", "s", "doc");
102 g_menu_append_item (button_menu, section);
103 g_object_unref (section);
105 section = g_menu_item_new_section (NULL, win_menu);
106 g_menu_item_set_attribute (section, "action-namespace", "s", "win");
107 g_menu_append_item (button_menu, section);
108 g_object_unref (section);
110 button = gtk_menu_button_new ();
111 gtk_button_set_label (GTK_BUTTON (button), "Menu");
112 gtk_widget_insert_action_group (button, "doc", G_ACTION_GROUP (doc_actions));
113 gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (button_menu));
115 gtk_container_add (GTK_CONTAINER (win), button);
116 gtk_container_set_border_width (GTK_CONTAINER (win), 12);
117 gtk_widget_show_all (win);
119 g_object_unref (button_menu);
120 g_object_unref (doc_actions);
121 g_object_unref (builder);
130 app = gtk_application_new ("org.gtk.Example", 0);
131 g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
133 return g_application_run (G_APPLICATION (app), argc, argv);