GNOME Bugzilla – Bug 517127
Orca doesn't always speak expected message when selecting all
Last modified: 2008-05-20 17:14:28 UTC
====== Test 1 ====== 1. In a new Gedit document type: The quick brown fox jumped over the lazy dog. 2. Press Control + Home to move to the beginning of the document. 3. Press Control + A to select the entire document Expected results: Orca would say 'Entire document selected' Actual results: Orca says nothing. 4. Press Right Arrow once to move one character away from the beginning. 5. Press Control + A to select the entire document. Expected/Actual results: Orca says 'Entire document selected' Note: It seems that as long as the caret is NOT at the very beginning of the document, things work as expected. ====== Test 2 ====== Repeat test 1 for OOo Writer. Expected results: Orca would say 'Enter document selected' each time Control + A was pressed. Actual results: Orca says nothing.
The code which causes us to "do the right thang" is at the end of _presentTextAtNewCaretPosition() in default.py. Because Rich is going to become extremely familiar with that code as part of bug #517048.... ;-) Rich, I'm assigning this one to you so that it's on your radar. Hope you don't mind. (And if you do mind, feel free to reassign to me). Thanks! As a related aside, while the hard coding of Control+A will ultimately be removed as part of the "add smarts" bug (bug #510231), the logic of identifying whether or not the entire document has been selected will still be needed -- and apparently that logic is broken. :-( We've talked about the add smarts bug being something for GNOME 2.23; I personally think it would be nice to fix this (the select all) bug for GNOME 2.22.
Created attachment 105594 [details] Orca debug output whilst testing this problem. This looks like an atk bug. Case #1 - Control-Home, Control-a The problem here is that we process an "object:text-caret-moved" event after the Control-Home (line 272) and speak: SPEECH OUTPUT: 'The quick brown fox' Then we type Control-a (line 315), but we don't get any events generated. The selection state of the text has changed. We should be at least getting an "object:selection-changed" event. Case #2 - Right Arrow, Control-a (line 442) We press the right arrow key (line 353) and get an "object:text-caret-moved" event that we process (line 375) and speak: SPEECH OUTPUT: 'h' Then we type Control-a (line 387) and we process another object:text-caret-moved" event (line 421) and speak: SPEECH OUTPUT: 'entire document selected' Will, do you concur?
In looking at the events we get via accerciser, it looks like gedit is emitting a "object:text-selection-changed" event when one does a Ctrl+a. I don't see us listening for this event anywhere in Orca, so that might be a core part of the problem.
Created attachment 105608 [details] [review] Patch to add a handler for "object:text-selection-changed" events. Well, unfortunately it's not going to be simple and straightforward. I initially just tried mapping "object:text-selection-changed" events into the onSelectionChanged() method but the problem there is that the event.source is the same as orca_state.locusOfFocus so nothing was being spoken. So I adjusted it to call a new routine and forced orca_state.locusOfFocus to None before calling orca.setLocusOfFocus() and that does the correct thing in this case, but the problem there is that there are other similar event ("object:text-caret-moved" for example), that then cause speech repetition. It might be a case of adding extra code into onCaretMoved() to prevent that speech repetition. I also tried calling self._presentTextAtNewCaretPosition() in the new onTextSelectionChanged() method, but there are similar problems. One possibility is to just do this in the gedit.py script, but again, we are going to have to add in more checks to prevent repetition. In short, I don't think this is a simple quick fix (unless there is something obvious I'm missing). I suggest we investigate it further for GNOME 2.23.X
First coarse pass at GNOME 2.24 planning.
Created attachment 110170 [details] Orca debug generated when using "needs-work" patch So that we have a starting point for when Will and i talk about this later today. The attached debug.out was generated by latest Orca when the previous patch (attachment 105608 [details] [review]) was applied. I'd previous started gedit and put those two lines of text from the initial bug description in it. The debug run shows: 1/ Pressing Control-Home to get to start of document (line 247) 2/ Pressing Control-A to select the entire document (line 316) 3/ Processing the new "object:text-selection-changed" event (line 335).
Created attachment 110178 [details] [review] Revision #1. Will and I chatted about this. The "first cut" at this is to adjust the code at the end of the onCaretMoved method. If there are one or more text selections, then we are expecting that there will be a following "object:text-selection-changed" event, and we will present the text at the new caret position in that handler. This change fixes this immediate bug. What I now need to determine is what effect it's had on the various issues in bug #517048, and from that see what extra work needs to be done.
Created attachment 110188 [details] gtk-demo regression test results after applying the patch in attachment 110178 [details] [review] Commentary to follow.
Created attachment 110189 [details] oowriter regression test results after applying the patch in attachment 110178 [details] [review] Commentary to follow.
Created attachment 110191 [details] oocalc regression test results applying applying the patch in attachment 110178 [details] [review] Commentary to follow.
I backed off from testing the state of the issues in bug #517048, and decided to see what broke in the gtk-demo, oowriter and oocalc regression tests, when just this simple change in the last patch was applied. The following gtk-demo regression tests failed: SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_dialog.py SUMMARY: 6 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_icon.py SUMMARY: 3 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_page_tab.py SUMMARY: 3 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_push_button.py SUMMARY: 3 SUCCEEDED and 2 FAILED (0 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_radio_button.py SUMMARY: 5 SUCCEEDED and 2 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_spin_button.py SUMMARY: 6 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_table.py SUMMARY: 10 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline.py SUMMARY: 4 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_toggle_button.py SUMMARY: 5 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 6 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_toolbar.py SUMMARY: 13 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 14 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_tree_table.py The following oowriter regression tests failed: SUMMARY: 1 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_361747.py SUMMARY: 0 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_382408.py SUMMARY: 0 SUCCEEDED and 5 FAILED (5 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_382415.py SUMMARY: 0 SUCCEEDED and 8 FAILED (8 UNEXPECTED) of 8 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_382880.py SUMMARY: 0 SUCCEEDED and 8 FAILED (8 UNEXPECTED) of 8 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_382888.py SUMMARY: 2 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 3 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_384893.py SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_413909.py SUMMARY: 0 SUCCEEDED and 5 FAILED (5 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_435201.py SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_469367.py The following oocalc regression tests failed: SUMMARY: 0 SUCCEEDED and 4 FAILED (4 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_356334.py SUMMARY: 2 SUCCEEDED and 8 FAILED (8 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_361167.py SUMMARY: 0 SUCCEEDED and 6 FAILED (6 UNEXPECTED) of 6 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_363802.py SUMMARY: 0 SUCCEEDED and 6 FAILED (6 UNEXPECTED) of 6 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_363804.py SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_364086.py SUMMARY: 1 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 3 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_364407.py SUMMARY: 0 SUCCEEDED and 4 FAILED (4 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_433398.py SUMMARY: 0 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_435307.py I'll now analyze the results in more detail.
Created attachment 110226 [details] Analysis of the gtk-demo regression test failures. See the comments at the beginning of this attachment for a breakdown of the different types of failures. Still need to determine if these failures are acceptable differences (i.e. adjust the regression test results) or whether the change made needs to be further refined.
Joanie suggested I run the regression tests without my patch and see what I get. I just tried the role_dialog.py one, and it fails with the same differences (WITHOUT MY PATCH). So I'm now going to run the failing regression tests without my patch, then with my patch and see if I can work out the differences in the differences. Sigh.
Created attachment 110230 [details] gtk-demo regression test results WITHOUT applying the patch in this bug. There are differences, but a lot of the failures already exists pre-patch. SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_dialog.py SUMMARY: 6 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_icon.py SUMMARY: 8 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py SUMMARY: 3 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_page_tab.py SUMMARY: 3 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_push_button.py SUMMARY: 3 SUCCEEDED and 2 FAILED (0 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_radio_button.py SUMMARY: 5 SUCCEEDED and 2 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_spin_button.py SUMMARY: 6 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_table.py SUMMARY: 4 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_toggle_button.py SUMMARY: 5 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 6 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_toolbar.py SUMMARY: 13 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 14 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_tree_table.py
Ignoring the regression test failures caused even though the patch wasn't applied, we are left with the following differences (which all seem similar): Test 4 of 9 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py:This message box label caret movement to 'h' DIFFERENCES FOUND: + BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' + VISIBLE: 'This message box has been popped', cursor=1 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=1 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'h' [FAILURE WAS UNEXPECTED] ---- Test 8 of 9 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py:This message box label caret select 'T' in 'This' DIFFERENCES FOUND: + BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' + VISIBLE: 'This message box has been popped', cursor=2 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=1 SPEECH OUTPUT: 'h' + SPEECH OUTPUT: 'h' SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'selected' [FAILURE WAS UNEXPECTED] ---- Test 5 of 12 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py:Ctrl+Page_Up to beginning of line DIFFERENCES FOUND: + BRAILLE LINE: 'This is only a test. $l' + VISIBLE: 'This is only a test. $l', cursor=1 BRAILLE LINE: 'This is only a test. $l' VISIBLE: 'This is only a test. $l', cursor=1 SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'T' [FAILURE WAS UNEXPECTED] ---- Test 10 of 12 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py:Shift+Page_Down to deselect text DIFFERENCES FOUND: BRAILLE LINE: ' $l' VISIBLE: ' $l', cursor=1 + BRAILLE LINE: ' $l' + VISIBLE: ' $l', cursor=1 [FAILURE WAS UNEXPECTED] ---- Test 7 of 10 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline.py:Select to end of line DIFFERENCES FOUND: + BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' + VISIBLE: 'This is a test. $l', cursor=1 BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=1 BRAILLE LINE: ' $l' VISIBLE: ' $l', cursor=1 BRAILLE LINE: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type. $l' VISIBLE: 'I'm just typing away like a mad ', cursor=1 BRAILLE LINE: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type. $l' VISIBLE: 'y life than eat fruit and type. ', cursor=32 SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'blank' SPEECH OUTPUT: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type.' SPEECH OUTPUT: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type.' SPEECH OUTPUT: 'selected' [FAILURE WAS UNEXPECTED] ----
Created attachment 110233 [details] Analysis of the first failure in the role_label.py test. Just looking at the first one of this new failures: Test 4 of 9 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py:This message box label caret movement to 'h' DIFFERENCES FOUND: + BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' + VISIBLE: 'This message box has been popped', cursor=1 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=1 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'h' [FAILURE WAS UNEXPECTED] This is with the "Dialog and Message boxes" gtk demo. Start the demo, then press Return to activate the "Message Dialog" button. This brings up a dialog with the text: "This message box has been popped up the following number of times:" with this text selected. Pressing "Home" moves the text caret to the very beginning of the text and the text is unselected. We get an "object:text-caret-moved" event at line 561 and that causes the first: SPEECH OUTPUT: 'T' We then get an "object:text-selection-changed" event at line 574 and that causes the second: SPEECH OUTPUT: 'T' Not quite sure what the best solution for this is yet, but shouldn't the text at the end of onCaretMoved() have given us 1 text selection at that point?
With the previous test, after you've pressed Return when the "Message Dialog" button has focus, then the next step in the regression test is to press Tab which selects all the text of the label: "This message box has been popped up the following number of times:" At that point, the following events are queued up: ---------> QUEUEING EVENT object:state-changed:focused ---------> QUEUEING EVENT object:state-changed:focused ---------> QUEUEING EVENT object:text-caret-moved ---------> QUEUEING EVENT object:text-selection-changed ---------> QUEUEING EVENT focus: The second "object:state-changed:focused" event causes: SPEECH OUTPUT: '' SPEECH OUTPUT: 'This message box has been popped up the following number of times: selected label' to be spoken, but for the "object:text-caret-moved" and "object:text-selection-changed" events, nothing is spoken. Because the last user input is a Tab character, when _presentTextAtNewCaretPosition() is called, then it doesn't get picked up by the if or any of the elif clauses and just falls out the bottom of that routine, rather than calling one of the say[Character,Word,Line,Phrase] routines. In turn, this means that speakTextSelectionState() isn't getting called, and therefore we are unable to setup: self.pointOfReference["lastCursorPosition"] self.pointOfReference["lastSelections"] which is why we don't say "unselected" when the next "object:text-selection-changed" event comes along. In short, I think we need to rethink this approach. Or at least rearrange some more code.
Created attachment 110299 [details] [review] Revision #2. Just attaching it here so it doesn't get lost. Will and I talked about this more this morning. The intent now is for the onTextSelectionChanged() handler to specifically deal with uttering "[un]selected" and the other associated select phrases. onCaretMoved just deals with caret movement.
Created attachment 110300 [details] gtk-demo regression test results after applying patch - revision #2 This is with an older version of pyatspi, so that the regression tests are in an expected state. There are a few unexpected things here and I'll need to investigate further on Monday to see exactly what's happening. I'm not convinced all of them are bad. Here's the summary of the failures (also with the known issues and bugs removed): SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py SUMMARY: 7 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py SUMMARY: 9 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py SUMMARY: 7 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline.py
After being caught out the last time, I decided to rerun these regression tests with the very latest Orca, without applying revision #2 of the patch. SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py Test #3 of role_column_header.py fails without the patch. DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table' VISIBLE: 'Table', cursor=1 BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Description ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs' VISIBLE: 'scrollable notebooks and hidden ', cursor=1 SPEECH OUTPUT: '' SPEECH OUTPUT: 'table' SPEECH OUTPUT: '' SPEECH OUTPUT: 'Description column header' SPEECH OUTPUT: 'Fixed? check box not checked 60482 Normal scrollable notebook s and hidden tabs' + SPEECH OUTPUT: ' not selected ---- SUMMARY: 7 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py Just test #5 fails without the patch, which is a known bug: DIFFERENCES FOUND: - BUG? - no selection is announced? + BRAILLE LINE: 'gtk-demo Application Information Alert This message box has be en popped up the following $l' + VISIBLE: 'This message box has been popped', cursor=2 That means that tests #8 and #9 need to be investigated: DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=1 SPEECH OUTPUT: 'h' - SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'This ' ? ++++ - SPEECH OUTPUT: 'selected' -- DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 - SPEECH OUTPUT: 'T' + SPEECH OUTPUT: 'This ' ? ++++ - SPEECH OUTPUT: 'unselected' ---- SUMMARY: 9 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py All tests succeed without the patch, so that means that tests #3, #4 and #9 need to be investigated: DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=17 + SPEECH OUTPUT: 'This is a test. ' - SPEECH OUTPUT: ' - This is only a test.' -- DIFFERENCES FOUND: BRAILLE LINE: 'This is only a test. $l' VISIBLE: 'This is only a test. $l', cursor=21 + SPEECH OUTPUT: 'This is only a test.' - SPEECH OUTPUT: ' - This is only a test.' -- DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=1 SPEECH OUTPUT: 'This is a test. ' - SPEECH OUTPUT: 'page selected to cursor position' ------ SUMMARY: 7 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline.py All tests succeed without the patch, so that means that tests #4, #5 and #7 need to be investigated: DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=8 BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=10 BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=15 - SPEECH OUTPUT: ' is' ? - + SPEECH OUTPUT: 'is ' ? + - SPEECH OUTPUT: 'selected' - SPEECH OUTPUT: ' a' ? - + SPEECH OUTPUT: 'a ' ? + - SPEECH OUTPUT: 'selected' - SPEECH OUTPUT: ' test' ? - ^ + SPEECH OUTPUT: 'test. ? ^ - SPEECH OUTPUT: 'selected' + + ' -- DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=11 - SPEECH OUTPUT: 'test' ? ^ + SPEECH OUTPUT: 'test. ? ^ - SPEECH OUTPUT: 'unselected' + + ' -- DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Application Window Frame ScrollPane This is a test. $l' VISIBLE: 'This is a test. $l', cursor=1 BRAILLE LINE: ' $l' VISIBLE: ' $l', cursor=1 BRAILLE LINE: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type. $l' VISIBLE: 'I'm just typing away like a mad ', cursor=1 BRAILLE LINE: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type. $l' VISIBLE: 'y life than eat fruit and type. ', cursor=32 SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'blank' SPEECH OUTPUT: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type.' - SPEECH OUTPUT: 'I'm just typing away like a mad little monkey with nothing better to do in my life than eat fruit and type.' - SPEECH OUTPUT: 'selected'
Created attachment 110429 [details] [review] Revision #3. Commentary to follow.
Created attachment 110430 [details] gtk-demo regression test results after applying patch - revision #3 Here's where we stand now (using an older version of pyatspi which doesn't have the regresion test failures in it): SUMMARY: 0 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 1 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/debug_commands.py SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py SUMMARY: 7 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py SUMMARY: 3 SUCCEEDED and 2 FAILED (0 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_radio_button.py SUMMARY: 5 SUCCEEDED and 2 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_spin_button.py SUMMARY: 11 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py Here's the breakdown of the current failures: SUMMARY: 0 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 1 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/debug_commands.py This is failing because I'm testing against with that earlier version of at-spi (pyatspi really), that doesn't have the caching regression problem. ---- SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py Regression test #3 fails here without revision #3 of the patch applied anyhow. This still needs to be investigated though. ---- SUMMARY: 7 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py Regression test #5 is a known bug. Regression test #8 could actually be considered as producing better output with the patch applied: DIFFERENCES FOUND: BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=2 BRAILLE LINE: 'gtk-demo Application Information Alert This message box has been popped up the following $l' VISIBLE: 'This message box has been popped', cursor=1 SPEECH OUTPUT: 'h' + SPEECH OUTPUT: 'unselected' SPEECH OUTPUT: 'T' SPEECH OUTPUT: 'selected' [FAILURE WAS UNEXPECTED] ---- SUMMARY: 3 SUCCEEDED and 2 FAILED (0 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_radio_button.py Failures for regression tests #3 and #5 are known issues. ---- SUMMARY: 5 SUCCEEDED and 2 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_spin_button.py Regression test #1 failing is a known bug. Regression test #4 failing is a known issue. ---- SUMMARY: 11 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py This difference is wrong and needs to be further investigated. DIFFERENCES FOUND: BRAILLE LINE: ' $l' VISIBLE: ' $l', cursor=1 + SPEECH OUTPUT: 'page selected from cursor position' [FAILURE WAS UNEXPECTED] =============================
W.r.t. the failing test in role_text_multiline_navigation2.py: The "special case" section of code in speakTextSelectionState() in default.py (starting about line 6776) is assuming that pressing any of the special keychords (like Shift-Page-Down) will always result in a selection. As we can see from this test, that is not always the case. It will need to be modified to check text.getNSelections(). If zero, then I think we'll need to speak "unselected" instead of "selected". Alternatively, we might just be able to see if self.pointOfReference["lastSelections"] is an empty list. More tomorrow.
Created attachment 110470 [details] [review] Revision #4. Commentary to follow.
Created attachment 110471 [details] gtk-demo regression test results after applying revision #4 of the patch. I think we are getting close. At least for the gtk-demo regresssion tests. With this latest patch, there are the following failures: SUMMARY: 0 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 1 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/debug_commands.py Known problem. I'm using an older version of at-spi/pyatspi because of the regression failures the latest version causes. SUMMARY: 9 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 10 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_column_header.py This failure is not caused by my patch. I believe the regression (#3) is now wrong. When you initially go Down into the list from the column headers in the List Store demo, it's not selected (at least in GNOME 2.22). SUMMARY: 6 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 9 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_label.py I believe the extra "unselected" lines in tests #4 and #8 are an improvement over what we had and the regresssion tests should be adjusted. Regression test #5 failing is a known bug. SUMMARY: 3 SUCCEEDED and 2 FAILED (0 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_radio_button.py These two failures are known issues. SUMMARY: 5 SUCCEEDED and 2 FAILED (1 UNEXPECTED) of 7 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_spin_button.py These two failures area known bug and a known issue. SUMMARY: 11 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 12 for /home/richb/gnome/orca/trunk/test/keystrokes/gtk-demo/role_text_multiline_navigation2.py We now have an improved situation. I believe that regression test #10 should be updated to reflect what is now being output. The original program in the description of this bug is now happening again and I'll investigate that next.
Created attachment 110474 [details] [review] Revision 5. This version now fixes the original bug again. Plus gtk-demo regression test results are still the same as for revision #4. Probably ready for testing. I'll try out the oowriter regression tests now.
Created attachment 110483 [details] oowriter regression test results with patch revision #5. I've just run the oowriter tests against the latest revision of this patch, with the following failures: SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_413909.py This is a known bug (bug #523452 -- really OOo issue #87426). SUMMARY: 0 SUCCEEDED and 5 FAILED (5 UNEXPECTED) of 5 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_435201.py These five failures are all known bugs (speaks the paragraph multiple times when Orca is run synchronously). SUMMARY: 0 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_435226.py These two failures were unexpected. To be investigated further.
Created attachment 110485 [details] oocalc regression test results with patch revision #5. Here's the tests that are currently failing: SUMMARY: 2 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 4 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_356334.py These two failures are known bugs. ------------------ SUMMARY: 3 SUCCEEDED and 3 FAILED (3 UNEXPECTED) of 6 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_363804.py Three failures unexpected. It's hard to understand how my selection changes have caused this traceback. To be further investigated. Traceback (most recent call last):
+ Trace 197078
return client(event) or event.consume
orca_state.activeScript.echoKey(keyboardEvent):
Traceback (most recent call last):
------------------ SUMMARY: 1 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 2 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_364086.py I believe the test here has been adjusted to work with the latest version of pyatspi, and is now failing because I'm using an earlier one. ------------------ SUMMARY: 2 SUCCEEDED and 1 FAILED (1 UNEXPECTED) of 3 for /home/richb/gnome/orca/trunk/test/keystrokes/oocalc/bug_364407.py Same problem here.
Created attachment 110528 [details] [review] Revision #6. Fixes up tests in three regression files too: test/keystrokes/gtk-demo/role_text_multiline_navigation2.py: test/keystrokes/gtk-demo/role_label.py: test/keystrokes/gtk-demo/role_spin_button.py Will and I went over the patch this morning. It seems to work well with Gtk+ components, so it's been committed to SVN trunk. The failures in the oowriter and oocalc regression tests still need to be determined.
With the previously run oowriter regression test: > SUMMARY: 0 SUCCEEDED and 2 FAILED (2 UNEXPECTED) of 2 for > /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_435226.py > > These two failures were unexpected. To be investigated further. This failed because of the pyatspi caching problem. I just reinstalled latest at-spi/pyatspi from SVN trunk, and this regression test works fine. That accounts for all the the oowriter tests. Now to track down the oocalc failures.
Created attachment 110605 [details] [review] Changes to fixup the oocalc regression tests. The oocalc regression test results have been adjusted again to match up with the latest braille context. Patch committed to SVN trunk. There is still one lot of remaining failures: Test 4 of 6 FAILED: ../keystrokes/oocalc/bug_363804.py:Down to A2 - don't speak cell coordinates DIFFERENCES FOUND: BRAILLE LINE: 'soffice Application fruit - OpenOffice.org Calc Frame fruit - OpenOffice.org Calc RootPane ScrollPane Document view3 Sheet Sheet1 Table Good in Pies Cell A2 ' VISIBLE: 'Good in Pies Cell A2 ', cursor=1 - SPEECH OUTPUT: 'Good in Pies' + SPEECH OUTPUT: 'Good in Pies A2' ? +++ [FAILURE WAS UNEXPECTED] Test 5 of 6 FAILED: ../keystrokes/oocalc/bug_363804.py:Right to B2 - don't speak cell coordinates DIFFERENCES FOUND: BRAILLE LINE: 'soffice Application fruit - OpenOffice.org Calc Frame fruit - OpenOffice.org Calc RootPane ScrollPane Document view3 Sheet Sheet1 Table Yes Cell B2 ' VISIBLE: 'Yes Cell B2 ', cursor=1 - SPEECH OUTPUT: 'Yes' + SPEECH OUTPUT: 'Yes B2' ? +++ [FAILURE WAS UNEXPECTED] Test 6 of 6 FAILED: ../keystrokes/oocalc/bug_363804.py:Control+Home to A1 - don't speak cell coordinates DIFFERENCES FOUND: BRAILLE LINE: 'soffice Application fruit - OpenOffice.org Calc Frame fruit - OpenOffice.org Calc RootPane ScrollPane Document view3 Sheet Sheet1 Table Cell A1 ' VISIBLE: 'Cell A1 ', cursor=1 - SPEECH OUTPUT: 'blank' ? ^^^^^ + SPEECH OUTPUT: ' A1' ? ^^^ [FAILURE WAS UNEXPECTED] ---- This suggests that the updating of application specific preferences is still not working correctly. At least for this regression test. I'll investigate further tomorrow.
W.r.t. the problem in the last comment, see: http://bugzilla.gnome.org/show_bug.cgi?id=528147#c20
This seems to be working nicely in many areas. I'm still trying to figure out why I'm getting some bogus unselected messages in lists and comboboxes though. It seems to happen once in a while if I'm arrowing up and down in really large ones.
> I'm still trying to figure out > why I'm getting some bogus unselected messages in lists and comboboxes though. > It seems to happen once in a while if I'm arrowing up and down in really large > ones. Which application are you using? Steps to try to reproduce this would be very useful. Thanks.
It only seems to happen once in a while in naudilus if I am attempting to select multiple files in a folder with several hundred files. I had reason to use this patch today with lots of different blocks of text and it seems to be working quite nicely.
This one seems to be working well I think.
Thanks Mike. The latest patch to this one was already committed, so I'm closing as FIXED. If there is anything else that needs to be tweaked w.r.t. selection, then it can be done as part of bug #517048.