Marcin Lyko wrote: > I'm not soure if I understand you, but if you change > is_attached_menu_window function from gailtoplevel so as to it always > returns FALSE, an attached menu is detected normally. > This is *not* the correct solution; if you change is_attached_menu_window, the attached menu appears at the wrong place in the at-spi hierarchy.
So, the problem is not in is_attached_menu_window - the window should NOT appear there, it should appear elsewhere, as a child of the widget to which it is attached. Bill > Marcin > > >> It looks to me as though gailwidget should be detecting when/whether >> gtk_menu_attach_to_widget has been called, and modifying >> gail_widget_ref_child accordingly... I am not sure offhand if we can >> detect the presence of an attached menu, but I would expect gtk+ to >> provide some API for it (perhaps as a GObject property?) >> >> Bill >> >> Marcin Lyko wrote: >> >> >>>> Do you have a small test program which illustrates the problem? >>>> >>>> >>> A test program which illustrates the problem you can find in the >>> attachment. In the program menu is attached to "popup menu" button and >>> it isn't seen by at-spi after its popup. >>> >>> >>> >>> >>>> You could log a bug at http://bugzilla.gnome.org against atk/gail. >>>> >>>> >>> I raport the bug soon. >>> >>> Marcin >>> >>> >>> -- >>> Empowering business >>> http://webinars.comarch.com >>> >>> ------------------------------------------------------------------------ >>> >>> #include <gtk/gtk.h> >>> >>> static gboolean close_app_cb( GtkWidget *widget, GdkEvent *event, >>> gpointer data ) >>> { >>> gtk_main_quit (); >>> >>> return FALSE; >>> } >>> >>> static void popup_menu_cb( GtkWidget *widget, gpointer data ) >>> { >>> GtkWidget *menu = (GtkWidget *) data; >>> >>> gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 1, >>> gtk_get_current_event_time ()); >>> } >>> >>> static void items_cb( GtkWidget *widget, gpointer data ) >>> { >>> g_print ("%s clicked...\n", (gchar *) data); >>> } >>> >>> void detacher_menu (GtkWidget *widget, GtkMenu *menu) >>> { >>> g_print ("detacher menu\n"); >>> } >>> >>> static GtkMenu *create_menu(void) >>> { >>> GtkMenu *menu = NULL; >>> GtkWidget *item = NULL; >>> >>> menu = GTK_MENU (gtk_menu_new ()); >>> >>> if (menu->toplevel) >>> { >>> GdkGeometry geometry = {0}; >>> geometry.win_gravity = GDK_GRAVITY_NORTH_EAST; >>> gtk_window_set_geometry_hints (GTK_WINDOW (menu->toplevel), >>> GTK_WIDGET >>> (menu->toplevel), >>> &geometry, >>> GDK_HINT_WIN_GRAVITY); >>> } >>> >>> item = gtk_menu_item_new_with_label ( "First item" ); >>> gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); >>> g_signal_connect (item, "activate", G_CALLBACK (items_cb), >>> (gpointer) "First item"); >>> >>> item = gtk_menu_item_new_with_label ( "Second item" ); >>> gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); >>> g_signal_connect (item, "activate", G_CALLBACK (items_cb), >>> (gpointer) "Second item"); >>> >>> item = gtk_menu_item_new_with_label ( "Third item" ); >>> gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); >>> g_signal_connect (item, "activate", G_CALLBACK (items_cb), >>> (gpointer) "Third item"); >>> >>> gtk_widget_show_all (GTK_WIDGET (menu)); >>> >>> return menu; >>> } >>> >>> int main (int argc, char *argv[]) >>> { >>> GtkWidget *window; >>> GtkWidget *vbox; >>> GtkWidget *label; >>> GtkWidget *button; >>> GtkWidget *menu; >>> >>> gtk_init (&argc, &argv); >>> >>> window = gtk_window_new (GTK_WINDOW_TOPLEVEL); >>> g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK >>> (close_app_cb), NULL); >>> gtk_container_set_border_width (GTK_CONTAINER (window), 10); >>> >>> vbox = gtk_vbox_new (FALSE, 5); >>> gtk_container_add (GTK_CONTAINER (window), vbox); >>> >>> label = gtk_label_new( "Some label" ); >>> gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(label), TRUE, TRUE, 0); >>> >>> menu = (GtkWidget *) create_menu(); >>> >>> button = gtk_button_new_with_label ("Popup menu"); >>> gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(button), TRUE, TRUE, 0); >>> g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK >>> (popup_menu_cb), (gpointer) menu); >>> >>> gtk_menu_attach_to_widget (GTK_MENU(menu), GTK_WIDGET(button), >>> detacher_menu); >>> >>> gtk_widget_show_all (GTK_WIDGET(window)); >>> >>> gtk_main (); >>> >>> return 0; >>> } >>> >>> ------------------------------------------------------------------------ >>> >>> _______________________________________________ >>> Gnome-accessibility-devel mailing list >>> [email protected] >>> http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel >>> >>> >> >> > > > -- > Empowering business > http://webinars.comarch.com > _______________________________________________ Gnome-accessibility-devel mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel
