From 0b21d6a01c3f634280f2145d4e78daa90afbac6a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Fri, 24 Aug 2018 07:01:08 +0200 Subject: [PATCH] gtk-demo: Redo builder example to use shortcuts Now that shortcuts and controllers are supported by GtkBuilder, demo how all of that works. --- demos/gtk-demo/builder.c | 61 ++++++++++----------------------- demos/gtk-demo/demo.ui | 74 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 91 insertions(+), 44 deletions(-) diff --git a/demos/gtk-demo/builder.c b/demos/gtk-demo/builder.c index cf293c53cd..446fac6b9b 100644 --- a/demos/gtk-demo/builder.c +++ b/demos/gtk-demo/builder.c @@ -31,17 +31,27 @@ about_activate (GSimpleAction *action, } static void -help_activate (GSimpleAction *action, +menu_activate (GSimpleAction *action, GVariant *parameter, gpointer user_data) { - g_print ("Help not available\n"); + g_print ("%s action not available\n", g_action_get_name (G_ACTION (action))); } static GActionEntry win_entries[] = { { "quit", quit_activate, NULL, NULL, NULL }, { "about", about_activate, NULL, NULL, NULL }, - { "help", help_activate, NULL, NULL, NULL } + { "help", menu_activate, NULL, NULL, NULL } +}; + +static GActionEntry menu_entries[] = { + { "new", menu_activate, NULL, NULL, NULL }, + { "open", menu_activate, NULL, NULL, NULL }, + { "save", menu_activate, NULL, NULL, NULL }, + { "save_as", menu_activate, NULL, NULL, NULL }, + { "copy", menu_activate, NULL, NULL, NULL }, + { "cut", menu_activate, NULL, NULL, NULL }, + { "paste", menu_activate, NULL, NULL, NULL }, }; GtkWidget * @@ -50,8 +60,6 @@ do_builder (GtkWidget *do_widget) static GtkWidget *window = NULL; GtkWidget *toolbar; GActionGroup *actions; - GtkAccelGroup *accel_group; - GtkWidget *item; if (!window) { @@ -73,44 +81,11 @@ do_builder (GtkWidget *do_widget) win_entries, G_N_ELEMENTS (win_entries), window); gtk_widget_insert_action_group (window, "win", actions); - accel_group = gtk_accel_group_new (); - gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); - - item = (GtkWidget*)gtk_builder_get_object (builder, "new_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "open_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "save_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "quit_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "copy_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "cut_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_x, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "paste_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_v, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "help_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_F1, 0, GTK_ACCEL_VISIBLE); - - item = (GtkWidget*)gtk_builder_get_object (builder, "about_item"); - gtk_widget_add_accelerator (item, "activate", accel_group, - GDK_KEY_F7, 0, GTK_ACCEL_VISIBLE); + actions = (GActionGroup*)g_simple_action_group_new (); + g_action_map_add_action_entries (G_ACTION_MAP (actions), + menu_entries, G_N_ELEMENTS (menu_entries), + window); + gtk_widget_insert_action_group (window, "menu", actions); g_object_set_data_full (G_OBJECT(window), "builder", builder, g_object_unref); } diff --git a/demos/gtk-demo/demo.ui b/demos/gtk-demo/demo.ui index 6fa269822e..61646fa678 100644 --- a/demos/gtk-demo/demo.ui +++ b/demos/gtk-demo/demo.ui @@ -33,6 +33,72 @@ 250 440 Builder + + + global + capture + + + <Primary>n + action(menu.new) + + + + + <Primary>o + action(menu.open) + + + + + <Primary>s + action(menu.save) + + + + + <Primary><Shift>s + action(menu.save_as) + + + + + <Primary>q + action(win.quit) + + + + + <Primary>c + action(menu.copy) + + + + + <Primary>x + action(menu.cut) + + + + + <Primary>v + action(menu.paste) + + + + + F1 + action(win.help) + + + + + F7 + action(win.about) + + + + vertical @@ -53,25 +119,28 @@ _New 1 + menu.new _Open 1 + menu.open _Save 1 + menu.save Save _As 1 - + menu.save_as @@ -98,18 +167,21 @@ _Copy 1 + menu.copy _Cut 1 + menu.cut _Paste 1 + menu.paste