Index: src/orca/scripts/apps/Thunderbird/script.py
===================================================================
--- src/orca/scripts/apps/Thunderbird/script.py	(revision 3996)
+++ src/orca/scripts/apps/Thunderbird/script.py	(working copy)
@@ -60,6 +60,11 @@
         # Set the debug level for all the methods in this script.
         self.debugLevel = debug.LEVEL_FINEST
 
+        # Store the last autocompleted string for the address fields
+        # so that we're not too 'chatty'.  See bug #533042.
+        #
+        self._lastAutoComplete = ""
+
         Gecko.Script.__init__(self, app)
 
         # This will be used to cache a handle to the Thunderbird text area for
@@ -119,6 +124,10 @@
         top = self.getTopLevel(obj)
         consume = False
 
+        # Clear the stored autocomplete string.
+        #
+        self._lastAutoComplete = ""
+
         # Don't speak chrome URLs.
         #
         if obj.name.startswith("chrome://"):
@@ -237,21 +246,25 @@
         obj = event.source
         parent = obj.parent
 
+        # Speak the autocompleted text, but only if it is different
+        # so that we're not too "chatty."  See bug #533042.
+        #
+        parentRole = parent.getRoleName()
+        debug.println(debug.LEVEL_SEVERE, "===========================")
+        debug.println(debug.LEVEL_SEVERE, "Parent: %s " % parentRole)
+        debug.println(debug.LEVEL_SEVERE, "any_data: <%s>" % event.any_data)
+        debug.println(debug.LEVEL_SEVERE, "self._lastAutoComplete: <%s>" \
+                      % self._lastAutoComplete)
         if parent.getRole() == pyatspi.ROLE_AUTOCOMPLETE:
-            # Thunderbird does not present all the text in an
-            # autocompletion text entry. This is a workaround.
-            #
-            speech.stop()
-
-            utterances = []
-            [text, caretOffset, startOffset] = self.getTextLineAtCaret(obj)
-            utterances.append(text)
-            self._debug("onTextInserted: utterances='%s'" % utterances)
-
-            speech.speakUtterances(utterances)
+            if event.type.endswith("system") and event.any_data:
+                if event.any_data != self._lastAutoComplete:
+                    speech.speak(event.any_data)
+                self._lastAutoComplete = event.any_data
         else:
             Gecko.Script.onTextInserted(self, event)
 
+        debug.println(debug.LEVEL_SEVERE, "===========================")
+
     def onVisibleDataChanged(self, event):
         """Called when the visible data of an object changes."""
 
