Oh no sorry. It not working. I had just defined the <Primary>t
accelerator in the activate function of the app.

If I change it to e.g. <Primary>b the accelerator doesn't work.


Am 07.02.2018 um 23:19 schrieb Alexander Koeppe:
> Hi infirit,
>
> crazy. I rebuilt the relevant parts in a demo app and there it's working
> as expected. *argh*.
> For completeness here's what I mean.
>
> The code that creates my GtkNotebook:
>
>       /* notebook */
>       notebook = gtk_notebook_new();
>       gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_TOP);
>       gtk_notebook_set_scrollable(GTK_NOTEBOOK(notebook), TRUE);
>       gtk_container_add(GTK_CONTAINER(frame), notebook);
>
>       /* notebook page 1 */
>       label = gtk_label_new("Tab1");
>       gtk_widget_show(label);
>       page = gtk_frame_new("Content1");
>       gtk_widget_show(page);
>       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
>
>       /* notebook page 2 */
>       label = gtk_label_new("Tab2");
>       gtk_widget_show(label);
>       page = gtk_frame_new("Content2");
>       gtk_widget_show(page);
>       gtk_notebook_append_page(GTK_NOTEBOOK(notebook), page, label);
>
>       create_tab_menu(notebook);
>
>
>
> And this is the content of the create_tab_menu() function to create the
> context menu of the tab, that actually contains the action to be
> triggered by the accelerator:
>
>     void create_tab_menu(GtkWidget *notebook)
>     {
>        GtkWidget *menu;
>        GtkBuilder *builder;
>        GSimpleActionGroup *actiongroup;
>        int i;
>        struct accel_map {
>           char *action;
>           const char * const accel[2];
>        };
>
>        /* define actions */
>        static GActionEntry tab_actions[] = {
>           {"test_action", test_cb, NULL, NULL, NULL, {}}
>        };
>
>        /* define accelerators */
>        static struct accel_map tab_accels[] = {
>           {"tab.test_action", {"<Primary>t", NULL}}
>        };
>
>        /* define menu structure */
>        builder = gtk_builder_new();
>        gtk_builder_add_from_string(builder,
>              "<interface>"
>              "  <menu id='tab-menu'>"
>              "    <section>"
>              "      <item>"
>              "        <attribute name='label'>Test Action</attribute>"
>              "        <attribute name='action'>tab.test_action</attribute>"
>              "        <attribute
>     name='icon'>weather-clear-symbolic</attribute>"
>              "      </item>"
>              "    </section>"
>              "  </menu>"
>              "</interface>", -1, NULL);
>
>        /* create actiongroup and map actions */
>        actiongroup = g_simple_action_group_new();
>        g_action_map_add_action_entries(G_ACTION_MAP(actiongroup),
>     tab_actions,
>              G_N_ELEMENTS(tab_actions), NULL);
>
>        /* map accelerators to actions */
>        for (i = 0; i < G_N_ELEMENTS(tab_accels); i++)
>           gtk_application_set_accels_for_action(GTK_APPLICATION(app),
>                 tab_accels[i].action, tab_accels[i].accel);
>
>        /* create new GtkMenu from GtkBuilder */
>        menu =
>     gtk_menu_new_from_model(G_MENU_MODEL(gtk_builder_get_object(builder,
>     "tab-menu")));
>
>        /* insert action group into menu */
>        gtk_widget_insert_action_group(menu, "tab",
>     G_ACTION_GROUP(actiongroup));
>
>        /* connect tab menu to right-click handler of notebook */
>        g_signal_connect(G_OBJECT(notebook), "button-press-event",
>     G_CALLBACK(context_cb), menu);
>
>        g_object_unref(builder);
>
>     }
>
>
>
>
> And for completeness the right-click handler:
>
>     gboolean context_cb(GtkWidget *notebook, GdkEventButton *event,
>     gpointer data)
>     {
>        (void) notebook;
>
>        if (event->button == 3) {
>           gtk_menu_popup_at_pointer(GTK_MENU(data), (GdkEvent*)event);
>           return TRUE;
>        }
>
>        return FALSE;
>     }
>
>
>
> However, I'm afraid I'm back on my own and just have to find where it
> goes wrong in my application.
>
> Thanks
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to