GNOME Bugzilla – Bug 569430
Gail should include a reciprocal relationship for NODE_CHILD_OF
Last modified: 2009-11-09 03:16:11 UTC
+++ This bug was initially created as a clone of Bug #569428 +++ +++ This bug was initially created as a clone of Bug #569427 +++ A screen reader providing access to an expanded item in a tree level is expected to include the number of items contained/displayed by that expanded node. In a tree which manages its descendants, the items contained in the expanded node are not children in the accessible hierarchy. Therefore, the only way to determine the number of *functional*/displayed children of an expanded node is to traverse the tree row by row looking for the NODE_CHILD_OF relationship and seeing if it happens to point to the expanded item under consideration. This is at best tedious and slow. In enormous trees in which most items are expanded, the system can grind to a halt. Literally. Here are some sample numbers taken by using Orca and navigating amongst items in gconf-editor. * "new way" == addition of a NODE_PARENT_OF relationship added to Atk, AT-SPI, and Gtk+/Gail and then used in Orca. * "old way" == current state of affairs * The second number is the number of immediate child nodes (i.e. the objects which exposed NODE_CHILD_OF for the object of interest. * The final number if the number of seconds it took Orca to obtain the number of immediate child nodes. =========================== new way 9 0.000730991363525 old way 9 23.5638701916 =========================== new way 2 0.000731945037842 old way 2 1.25174307823 =========================== new way 4 0.000732898712158 old way 4 0.757242918015 =========================== new way 1 0.000734090805054 old way 1 6.57471394539 =========================== new way 2 0.00074291229248 old way 2 5.74261903763 =========================== new way 1 0.000736951828003 old way 1 6.61324715614 =========================== new way 1 0.000760793685913 old way 1 38.6404290199 Personally I think the performance improvement is staggering and would ask that you seriously and immediately consider implementing such a relationship. Thank you very much in advance for your consideration!
Created attachment 127381 [details] [review] The patch I used in my tests. This is the patch I used in my tests (in conjunction with the patches I've attached to the corresponding Atk and AT-SPI bugs which block this bug). I marked it as needs-work because every once in a while, the relationship wasn't appearing in gconf-editor. I don't know if that's a Gail thing or an Orca thing. And at 2:30 AM I'm too tired to debug further atm. But I will investigate further. I also don't know if this is the "right" way to do things. However, given the performance improvement I'm seeing, it would be awesome if this could be given some attention -- either by fixing my patch or by telling me what I should be doing/doing differently. Thanks much in advance!!
Li - what are your thoughts on this? I think this would be a great addition for 2.28.
Review of attachment 127381 [details] [review]: Patch has been committed. Thanks for the patch!
gtk+ FTBFS now here: /bin/bash ../../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../../.. -I../../.. -I../../../modules/other -I../../../gdk -I../../../gdk -I../../../gtk -I../../../gtk -DGTK_VERSION=\"2.19.1\" -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DG_DISABLE_SINGLE_INCLUDES -DATK_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -pthread -I/opt/gnome2/include/glib-2.0 -I/opt/gnome2/lib/glib-2.0/include -I/opt/gnome2/include/pango-1.0 -I/opt/gnome2/include/cairo -I/opt/gnome2/include/pixman-1 -I/opt/gnome2/include/atk-1.0 -I/usr/include/freetype2 -I/usr/include/libpng12 -DG_ENABLE_DEBUG -DG_ERRORCHECK_MUTEXES -DGDK_PIXBUF_DISABLE_DEPRECATED -g -O2 -g -Wall -MT libgail_la-gailtreeview.lo -MD -MP -MF .deps/libgail_la-gailtreeview.Tpo -c -o libgail_la-gailtreeview.lo `test -f 'gailtreeview.c' || echo './'`gailtreeview.c libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../.. -I../../.. -I../../../modules/other -I../../../gdk -I../../../gdk -I../../../gtk -I../../../gtk -DGTK_VERSION=\"2.19.1\" -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DG_DISABLE_SINGLE_INCLUDES -DATK_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -pthread -I/opt/gnome2/include/glib-2.0 -I/opt/gnome2/lib/glib-2.0/include -I/opt/gnome2/include/pango-1.0 -I/opt/gnome2/include/cairo -I/opt/gnome2/include/pixman-1 -I/opt/gnome2/include/atk-1.0 -I/usr/include/freetype2 -I/usr/include/libpng12 -DG_ENABLE_DEBUG -DG_ERRORCHECK_MUTEXES -DGDK_PIXBUF_DISABLE_DEPRECATED -g -O2 -g -Wall -MT libgail_la-gailtreeview.lo -MD -MP -MF .deps/libgail_la-gailtreeview.Tpo -c gailtreeview.c -fPIC -DPIC -o .libs/libgail_la-gailtreeview.o gailtreeview.c: In function ‘gail_tree_view_ref_child’: gailtreeview.c:1030: error: ‘ATK_RELATION_NODE_PARENT_OF’ undeclared (first use in this function) gailtreeview.c:1030: error: (Each undeclared identifier is reported only once gailtreeview.c:1030: error: for each function it appears in.) make[5]: *** [libgail_la-gailtreeview.lo] Error 1
Looks like ATK_RELATION_NODE_PARENT_OF has just been added to atk, gtk+ will need to bump the minimun dependency once there's a new atk release I guess.
Yes.