Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2322)
+++ src/orca/Gecko.py	(working copy)
@@ -2343,6 +2343,52 @@
         if newLocusOfFocus and self.inDocumentContent(newLocusOfFocus):
             if newLocusOfFocus.text:
                 caretOffset = newLocusOfFocus.text.caretOffset
+
+                # If the old locusOfFocus was an entry in a toolbar, there's
+                # a good chance that we just returned from performing a find.
+                # If so, and if any text is selected, and move there.
+                #
+                # [[[TODO: HACK - JD if the selected item is not within our
+                # current object, the offsets returned by getSelection() will
+                # both be equal to the last character in the current object.  
+                # What we really need from Firefox is a caret-moved event. In
+                # the meantime, because we are not getting one, we then have
+                # to go looking for the object that contains our selection.]]]
+                #
+                if oldLocusOfFocus.role == rolenames.ROLE_ENTRY and \
+                   oldLocusOfFocus.parent.role == rolenames.ROLE_TOOL_BAR:
+                    nSelections = newLocusOfFocus.text.getNSelections()
+                    if nSelections:
+                        obj = newLocusOfFocus
+                        found = False
+                        while obj and not found:
+                            if obj.text:
+                                [start, end] = obj.text.getSelection(0)
+                                found = (start != end)
+                            if not found:
+                                obj = self.findNextObject(obj)
+                        # If it's not ahead of us, presumably it's behind us.
+                        #
+                        if not found:
+                            obj = newLocusOfFocus
+                            while obj and not found:
+                                if obj.text:
+                                    [start, end] = obj.text.getSelection(0)
+                                    found = (start != end)
+                                if not found:
+                                    obj = self.findPreviousObject(obj)
+
+                        if found:
+                            # We don't want to speak all of the information
+                            # in the hierarchy; we should just read the line
+                            # with focus.
+                            #
+                            self.setCaretPosition(obj, end)
+                            self.updateBraille(obj)
+                            self.speakContents(self.getLineContentsAtOffset(
+                                                                    obj, end))
+                            return
+
             else:
                 caretOffset = 0
             self.caretContext = self.findFirstCaretContext(newLocusOfFocus,
