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 523452 - OOo spell check not working (oowriter/bug_413909.py regression test #2 produces the wrong results)
OOo spell check not working (oowriter/bug_413909.py regression test #2 produc...
Status: RESOLVED FIXED
Product: orca
Classification: Applications
Component: general
unspecified
Other All
: High major
: 2.24.0
Assigned To: Joanmarie Diggs (IRC: joanie)
Orca Maintainers
http://www.openoffice.org/issues/show...
Depends on: 549664
Blocks: 404411 523438
 
 
Reported: 2008-03-19 21:19 UTC by Rich Burridge
Modified: 2009-03-10 00:05 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
spellcheck heuristic approach take 1 (10.89 KB, patch)
2008-08-27 22:33 UTC, Joanmarie Diggs (IRC: joanie)
none Details | Review
revision 2 (slight tweak to also check for STATE_EDITABLE) (11.15 KB, patch)
2008-08-27 23:49 UTC, Joanmarie Diggs (IRC: joanie)
none Details | Review

Description Rich Burridge 2008-03-19 21:19:03 UTC
Test 2 of 2 FAILED: /home/richb/gnome/orca/trunk/test/keystrokes/oowriter/bug_413909.py:Enter F7 to bring up the spell checking dialog
EXPECTED:
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=2",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=3",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=4",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=5",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=23",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=14",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=15",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=16",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=17",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=18",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=19",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=20",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=21",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=22",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=23",
     "BRAILLE LINE:  'soffice Application Spellcheck:  (English (USA)) Dialog'",
     "     VISIBLE:  'Spellcheck:  (English (USA)) Dia', cursor=1",
     "BRAILLE LINE:  'soffice Application Spellcheck:  (English (USA)) Dialog Spellcheck:  (English (USA)) OptionPane Change Button'",
     "     VISIBLE:  'Change Button', cursor=1",
     "SPEECH OUTPUT: ''",
     "SPEECH OUTPUT: 'Spellcheck:  (English (USA))'",
     "SPEECH OUTPUT: 'Misspelled word: quuuiick Context is The quuuiick brown fox'",
     "SPEECH OUTPUT: ''",
     "SPEECH OUTPUT: 'Change button'",
ACTUAL:
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=2",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=3",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=4",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=5",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=23",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=14",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=15",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=16",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=17",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=18",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=19",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=20",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=21",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=22",
     "BRAILLE LINE:  'soffice Application Untitled2 - OpenOffice.org Writer Frame Untitled2 - OpenOffice.org Writer RootPane ScrollPane Document view The quuuiick brown fox $l'",
     "     VISIBLE:  'The quuuiick brown fox $l', cursor=23",
     "BRAILLE LINE:  'soffice Application Spellcheck:  (English (USA)) Dialog'",
     "     VISIBLE:  'Spellcheck:  (English (USA)) Dia', cursor=1",
     "BRAILLE LINE:  'soffice Application Spellcheck:  (English (USA)) Dialog Change Button'",
     "     VISIBLE:  'Change Button', cursor=1",
     "SPEECH OUTPUT: ''",
     "SPEECH OUTPUT: 'Spellcheck:  (English (USA))'",
     "SPEECH OUTPUT: ''",
     "SPEECH OUTPUT: 'Change button'",
Comment 1 Rich Burridge 2008-03-25 15:56:32 UTC
The problem here is that the accessible component hierarchy for the
spell check dialog is broken. At the point I type F7 to bring up the
spell check dialog, here's what Control-Alt-Insert-Page_Down gives me:

+- app.name='soffice' name='soffice' role='application' state='' relations=''
  +- app.name='soffice' name='Untitled1 - OpenOffice.org Writer' role='frame' state='enabled resizable sensitive showing visible' relations=''
    +- app.name='soffice' name='Untitled1 - OpenOffice.org Writer' role='root pane' state='enabled sensitive showing visible' relations=''
      +- app.name='soffice' name='None' role='menu bar' state='enabled focusable opaque sensitive showing visible' relations=''
        +- app.name='soffice' name='File' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Edit' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='View' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Insert' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Format' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Table' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Tools' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Window' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
        +- app.name='soffice' name='Help' role='menu' state='enabled focusable opaque selectable sensitive showing visible' relations=''
      +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Standard' role='tool bar' state='enabled focusable horizontal sensitive showing visible' relations=''
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
        +- app.name='soffice' name='Formatting' role='tool bar' state='enabled focusable horizontal sensitive showing visible' relations=''
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
          WARNING CHILD.PARENT != PARENT!!!
      +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
      +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
      +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
      +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='None' role='scroll pane' state='enabled sensitive showing visible' relations=''
          +- app.name='soffice' name='Document view' role='unknown' state='editable enabled multiselectable opaque showing visible' relations=''
            +- app.name='soffice' name='None' role='paragraph' state='editable enabled focusable multi line multiselectable showing visible' relations='flows to'
            +- app.name='soffice' name='None' role='paragraph' state='editable enabled focusable multi line multiselectable showing visible' relations='flows from'
          +- app.name='soffice' name='None' role='filler' state='enabled resizable sensitive showing visible' relations=''
          +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
          +- app.name='soffice' name='None' role='panel' state='enabled sensitive showing visible' relations=''
          +- app.name='soffice' name='None' role='scroll bar' state='enabled focusable horizontal sensitive showing visible' relations=''
          +- app.name='soffice' name='Click the up button to scroll to the previous page or object.' role='push button' state='enabled focusable sensitive showing visible' relations=''
          +- app.name='soffice' name='Click the down button to scroll to the next page or object.' role='push button' state='enabled focusable sensitive showing visible' relations=''
          +- app.name='soffice' name='Navigation' role='push button' state='enabled focusable sensitive showing visible' relations=''
          +- app.name='soffice' name='None' role='scroll bar' state='enabled focusable sensitive showing vertical visible' relations=''
      +- app.name='soffice' name='None' role='statusbar' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Page Number' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Page Style' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Language Status' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Zoom' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Insert Mode' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Selection Mode' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Document Modified' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Digital Signatures' role='label' state='enabled sensitive showing visible' relations=''
        +- app.name='soffice' name='Size' role='label' state='enabled sensitive showing visible' relations=''
  +- app.name='soffice' name='Spellcheck:  (English (USA))' role='dialog' state='active enabled sensitive showing visible' relations=''
    +- app.name='soffice' name='Not in dictionary' role='label' state='enabled sensitive showing visible' relations='label for'

Notice the last two lines. They are for the spell checking dialog. Orca
thinks it's a dialog with one child which is a label. Accerciser thinks
it's the same.

When the focus is on the Change button in the Spell Checking dialog,
the component ancestry with Control-Alt-Insert-Page_Up looks like:

+- app.name='soffice' name='soffice' role='application' state='' relations=''
  +- app.name='soffice' name='Spellcheck:  (English (USA))' role='dialog' state='active enabled sensitive showing visible' relations=''
    +- app.name='soffice' name='Change' role='push button' state='enabled focusable focused sensitive showing visible' relations=''

This is different from the previous version of OOo where the ancestry at
that point was:

pyatspi.ROLE_PUSH_BUTTON,
pyatspi.ROLE_OPTION_PANE,
pyatspi.ROLE_DIALOG,
pyatspi.ROLE_APPLICATION

This looks like YAOOOB, which I'll now file and block this one against.
Comment 2 Rich Burridge 2008-03-25 16:05:56 UTC
OOo issue #87426 has been opened for this problem.
http://www.openoffice.org/issues/show_bug.cgi?id=87426
Comment 3 Willie Walker 2008-07-24 15:22:49 UTC
Just an update: I tried the following steps using OODEV300_m27 build 9336 my OpenSolaris box:

1) Run oowriter
2) Type "the quuuuuick brown fox"
3) Tools -> Spelling and Grammar...

