};
public static void
- invalidateFocus1 (EmacsWindow window)
+ invalidateFocus1 (EmacsWindow window, boolean resetWhenChildless)
{
if (window.view.isFocused ())
focusedWindow = window;
synchronized (window.children)
{
for (EmacsWindow child : window.children)
- invalidateFocus1 (child);
+ invalidateFocus1 (child, false);
+
+ /* If no focused window was previously detected among WINDOW's
+ children and RESETWHENCHILDLESS is set (implying it is a
+ toplevel window), request that it be focused, to avoid
+ creating a situation where no windows exist focused or can be
+ transferred the input focus by user action. */
+ if (focusedWindow == null && resetWhenChildless)
+ {
+ window.view.requestFocus ();
+ focusedWindow = window;
+ }
}
}
for (EmacsActivity activity : focusedActivities)
{
if (activity.window != null)
- invalidateFocus1 (activity.window);
+ invalidateFocus1 (activity.window, focusedWindow == null);
}
/* Send focus in- and out- events to the previous and current