GNOME Bugzilla – Bug 508153
Two suggested improvements for presenting mail messages in Evolution.
Last modified: 2008-07-22 19:33:28 UTC
As reported by Will in comment 24 of Orca bug #503874: http://bugzilla.gnome.org/show_bug.cgi?id=503874#c24 1) Braille doesn't update when the message status goes from unread to read as a result of arrowing to the message summary line and then not arrowing away. We could potentially fix this -- it might be nice to present the change both in braille and speech. 2) When reading by cell, I also noticed a spacing issue with braille and with also what seems to be rather verbose output: VISIBLE: '< > Status CheckBoxStatus Cell', cursor=1 ... SPEECH OUTPUT: 'Status column header' SPEECH OUTPUT: 'Status check box not checked Status' I'd guess we probably just want to present just the following if possible: VISIBLE: '< > Status CheckBox' SPEECH OUTPUT: 'Status check box not checked' Whatever we do, we should also be consistent for the attachment and flagged fields. Mike, what do you think the output should be? Opening a separate bug here so that the other bug can be considered a separate issue.
I think the second one has been fixed, so it's just the first one left. Correct Will?
(In reply to comment #1) > I think the second one has been fixed, so it's just the first one > left. Correct Will? > I don't think the second one has been fixed. :-( I'm seeing that the spacing issue has been addressed, but the rest of it has not. In particular: CURRENT: VISIBLE: '< > Status CheckBox Status Cell' PROPOSAL: VISIBLE: '< > Status CheckBox' CURRENT: SPEECH OUTPUT: 'Status column header' SPEECH OUTPUT: 'Status check box not checked Status' PROPOSAL: SPEECH OUTPUT: 'Status check box not checked' This applies also to the attachment and flagged fields.
Will and I just discussed the second part of the bug, namely: CURRENT: VISIBLE: '< > Status CheckBox Status Cell' PROPOSAL: VISIBLE: '< > Status CheckBox' CURRENT: SPEECH OUTPUT: 'Status column header' SPEECH OUTPUT: 'Status check box not checked Status' PROPOSAL: SPEECH OUTPUT: 'Status check box not checked' The bogus "Status" on the end of 'Status check box not checked Status' has already been fixed by Joanie's change to speechgenerator.py. W.r.t. the other suggested changes: For 'Status column header': this is hard to easily adjust because it is in the middle of locusOfFocusChanged() in default.py (section of code beginning at line 2344). For '< > Status CheckBox Status Cell': this is actually the way that _getBrailleRegionsForTableCell() in braillegenerator.py works. If the table cell has a toggle action, it treats it as a check box and gets a set of regions (section of code starting at line 1206). This is where we get the '< > Status CheckBox' part from. It the precedes to get the default braille regions for the real active descendant and tags them on the end (section of code at line 1230). That's where 'Status Cell' comes from. So, in short, we are not going to attempt to change/fix this. That leaves the first part of the bug which I'm investigating further now.
Created attachment 103082 [details] [review] way to reduce speech redundancy > For 'Status column header': this is hard to easily adjust because it is > in the middle of locusOfFocusChanged() in default.py (section of code > beginning at line 2344). In any table anywhere if: 1. We just changed columns 2. The column we moved to has a header 3. That header text and the cell contents match exactly We will say something like foo column header foo. Is Evolution the only place where we want to avoid this? Why can't we just check for this condition and not tack on the header if it's the same as the contents?
Created attachment 103083 [details] [review] Revision #1 of potential fix for part 1. For the first part of the bug: updating the braille display if the status of a mail message goes from "unread" to "read". We will get a couple of "object:visible-data-changed" events when this happens; one for the main frame and another for the folder tree table on the left. The updated data will show the new unread count. So... If the event is for the tree table on the left and the current locus is in a table cell in the mail message header list, then we can easily update the braille display with self.updateBraille() Note that this will (depending upon whether you have "enable cell" or "enable row" set, replace the nice presentation we created via the locusOfFocusChanged() method in Evolution.py for the "focus:" event with the "standard" braille representation of the table cell or the row of table cells. That's probably not what we want. Representing that information doesn't appear to be easy as we are trying to detect this for a different kind of event for a totally different object. (Note also that if you click on that first column you can go from "read" back to "unread".) Thoughts? ...
Created attachment 103086 [details] [review] way to reduce speech and braille redundancy This patch also addresses the braille redundancy. I tested it in gtk-demo (quick functional test, not regression testing) and am not noticing any differences.
(In reply to comment #5) > Created an attachment (id=103083) [edit] > Revision #1 of potential fix for part 1. ... > That's probably not what we want. Representing that information doesn't > appear to be easy as we are trying to detect this for a different kind > of event for a totally different object. I notice it doesn't seem to work if I don't have speak-entire-row turned on, and the behavior when speak-entire-row is turned on seems to make the display jump around. For example, if focus is in the "From" column, the "From" prefix goes away when the status changes from unread to read. Strange. I wonder if this one is really worth trying to address?
(In reply to comment #7) > (In reply to comment #5) > > Created an attachment (id=103083) [edit] > > Revision #1 of potential fix for part 1. > ... > > That's probably not what we want. Representing that information doesn't > > appear to be easy as we are trying to detect this for a different kind > > of event for a totally different object. > > I notice it doesn't seem to work if I don't have speak-entire-row turned on, > and the behavior when speak-entire-row is turned on seems to make the display > jump around. For example, if focus is in the "From" column, the "From" prefix > goes away when the status changes from unread to read. Strange. > > I wonder if this one is really worth trying to address? > As a user I don't see it as a high priority.
(In reply to comment #6) > Created an attachment (id=103086) [edit] > way to reduce speech and braille redundancy > > This patch also addresses the braille redundancy. I tested it in gtk-demo > (quick functional test, not regression testing) and am not noticing any > differences. Cool! This works pretty well. If the regression tests come out OK, I say commit. :-)
Okay, so the plan with this bug is to not try to do unread/read state change and just to commit attachment: http://bugzilla.gnome.org/attachment.cgi?id=103086 when tested against the regression tests. I'll work on that tomorrow. Thanks.
Well I ended up running the two related gtk-demo regression tests. Several failures. Instances of two spaces instead of one. $ ../../runone.sh ../../../keystrokes/gtk-demo/role_column_header.py gtk-demo 0 starting test application gtk-demo ... Macaroon timeout: Wait for tree table to be focused Test 1 of 8 SUCCEEDED: ../../../keystrokes/gtk-demo/role_column_header.py:Severity column header Test 2 of 8 SUCCEEDED: ../../../keystrokes/gtk-demo/role_column_header.py:Description column header Test 3 of 8 FAILED: ../../../keystrokes/gtk-demo/role_column_header.py:Enter table for first time EXPECTED: "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 notebooks and hidden tabs'", ACTUAL: "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 notebooks and hidden tabs'", Test 4 of 8 SUCCEEDED: ../../../keystrokes/gtk-demo/role_column_header.py:Normal cell Test 5 of 8 FAILED: ../../../keystrokes/gtk-demo/role_column_header.py:Normal cell Where Am I EXPECTED: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs'", " VISIBLE: 'Normal scrollable notebooks and ', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: 'check box not checked'", "SPEECH OUTPUT: '60482'", "SPEECH OUTPUT: 'Normal'", "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'", "SPEECH OUTPUT: 'row 1 of 14'", ACTUAL: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Severity ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs'", " VISIBLE: 'Normal scrollable notebooks and ', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: 'check box not checked'", "SPEECH OUTPUT: '60482'", "SPEECH OUTPUT: 'Normal'", "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'", "SPEECH OUTPUT: 'row 1 of 14'", Test 6 of 8 SUCCEEDED: ../../../keystrokes/gtk-demo/role_column_header.py:60482 cell Test 7 of 8 FAILED: ../../../keystrokes/gtk-demo/role_column_header.py:Checkbox cell EXPECTED: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > Fixed?'", " VISIBLE: '< > Fixed?', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Fixed? column header'", "SPEECH OUTPUT: 'check box not checked '", ACTUAL: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > Fixed?'", " VISIBLE: '< > Fixed?', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Fixed? column header'", "SPEECH OUTPUT: 'check box not checked '", Test 8 of 8 FAILED: ../../../keystrokes/gtk-demo/role_column_header.py:Checkbox cell Where Am I EXPECTED: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs'", " VISIBLE: '< > Fixed? 60482 Normal scrollab', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: 'check box not checked'", "SPEECH OUTPUT: '60482'", "SPEECH OUTPUT: 'Normal'", "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'", "SPEECH OUTPUT: 'row 1 of 14'", ACTUAL: "BRAILLE LINE: 'gtk-demo Application GtkListStore demo Frame ScrollPane Table Fixed? ColumnHeader < > Fixed? 60482 Normal scrollable notebooks and hidden tabs'", " VISIBLE: '< > Fixed? 60482 Normal scrolla', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: 'check box not checked'", "SPEECH OUTPUT: '60482'", "SPEECH OUTPUT: 'Normal'", "SPEECH OUTPUT: 'scrollable notebooks and hidden tabs'", "SPEECH OUTPUT: 'row 1 of 14'", SUMMARY: 4 SUCCEEDED and 4 FAILED of 8 for ../../../keystrokes/gtk-demo/role_column_header.py ******** 4 FAILURES NOT EXPECTED FOR ../../../keystrokes/gtk-demo/role_column_header.py $ ../../runone.sh ../../../keystrokes/gtk-demo/role_table.py gtk-demo 0 starting test application gtk-demo ... Macaroon timeout: Wait for tree table to be focused Test 1 of 7 FAILED: ../../../keystrokes/gtk-demo/role_table.py:Table initial focus EXPECTED: "BRAILLE LINE: 'gtk-demo Application Window Editable Cells $l'", " VISIBLE: 'Editable Cells $l', cursor=15", "BRAILLE LINE: 'gtk-demo Application Window $l'", " VISIBLE: 'gtk-demo Application Window $l', cursor=29", "BRAILLE LINE: 'gtk-demo Application Window $l'", " VISIBLE: 'gtk-demo Application Window $l', cursor=29", "BRAILLE LINE: 'gtk-demo Application GTK+ Code Demos Frame TabList Widget (double click for demo) Page ScrollPane TreeTable Widget (double click for demo) ColumnHeader Editable Cells TREE LEVEL 2'", " VISIBLE: 'Editable Cells TREE LEVEL 2', cursor=1", "BRAILLE LINE: 'gtk-demo Application Shopping list Frame'", " VISIBLE: 'Shopping list Frame', cursor=1", "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 bottles of coke '", " VISIBLE: '3 bottles of coke ', cursor=1", "SPEECH OUTPUT: 'Widget (double click for demo) page'", "SPEECH OUTPUT: 'Widget (double click for demo) column header'", "SPEECH OUTPUT: 'Editable Cells'", "SPEECH OUTPUT: 'tree level 2'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Shopping list frame'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Number column header'", "SPEECH OUTPUT: '3 bottles of coke '", ACTUAL: "BRAILLE LINE: 'gtk-demo Application Window Editable Cells $l'", " VISIBLE: 'Editable Cells $l', cursor=15", "BRAILLE LINE: 'gtk-demo Application Window $l'", " VISIBLE: 'gtk-demo Application Window $l', cursor=29", "BRAILLE LINE: 'gtk-demo Application Window $l'", " VISIBLE: 'gtk-demo Application Window $l', cursor=29", "BRAILLE LINE: 'gtk-demo Application GTK+ Code Demos Frame TabList Widget (double click for demo) Page ScrollPane TreeTable Widget (double click for demo) ColumnHeader Editable Cells TREE LEVEL 2'", " VISIBLE: 'Editable Cells TREE LEVEL 2', cursor=1", "BRAILLE LINE: 'gtk-demo Application Shopping list Frame'", " VISIBLE: 'Shopping list Frame', cursor=1", "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 bottles of coke'", " VISIBLE: '3 bottles of coke', cursor=1", "SPEECH OUTPUT: 'Widget (double click for demo) page'", "SPEECH OUTPUT: 'Widget (double click for demo) column header'", "SPEECH OUTPUT: 'Editable Cells'", "SPEECH OUTPUT: 'tree level 2'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Shopping list frame'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'Number column header'", "SPEECH OUTPUT: '3 bottles of coke'", Test 2 of 7 FAILED: ../../../keystrokes/gtk-demo/role_table.py:Table Where Am I EXPECTED: "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 bottles of coke '", " VISIBLE: '3 bottles of coke ', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: '3'", "SPEECH OUTPUT: 'bottles of coke'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'row 1 of 5'", ACTUAL: "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 3 bottles of coke'", " VISIBLE: '3 bottles of coke', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'cell'", "SPEECH OUTPUT: '3'", "SPEECH OUTPUT: 'bottles of coke'", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: 'row 1 of 5'", Test 3 of 7 FAILED: ../../../keystrokes/gtk-demo/role_table.py:Table down one line EXPECTED: "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 5 packages of noodles '", " VISIBLE: '5 packages of noodles ', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: '5 packages of noodles '", ACTUAL: "BRAILLE LINE: 'gtk-demo Application Shopping list Frame ScrollPane Table Number ColumnHeader 5 packages of noodles'", " VISIBLE: '5 packages of noodles', cursor=1", "SPEECH OUTPUT: ''", "SPEECH OUTPUT: '5 packages of noodles'", Test 4 of 7 SUCCEEDED: ../../../keystrokes/gtk-demo/role_table.py:Table Where Am I (again) Test 5 of 7 SUCCEEDED: ../../../keystrokes/gtk-demo/role_table.py:Turn row reading off Test 6 of 7 SUCCEEDED: ../../../keystrokes/gtk-demo/role_table.py:Table up to packages of noodles Test 7 of 7 SUCCEEDED: ../../../keystrokes/gtk-demo/role_table.py:Table up to bottles of coke SUMMARY: 4 SUCCEEDED and 3 FAILED of 7 for ../../../keystrokes/gtk-demo/role_table.py ******** 3 FAILURES NOT EXPECTED FOR ../../../keystrokes/gtk-demo/role_table.py
This patch doesn't break the two regression tests. It's the braillegenerator.py part of the fix for bug #503874. --- src/orca/braillegenerator.py (revision 3449) +++ src/orca/braillegenerator.py (working copy) @@ -1205,6 +1205,7 @@ + "looking at action %d" % i) if action.getName(i) == "toggle": regions = self._getBrailleRegionsForCheckBox(obj) + regions[0].append(braille.Region(" ")) # If this table cell doesn't have any label associated # with it then also braille the table column header. I'll reopen that bug so that it can be fixed properly.
This patch committed. It passes the two regression tests (if I comment out the above line to braillegenerator.py). Moving to "[pending].
Mike, can you please verify this one so that it can be closed before the Orca v2.21.90 tarball release on Monday? Thanks.
Sorry about that. This one is good.
Thanks. Closing as FIXED.