]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix crash in frame deletion on Android
authorPo Lu <luangruo@yahoo.com>
Mon, 17 Feb 2025 03:33:50 +0000 (11:33 +0800)
committerEshel Yaron <me@eshelyaron.com>
Tue, 18 Feb 2025 08:47:13 +0000 (09:47 +0100)
* java/org/gnu/emacs/EmacsWindow.java (destroyHandle):
Invalidate the input focus in the UI thread, as is proper.

(cherry picked from commit e3dc0ea2544dc09908546c6e6baba47371cbc176)

java/org/gnu/emacs/EmacsWindow.java

index 241927d8f1b11998a48828752baef1aef67964b2..b91d2de46d9346b59d7d6fc0e1feff1581558960 100644 (file)
@@ -271,20 +271,26 @@ public final class EmacsWindow extends EmacsHandleObject
          }
       }
 
-    EmacsActivity.invalidateFocus (4);
-
+    /* This is just a sanity test and is not reliable since `children'
+       may be modified between isEmpty and handle destruction.  */
     if (!children.isEmpty ())
       throw new IllegalStateException ("Trying to destroy window with "
                                       + "children!");
 
     /* Remove the view from its parent and make it invisible.  */
     EmacsService.SERVICE.runOnUiThread (new Runnable () {
+       @Override
        public void
        run ()
        {
          ViewManager parent;
          EmacsWindowManager manager;
 
+         /* Invalidate the focus; this should transfer the input focus
+            to the next eligible window as this window is no longer
+            present in parent.children.  */
+         EmacsActivity.invalidateFocus (4);
+
          if (EmacsActivity.focusedWindow == EmacsWindow.this)
            EmacsActivity.focusedWindow = null;