GNOME Bugzilla – Bug 523452
OOo spell check not working (oowriter/bug_413909.py regression test #2 produces the wrong results)
Last modified: 2009-03-10 00:05:42 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'",
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.
OOo issue #87426 has been opened for this problem. http://www.openoffice.org/issues/show_bug.cgi?id=87426
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. :-)
(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.
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. :-) )
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!
Obsoleting the last patch. The latest patch for this bug has been merged with the patch for bug 549664.
The full patch for bug #549664 has been committed and spell check is now working again. Moving this to pending.
This is now working for me with OpenOffice 3.0 M4.
Thanks Mike. Closing as FIXED.