The spelling check failed to find quuuuuick as a misspelling.  I'm guessing the version of OOo I have doesn't have a spelling dictionary installed.  :-(

I'll ask around to see what I can do to resolve that issue so that I can further work on this problem.  :-)
Comment 4 Willie Walker 2008-08-26 20:31:51 UTC
(In reply to comment #3)
Just an update: I tried the following steps using OODEV300_m29 build 9339 on my OpenSolaris box:
 
1) Run oowriter
2) Type "the quuuuuick brown fox"
3) Tools -> Spelling and Grammar...

The spell checker feature of OOo worked (looks like they fixed it, yeah!).  But, it looks like they may have changed the name from "Spellcheck:" to "Spelling:", thus realizing our vision of brittleness for doing string comparisons on things given to us by the application.  Here's a patch to address that, but we should look for a better way than string comparisons if possible:

Index: src/orca/scripts/apps/soffice/script.py
===================================================================
--- src/orca/scripts/apps/soffice/script.py	(revision 4130)
+++ src/orca/scripts/apps/soffice/script.py	(working copy)
@@ -1274,7 +1274,8 @@
             # hate keying off stuff like this, but we're forced to do
             # so in this case.
             #
-            if pane.name.startswith(_("Spellcheck:")):
+            if pane.name.startswith(_("Spellcheck:")) \
+               or pane.name.startswith(_("Spelling:")):
                 debug.println(self.debugLevel,
                     "StarOffice.locusOfFocusChanged - " \
                     + "Writer: spell check dialog.")

We also noticed that a ROLE_UNKNOWN seems to have been replaced with a ROLE_DOCUMENT_FRAME in the hierarchy, thus realizing our vision of brittleness surrounding the checking for hierarchies.

In her infinite kindness, Joanie offered to take a look at both of these in an attempt to find A Better Way (TM).  Since they may end up getting done with the same patch, we can start by just tracking them with this bug.
Comment 5 Joanmarie Diggs (IRC: joanie) 2008-08-27 22:33:18 UTC
Created attachment 117488 [details] [review]
spellcheck heuristic approach take 1

