2006/11/7, Peter Lund <[EMAIL PROTECTED]>:

The program I wrote earlier this year just uses the "button-press-event"
> signal.  In the handler I create a menu and connect a deactivation function
> to its "deactive" signal.
>
> Seems to work fine.
>
> -Peter
>

Thanks for your answer. I can't do this :

        event_box = gtk_event_box_new();
        gtk_container_add(GTK_CONTAINER(tray_icon), event_box);


Because GtkStatusIcon is not a widget.
Here is some example code that shows my problem :

int button_press_event_callback(GtkWidget* widget, GdkEvent* event)
{
    GdkEventButton* event_button;

    if(event->type == GDK_BUTTON_PRESS)
    {
        event_button = (GdkEventButton*)event;
        if(event_button->button == 3)
        {
            /* this menu behaves normally */
            gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL,
                event_button->button, event_button->time);
            return TRUE;
        }
    }

    return FALSE;
}

void popup_callback(GtkStatusIcon* icon, guint button, guint activate_time,
gpointer data)
{
    /* this menu won't go away */
    gtk_menu_popup(GTK_MENU(data), NULL, NULL, NULL, NULL, button,
activate_time);
}

int main(int argc, char* argv[])
{
    GtkWidget* window;
    GtkWidget* button;
    GtkStatusIcon* trayicon;
    GtkWidget* menu;
    GtkWidget* menuitem;

    gtk_init(&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    button = gtk_button_new_with_label("button");
    gtk_container_add(GTK_CONTAINER(window), button);

    trayicon = gtk_status_icon_new_from_file("some-nice-pic");

    menu = gtk_menu_new();
    menuitem = gtk_menu_item_new_with_label("hello");
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
    gtk_widget_show(menuitem);

    g_signal_connect(G_OBJECT(trayicon), "popup-menu",
G_CALLBACK(popup_callback), G_OBJECT(menu));
    g_signal_connect_swapped(G_OBJECT(button), "button-press-event",
G_CALLBACK(button_press_event_callback), G_OBJECT(menu));

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to