After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 508153 - Two suggested improvements for presenting mail messages in Evolution.
Two suggested improvements for presenting mail messages in Evolution.
Status: RESOLVED FIXED
Product: orca
Classification: Applications
Component: general
2.21.x
Other All
: Normal enhancement
: 2.22.0
Assigned To: Rich Burridge
Orca Maintainers
Depends on:
Blocks:
 
 
Reported: 2008-01-08 21:17 UTC by Rich Burridge
Modified: 2008-07-22 19:33 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
way to reduce speech redundancy (802 bytes, patch)
2008-01-17 18:48 UTC, Joanmarie Diggs (IRC: joanie)
none Details | Review
Revision #1 of potential fix for part 1. (1.85 KB, patch)
2008-01-17 19:02 UTC, Rich Burridge
none Details | Review
way to reduce speech and braille redundancy (2.60 KB, patch)
2008-01-17 19:48 UTC, Joanmarie Diggs (IRC: joanie)
committed Details | Review

Description Rich Burridge 2008-01-08 21:17:16 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.
Comment 1 Rich Burridge 2008-01-16 17:28:03 UTC
I think the second one has been fixed, so it's just the first one
left. Correct Will?
Comment 2 Willie Walker 2008-01-16 17:47:07 UTC
(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.
Comment 3 Rich Burridge 2008-01-17 17:50:33 UTC
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.
Comment 4 Joanmarie Diggs (IRC: joanie) 2008-01-17 18:48:00 UTC
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?
Comment 5 Rich Burridge 2008-01-17 19:02:57 UTC
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? ...
Comment 6 Joanmarie Diggs (IRC: joanie) 2008-01-17 19:48:48 UTC
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.
Comment 7 Willie Walker 2008-01-17 22:46:54 UTC
(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?
Comment 8 Mike Pedersen 2008-01-17 22:50:17 UTC
(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. 
Comment 9 Willie Walker 2008-01-17 22:50:55 UTC
(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.  :-)
Comment 10 Rich Burridge 2008-01-17 23:12:07 UTC
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.
Comment 11 Rich Burridge 2008-01-17 23:22:09 UTC
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
Comment 12 Rich Burridge 2008-01-18 01:48:15 UTC
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.
Comment 13 Rich Burridge 2008-01-18 01:55:32 UTC
This patch committed. It passes the two regression tests (if I comment
out the above line to braillegenerator.py). Moving to "[pending].
Comment 14 Rich Burridge 2008-01-25 21:29:33 UTC
Mike, can you please verify this one so that it can be closed before the
Orca v2.21.90 tarball release on Monday?

Thanks.
Comment 15 Mike Pedersen 2008-01-25 22:07:07 UTC
Sorry about that.  This one is good.  
Comment 16 Rich Burridge 2008-01-25 22:30:19 UTC
Thanks. Closing as FIXED.