emacs-diffs
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]