[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master b7b9a0a5c1a 2/2: Prevent focus "stalemates" on Android
From: |
Po Lu |
Subject: |
master b7b9a0a5c1a 2/2: Prevent focus "stalemates" on Android |
Date: |
Mon, 25 Mar 2024 22:55:30 -0400 (EDT) |
branch: master
commit b7b9a0a5c1afae07b8168e85dcf1fc37d29e98ef
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
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.
---
java/org/gnu/emacs/EmacsActivity.java | 17 ++++++++++++++---
1 file 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