forked from AuroraMiddleware/gtk
Add example for "action-namespace" attribute
This commit is contained in:
parent
722081a9ef
commit
9480e21506
@ -55,6 +55,7 @@ noinst_PROGRAMS = \
|
||||
bloatpad \
|
||||
plugman \
|
||||
sunny \
|
||||
action-namespace \
|
||||
grid-packing \
|
||||
drawing \
|
||||
builder
|
||||
|
134
examples/action-namespace.c
Normal file
134
examples/action-namespace.c
Normal file
@ -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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user