On Sun, 2006-11-05 at 18:31 +0100, Chris tophe wrote:
> click somewhere out of it. I tried around, this problem doesn't happen when > calling gtk_menu_popup in response to a widget's "button-press-event"/button > == 3 for example, only in "popup-menu" callback. Any idea to make this menu > go away normally? Thanks. 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 static void deactivatemenu(GtkMenuShell *menushell, gpointer user_data) { GtkWidget *attach_widget; (void) user_data; gtk_menu_popdown(GTK_MENU(menushell)); attach_widget = gtk_menu_get_attach_widget(GTK_MENU(menushell)); if (attach_widget) gtk_widget_set_state(attach_widget, GTK_STATE_NORMAL); } static gboolean tray_icon_button_press(EggTrayIcon *tray_icon, GdkEventButton *event, gpointer user_data) { (void) user_data; /* single click with the left mouse button */ if (event->type == GDK_BUTTON_PRESS && event->button == 1) { GtkMenu *menu; menu = make_left_click_menu(GTK_WIDGET(tray_icon)); g_signal_connect(menu, "deactivate", G_CALLBACK(deactivatemenu), NULL); gtk_menu_popup(menu, NULL, NULL, calc_menu_position, NULL, event->button, gdk_event_get_time((GdkEvent *) event)); gtk_widget_set_state(gtk_menu_get_attach_widget(menu), GTK_STATE_SELECTED); return TRUE; /* we handled the click */ } /* single click with the right mouse button */ if (event->type == GDK_BUTTON_PRESS && event->button == 3) { GtkMenu *menu; menu = make_right_click_menu(GTK_WIDGET(tray_icon)); g_signal_connect(menu, "deactivate", G_CALLBACK(deactivatemenu), NULL); gtk_menu_popup(menu, NULL, NULL, calc_menu_position, NULL, event->button, gdk_event_get_time((GdkEvent *) event)); gtk_widget_set_state(gtk_menu_get_attach_widget(menu), GTK_STATE_SELECTED); return TRUE; /* we handled the click */ } return FALSE; /* we did not handle the click (or whatever it was) */ } and the initialization code: ... tray_icon = egg_tray_icon_new("bælg"); event_box = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(tray_icon), event_box); w = gtk_label_new("Bælg"); gtk_container_add(GTK_CONTAINER(event_box), w); gtk_widget_show_all(GTK_WIDGET(tray_icon)); g_signal_connect(event_box, "button-press-event", G_CALLBACK(tray_icon_button_press), NULL); ... _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list