GNOME Bugzilla – Bug 446878
Orca causes pygtk application to generate GtkWarning messages.
Last modified: 2008-07-22 19:33:32 UTC
Steps to reproduce: (cellrenderer.py to be attached). Test #1. 1/ Start "python cellrenderer.py" 2/ Press Space 3/ Press Esc Results: Nothing unpleasant. Test #2. 1/ Start Orca 2/ Start "python cellrenderer.py" 3/ Press Space 4/ Press Esc Results: cellrenderer.py:35: GtkWarning: gtk_tree_store_get_path: assertion `iter->user_data != NULL' failed gtk.main() ** (cellrenderer.py:10695): WARNING **: get_visible_column_number failed for -1 This is probably a bug in atk/gail, but we got to start somewhere.
Created attachment 89835 [details] cellrenderer.py
I wonder if this might be something going wrong in GAIL? For example, I wonder if it's possible that the GAIL object for the GTK object is hanging onto some iterator when it shouldn't be.
I've opened bug #449757 against atk/gail for this problem (and for the Gtk-CRITICAL **: gtk_list_store_get_path: assertion `iter->stamp == GTK_LIST_STORE (tree_model)->stamp' failed problem). Marking as "[blocked]".
Possibly, it is Orca which makes some mistakes. In the function of default.py, orca commits some flaws, which exists from the row number 2170 to 2180. The logical flaw is presented as follow: In this function, when SPACE is pressed in the keyboard, focus moves onto a text, but when ESC is pressed, the focus has been moved to cell. While at present, oldLocusOfFocus.role is text, and oldLocusOfFocus.index=-1. However, Orca considers it as a cell.
In my opinion, orca should test if the oldLocusOfFocus is a cell. The Trace is:
+ Trace 157088
Created attachment 94148 [details] [review] Patch to fix the problem. You are indeed correct. I've created a patch to Orca to test that the old locus of focus is a table cell before trying to get the row and column index. I will now go ahead and commit this to SVN HEAD and the gnome-2-20 branch. Many thanks!
Patch committed to SVN HEAD and the gnome-2-20 branch. Putting the bug into "[pending]" state.
Ack! It looks like oldLocusOfFocus can be None: oldLocusOfFocus role: Traceback (most recent call last):
+ Trace 157248
s.processObjectEvent(event)
self.listeners[key](event)
orca.setLocusOfFocus(event, acc)
orca_state.locusOfFocus)
newLocusOfFocus)
print "oldLocusOfFocus role: ", oldLocusOfFocus.role
That means the if clause needs to become: if oldParent and oldParent.table and \ oldLocusOfFocus and \ oldLocusOfFocus.role == rolenames.ROLE_TABLE_CELL: I'll check in the slightly adjusted default.py's next.
> That means the if clause needs to become: > > if oldParent and oldParent.table and \ > oldLocusOfFocus and \ > oldLocusOfFocus.role == rolenames.ROLE_TABLE_CELL: I believe oldParent will be None if oldLocusOfFocus is None, so I'm not sure this change is necessary. I think the problem is just the debug line assuming oldLocusOfFocus is not None: "print "oldLocusOfFocus role: ", oldLocusOfFocus.role
You're right. Okay, I've removed that line from the two default.py's and committed it. Thanks.
I think we've all given this one some testing and it is OK to close.
Thanks Mike. Closing as FIXED.