Index: src/orca/default.py
===================================================================
--- src/orca/default.py	(revision 4024)
+++ src/orca/default.py	(working copy)
@@ -3820,31 +3820,34 @@
                     keyString = None
                 mods = orca_state.lastInputEvent.modifiers
                 isControlKey = mods & settings.CTRL_MODIFIER_MASK
-                state = orca_state.locusOfFocus.getState()
+
                 announceState = False
+                if orca_state.locusOfFocus:
+                    state = orca_state.locusOfFocus.getState()
+                    if state.contains(pyatspi.STATE_FOCUSED) and \
+                       self.isSameObject(event.source,
+                                         orca_state.locusOfFocus):
 
-                if state.contains(pyatspi.STATE_FOCUSED) and \
-                   self.isSameObject(event.source, orca_state.locusOfFocus):
+                        if keyString == "space":
+                            if isControlKey:
+                                announceState = True
+                            else:
+                                # Weed out a bogus situation. If we are already
+                                # selected and the user presses "space" again,
+                                # we don't want to speak the intermediate
+                                # "unselected" state.
+                                #
+                                eventState = event.source.getState()
+                                selected = eventState.contains(\
+                                               pyatspi.STATE_SELECTED)
+                                announceState = (selected and event.detail1)
 
-                    if keyString == "space":
-                        if isControlKey:
+                        if (keyString == "Down" or keyString == "Up") \
+                           and event.source.getRole() == \
+                               pyatspi.ROLE_TABLE_CELL \
+                           and state.contains(pyatspi.STATE_SELECTED):
                             announceState = True
-                        else:
-                            # Weed out a bogus situation. If we are already
-                            # selected and the user presses "space" again,
-                            # we don't want to speak the intermediate
-                            # "unselected" state.
-                            #
-                            eventState = event.source.getState()
-                            selected = eventState.contains(\
-                                           pyatspi.STATE_SELECTED)
-                            announceState = (selected and event.detail1)
 
-                    if (keyString == "Down" or keyString == "Up") \
-                       and event.source.getRole() == pyatspi.ROLE_TABLE_CELL \
-                       and state.contains(pyatspi.STATE_SELECTED):
-                        announceState = True
-
                 if announceState:
                     if event.detail1:
                         # Translators: this object is now selected.
