On 03/01/2017 08:17 PM, David C. Rankin wrote:
> All,
> 
>   I have a menubar (working fine) and I want to attach a popup menu to that
> widget to "show/hide" a toolbar below it. I cannot figure out how to attach
> the popup to the 'menubar' itself generically.
> 
>     GtkWidget *evbox;           /* popup menu container */
>     GtkWidget *pmenu;         /* the menu */
>     GtkWidget *pshowtbMI;     /* the menu item */
> 
>   I've tried to attach the popup to the 'menubar' as a container with the
> following code:
> 
>     evbox = gtk_event_box_new();
>     gtk_container_add (GTK_CONTAINER(menubar), evbox);
>     pmenu = gtk_menu_new();
>     pshowtbMI = gtk_check_menu_item_new_with_label ("Show Toolbar");
>     gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(pshowtbMI), TRUE);
>     gtk_menu_shell_append (GTK_MENU_SHELL(pmenu), pshowtbMI);
>     g_signal_connect_swapped (G_OBJECT(evbox), "button-press-event",
>         G_CALLBACK(show_popup), pmenu);
>     g_signal_connect (G_OBJECT(pshowtbMI), "activate",
>         G_CALLBACK(menu_showtb_activate), app);
> 
>   The show_popup is a generic event-handler that responds to the right-mouse
> button (working fine).
> 
>   What can I do to provide a popup that will respond when I rt-click on a
> blank part of the menubar?
> 

Well,

  I have made progress. Rather than adding the eventbox container to the menu,
I added the menu to the eventbox container -- now the popup works fine when
right-clicking on the menubar... but clicking on the menus does not open them.
(the accelerators work fine and I can't open the menus with the menu
accelerators (e.g. Alt+F opens the file menu) I suspect this is a problem with
the event_box event-handler that catches the right-click but does not
propagate the left-click to the menu inside it.

  The current setup for the popup menu is:

    evbox = gtk_event_box_new();
    /* modified menu in container - popup works, but menu doesn't */
    gtk_container_add (GTK_CONTAINER(evbox), menubar);
    pmenu = gtk_menu_new();
    pshowtbMI = gtk_check_menu_item_new_with_label ("Show Toolbar");
    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(pshowtbMI), TRUE);
    gtk_menu_shell_append (GTK_MENU_SHELL(pmenu), pshowtbMI);
    /* modified menu in container - popup works, but menu doesn't */
    g_signal_connect_swapped (G_OBJECT(menubar), "button-press-event",
        G_CALLBACK(show_popup), pmenu);
    g_signal_connect (G_OBJECT(pshowtbMI), "activate",
        G_CALLBACK(menu_showtb_activate), app);

  The event handler I'm using 'show_popup' is:

    gboolean show_popup(GtkWidget *widget, GdkEvent *event)
    {
        const guint RIGHT_CLICK = 3;

        if (event->type == GDK_BUTTON_PRESS) {

            GdkEventButton *bevent = (GdkEventButton *) event;

            if (bevent->button == RIGHT_CLICK) {

                gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,
                    bevent->button, bevent->time);
            }
            return TRUE;
        }
        return FALSE;
    }

  Do I need to somehow explicitly pass the button-press-event to the menubar
within the event_box somehow?

-- 
David C. Rankin, J.D.,P.E.
_______________________________________________
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