diff options
author | Po Lu <luangruo@yahoo.com> | 2024-03-26 10:54:39 +0800 |
---|---|---|
committer | Po Lu <luangruo@yahoo.com> | 2024-03-26 10:54:39 +0800 |
commit | b7b9a0a5c1afae07b8168e85dcf1fc37d29e98ef (patch) | |
tree | 0bdab8fad62deebd6d71c8d7df9ebc6ef525a7e0 | |
parent | 728bf2c9e5353e68b16808ae455223549c16efc6 (diff) | |
download | emacs-b7b9a0a5c1afae07b8168e85dcf1fc37d29e98ef.tar.gz emacs-b7b9a0a5c1afae07b8168e85dcf1fc37d29e98ef.tar.bz2 emacs-b7b9a0a5c1afae07b8168e85dcf1fc37d29e98ef.zip |
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.
-rw-r--r-- | java/org/gnu/emacs/EmacsActivity.java | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/java/org/gnu/emacs/EmacsActivity.java b/java/org/gnu/emacs/EmacsActivity.java index 06b9c0f005d..6ab6a709bef 100644 --- a/java/org/gnu/emacs/EmacsActivity.java +++ b/java/org/gnu/emacs/EmacsActivity.java @@ -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 |