In addition to the other issues raised, I noticed that in the soffice script in onLocusOfFocusChanged(), we are doing a check for focused push buttons.  Taking it out seems advantageous for a couple of reasons:

1. It's redundant. In my testing each and every time we have a new error, we get an accessible name change on the option pane. We do the correct thing (with Will's adjustment to the string). Then we immediately go through the whole process again (assuming you make a corresponding string change in that method) for the focus event on the Change button, but we reject speaking the error a second time because it's a dupe.

2. We do all of the above each time you tab from push button to push button in the spellcheck (or whatever it's being called this week) dialog. Seems like unnecessary processing.

This patch removes locusOfFocusChanged() check entirely.  The side effect of doing so is that when the spellcheck dialog first appears, we don't quite speak it like we should. Seems the events are:

1. accessible name change
2. window activate (on the dialog)
3. focus/focused (on the Change button)

So we start speaking it, but the window activate event cuts off speech. :-( Beyond that issue, what if you're in the spelling dialog and tab to a non push button, then Alt Tab out of it? When you Alt Tab back into it, wouldn't you want the context? I would.... Assuming others would as well.... This patch changes the soffice script's onWindowActivated():

1. Clears our stored badword history (so when the dialog regains
   focus, we treat it as a new error)

2. Calls self.readMisspeltWord() if the activate event is for a
   dialog whose first child is on option pane on the off chance
   that maybe, just maybe, it's the spelling dialog. :-)

That is where the heuristics come in, added to readMisspeltWord() which currently identifies the error by looking for a paragraph and getting the text with the different attributes. The changes:

1. If we do not have exactly one paragraph, it ain't the spelling
   dialog.
   * Most text objects in the OOo dialogs are not paragraphs.
   * When there is a paragraph (e.g. Calc Header/Footer dialog),
     there's typically not just one.

2. If the one paragraph is empty, it ain't the spelling dialog.

3. If the one paragraph has text but no attributes, it aint the
   spelling dialog.

Thus a false positive is a dialog whose first child is an option pane and which contains a single paragraph with text formatted with non-default attributes. I haven't found any such cases, but it might could happen. So what's the worst case? When the window first gets activated we speak the text with the different attributes and store it as the mispelled word.  That, to me is a minimal amount of verbosity. And if we find such a dialog, we can always refine the heuristics.

So in summary: We're not looking at strings and we're looking at a very minimal hierarchy (a dialog whose first child is an option pane). Will, whatcha think?

(BTW, this patch has a bunch of print statements for debugging. What I plan to do now is go through every dialog in Writer, Calc, and Impress looking for false positives. :-) )
Comment 6 Joanmarie Diggs (IRC: joanie) 2008-08-27 23:49:31 UTC
Created attachment 117493 [details] [review]
revision 2 (slight tweak to also check for STATE_EDITABLE)

I just went through all of the dialogs and did not get a single false positive. Yea!

Some things we didn't even attempt because the "dialog" wasn't of ROLE_DIALOG and/or didn't have a first child of ROLE_OPTION_PANE. Of those we did attempt:

The bulk failed due to an absence of paragraphs. I didn't take stats, but I'd guess at least 95% and quite possibly higher.

The checks for multiple paragraphs and empty text tied for second place.

The check for attributes came in third.

There were a couple of dialogs that had a single paragraph of non-editable text serving as a way to display the description of a selected list item (e.g. Customize). The attribute check caught that, but we know that our single paragraph of interest is editable, so this patch increases the requirements by checking for STATE_EDITABLE.

Out of all of the dialogs, and gosh there were many, I only came across a couple where you could have a single paragraph of editable text: Insert Script and Insert Function (the latter being in Calc).  They each start out with no text so it's a non-issue initially. If one were to add a single line of text, and only a single line, Alt Tab out, and then Alt Tab (and Alt+F6) back, we'd now have a single paragraph's worth of editable text in a dialog whose first child is an option pane. What saves us here is the attribute check. Given the nature of the dialogs, I tried to format the text, paste in formatted text, create bogus formulae (maybe errors would be displayed via attribute), look for a way to enable syntax highlighting, etc., etc. I couldn't find a way to cause any text attributes to be present. So I think we're safe there.

Will I left the debugging statements in should you want to test the heuristics yourself. Please review knowing that those will get ripped out. Thanks!
Comment 7 Joanmarie Diggs (IRC: joanie) 2008-08-28 08:10:50 UTC
Obsoleting the last patch. The latest patch for this bug has been merged with the patch for bug 549664.
Comment 8 Joanmarie Diggs (IRC: joanie) 2008-08-28 15:03:00 UTC
The full patch for bug #549664 has been committed and spell check is now working again. Moving this to pending.
Comment 9 Mike Pedersen 2008-09-02 17:56:48 UTC
This is now working for me with OpenOffice 3.0 M4.  
Comment 10 Joanmarie Diggs (IRC: joanie) 2008-09-02 18:38:54 UTC
Thanks Mike. Closing as FIXED.