aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorPo Lu2025-02-17 11:33:50 +0800
committerPo Lu2025-02-17 11:33:50 +0800
commite3dc0ea2544dc09908546c6e6baba47371cbc176 (patch)
treeeb2ff5e6a1346d74183512d39193ce50f63b9dad /java
parente34ea5db5f1c09582e3779828ba248eec5769eb2 (diff)
downloademacs-e3dc0ea2544dc09908546c6e6baba47371cbc176.tar.gz
emacs-e3dc0ea2544dc09908546c6e6baba47371cbc176.zip
Fix crash in frame deletion on Android
* java/org/gnu/emacs/EmacsWindow.java (destroyHandle): Invalidate the input focus in the UI thread, as is proper.
Diffstat (limited to 'java')
-rw-r--r--java/org/gnu/emacs/EmacsWindow.java10
1 files changed, 8 insertions, 2 deletions
diff --git a/java/org/gnu/emacs/EmacsWindow.java b/java/org/gnu/emacs/EmacsWindow.java
index f935850b22b..fec95526835 100644
--- a/java/org/gnu/emacs/EmacsWindow.java
+++ b/java/org/gnu/emacs/EmacsWindow.java
@@ -271,20 +271,26 @@ public final class EmacsWindow extends EmacsHandleObject
271 } 271 }
272 } 272 }
273 273
274 EmacsActivity.invalidateFocus (4); 274 /* This is just a sanity test and is not reliable since `children'
275 275 may be modified between isEmpty and handle destruction. */
276 if (!children.isEmpty ()) 276 if (!children.isEmpty ())
277 throw new IllegalStateException ("Trying to destroy window with " 277 throw new IllegalStateException ("Trying to destroy window with "
278 + "children!"); 278 + "children!");
279 279
280 /* Remove the view from its parent and make it invisible. */ 280 /* Remove the view from its parent and make it invisible. */
281 EmacsService.SERVICE.runOnUiThread (new Runnable () { 281 EmacsService.SERVICE.runOnUiThread (new Runnable () {
282 @Override
282 public void 283 public void
283 run () 284 run ()
284 { 285 {
285 ViewManager parent; 286 ViewManager parent;
286 EmacsWindowManager manager; 287 EmacsWindowManager manager;
287 288
289 /* Invalidate the focus; this should transfer the input focus
290 to the next eligible window as this window is no longer
291 present in parent.children. */
292 EmacsActivity.invalidateFocus (4);
293
288 if (EmacsActivity.focusedWindow == EmacsWindow.this) 294 if (EmacsActivity.focusedWindow == EmacsWindow.this)
289 EmacsActivity.focusedWindow = null; 295 EmacsActivity.focusedWindow = null;
290 296