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
>   

_______________________________________________
Gnome-accessibility-devel mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel

Reply via email to