Index: src/orca/Gecko.py
===================================================================
--- src/orca/Gecko.py	(revision 2432)
+++ src/orca/Gecko.py	(working copy)
@@ -902,7 +902,8 @@
              Script.goNextWord,
              Script.goPreviousWord,
              Script.goNextLine,
-             Script.goPreviousLine]
+             Script.goPreviousLine,
+             Script.expandComboBox]
 
         # _structuralNavigationFunctions are functions that represent
         # more complex navigation functions (e.g., moving by heading,
@@ -1056,6 +1057,14 @@
                 #
                 _("Goes to previous line."))
 
+        self.inputEventHandlers["expandComboBoxHandler"] = \
+            input_event.InputEventHandler(
+                Script.expandComboBox,
+                # Translators: this is for causing a collapsed combo box
+                # which was reached by Orca's caret navigation to be expanded.
+                #
+                _("Causes the current combo box to be expanded."))
+
         self.inputEventHandlers["goCellLeftHandler"] = \
             input_event.InputEventHandler(
                 Script.goCellLeft,
@@ -1457,6 +1466,15 @@
 
         keyBindings.add(
             keybindings.KeyBinding(
+                "Down",
+                (1 << atspi.Accessibility.MODIFIER_CONTROL \
+                 | 1 << atspi.Accessibility.MODIFIER_SHIFT \
+                 | 1 << atspi.Accessibility.MODIFIER_ALT),
+                1 << atspi.Accessibility.MODIFIER_ALT,
+                self.inputEventHandlers["expandComboBoxHandler"]))
+
+        keyBindings.add(
+            keybindings.KeyBinding(
                 "Right",
                 (1 << atspi.Accessibility.MODIFIER_CONTROL \
                  | 1 << atspi.Accessibility.MODIFIER_SHIFT \
@@ -3539,7 +3557,8 @@
             # they are for things like going back in history and
             # opening and closing combo boxes.
             #
-            weHandleIt = False
+            weHandleIt = (keyboardEvent.event_string == "Down") \
+                         and obj.role == rolenames.ROLE_MENU_ITEM
 
         elif obj and (obj.role == rolenames.ROLE_COMBO_BOX):
             # We'll let Firefox handle the navigation of combo boxes.
@@ -5436,6 +5455,27 @@
         #contents = self.getLineContentsAtOffset(nextObj, nextCharOffset)
         #self.dumpContents(inputEvent, contents)
 
+    def expandComboBox(self, inputEvent):
+        """If focus is on a menu item, but the containing combo box does not
+        have focus, give the combo box focus and expand it.  Note that this
+        is necessary because with Orca controlling the caret it is possible
+        to arrow to a menu item without actually giving the containing combo
+        box focus.
+        """
+        [obj, characterOffset] = self.getCaretContext()
+        if obj.role == rolenames.ROLE_MENU_ITEM:
+            comboBox = self.getContainingRole(obj, rolenames.ROLE_COMBO_BOX)
+            if comboBox and comboBox.action:
+                orca.setLocusOfFocus(None, comboBox, False)
+                focusGrabbed = comboBox.component.grabFocus()
+                name = None
+                for i in range(0, comboBox.action.nActions):
+                    name = comboBox.action.getName(i)
+                    if name == "open":
+                        break
+                if name:
+                    success = comboBox.action.doAction(i)
+        
     def goPreviousHeading(self, inputEvent):
         wrap = True
         [obj, wrapped] = self.findPreviousRole([rolenames.ROLE_HEADING], wrap)
