diff options
author | Lars Uebernickel <lars@uebernic.de> | 2012-09-13 13:10:24 -0400 |
---|---|---|
committer | Ryan Lortie <desrt@desrt.ca> | 2012-09-17 12:31:21 -0400 |
commit | 9480e215062dc8d0319414bc96bab60e85b7f7a0 (patch) | |
tree | 253b1a3dbd3433bbc2077cddadf8b4ccefe13407 /examples/action-namespace.c | |
parent | 722081a9efe8925fd41457a0039e120ffd1be2fa (diff) | |
download | gtk+-9480e215062dc8d0319414bc96bab60e85b7f7a0.tar.gz |
Add example for "action-namespace" attribute
Diffstat (limited to 'examples/action-namespace.c')
-rw-r--r-- | examples/action-namespace.c | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/examples/action-namespace.c b/examples/action-namespace.c new file mode 100644 index 0000000000..147633a676 --- /dev/null +++ b/examples/action-namespace.c @@ -0,0 +1,134 @@ +#include <gtk/gtk.h> + +static void +action_activated (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + GtkWindow *parent = user_data; + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (parent, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_INFO, + GTK_BUTTONS_CLOSE, + "Activated action `%s`", + g_action_get_name (G_ACTION (action))); + + g_signal_connect_swapped (dialog, "response", + G_CALLBACK (gtk_widget_destroy), dialog); + + gtk_widget_show_all (dialog); +} + +static GActionEntry doc_entries[] = { + { "save", action_activated }, + { "print", action_activated }, + { "share", action_activated } +}; + +static GActionEntry win_entries[] = { + { "fullscreen", action_activated }, + { "close", action_activated }, +}; + +const gchar *menu_ui = + "<interface>" + " <menu id='doc-menu'>" + " <section>" + " <item>" + " <attribute name='label'>_Save</attribute>" + " <attribute name='action'>save</attribute>" + " </item>" + " <item>" + " <attribute name='label'>_Print</attribute>" + " <attribute name='action'>print</attribute>" + " </item>" + " <item>" + " <attribute name='label'>_Share</attribute>" + " <attribute name='action'>share</attribute>" + " </item>" + " </section>" + " </menu>" + " <menu id='win-menu'>" + " <section>" + " <item>" + " <attribute name='label'>_Fullscreen</attribute>" + " <attribute name='action'>fullscreen</attribute>" + " </item>" + " <item>" + " <attribute name='label'>_Close</attribute>" + " <attribute name='action'>close</attribute>" + " </item>" + " </section>" + " </menu>" + "</interface>"; + +static void +activate (GApplication *app, + gpointer user_data) +{ + GtkWidget *win; + GtkWidget *button; + GSimpleActionGroup *doc_actions; + GtkBuilder *builder; + GMenuModel *doc_menu; + GMenuModel *win_menu; + GMenu *button_menu; + GMenuItem *section; + + if (gtk_application_get_windows (GTK_APPLICATION (app)) != NULL) + return; + + win = gtk_application_window_new (GTK_APPLICATION (app)); + + doc_actions = g_simple_action_group_new (); + g_simple_action_group_add_entries (doc_actions, doc_entries, + G_N_ELEMENTS (doc_entries), win); + + g_action_map_add_action_entries (G_ACTION_MAP (win), win_entries, + G_N_ELEMENTS (win_entries), win); + + builder = gtk_builder_new (); + gtk_builder_add_from_string (builder, menu_ui, -1, NULL); + + doc_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "doc-menu")); + win_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "win-menu")); + + button_menu = g_menu_new (); + + section = g_menu_item_new_section (NULL, doc_menu); + g_menu_item_set_attribute (section, "action-namespace", "s", "doc"); + g_menu_append_item (button_menu, section); + g_object_unref (section); + + section = g_menu_item_new_section (NULL, win_menu); + g_menu_item_set_attribute (section, "action-namespace", "s", "win"); + g_menu_append_item (button_menu, section); + g_object_unref (section); + + button = gtk_menu_button_new (); + gtk_button_set_label (GTK_BUTTON (button), "Menu"); + gtk_widget_insert_action_group (button, "doc", G_ACTION_GROUP (doc_actions)); + gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), G_MENU_MODEL (button_menu)); + + gtk_container_add (GTK_CONTAINER (win), button); + gtk_container_set_border_width (GTK_CONTAINER (win), 12); + gtk_widget_show_all (win); + + g_object_unref (button_menu); + g_object_unref (doc_actions); + g_object_unref (builder); +} + +int +main(int argc, + char **argv) +{ + GtkApplication *app; + + app = gtk_application_new ("org.gtk.Example", 0); + g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); + + return g_application_run (G_APPLICATION (app), argc, argv); +} |