diff options
| author | Po Lu | 2025-02-17 11:33:50 +0800 |
|---|---|---|
| committer | Po Lu | 2025-02-17 11:33:50 +0800 |
| commit | e3dc0ea2544dc09908546c6e6baba47371cbc176 (patch) | |
| tree | eb2ff5e6a1346d74183512d39193ce50f63b9dad | |
| parent | e34ea5db5f1c09582e3779828ba248eec5769eb2 (diff) | |
| download | emacs-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.
| -rw-r--r-- | java/org/gnu/emacs/EmacsWindow.java | 10 |
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 | ||