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
> [email protected]
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
_______________________________________________
gtk-app-devel-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list