Prevent focus "stalemates" on Android
* java/org/gnu/emacs/EmacsActivity.java (invalidateFocus1): New argument resetWhenChildless. (invalidateFocus): If a toplevel window has no focus window, transfer focus to the toplevel itself.
This commit is contained in:
parent
728bf2c9e5
commit
b7b9a0a5c1
1 changed files with 14 additions and 3 deletions
|
@ -84,7 +84,7 @@ public class EmacsActivity extends Activity
|
|||
};
|
||||
|
||||
public static void
|
||||
invalidateFocus1 (EmacsWindow window)
|
||||
invalidateFocus1 (EmacsWindow window, boolean resetWhenChildless)
|
||||
{
|
||||
if (window.view.isFocused ())
|
||||
focusedWindow = window;
|
||||
|
@ -92,7 +92,18 @@ public class EmacsActivity extends Activity
|
|||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,7 +121,7 @@ public class EmacsActivity extends Activity
|
|||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue