Fix menu and popup race conditions on Android
* java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed): * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu) (onMenuItemClick, run): * java/org/gnu/emacs/EmacsDialog.java (EmacsDialog, onClick) (createDialog, onDismiss): Take menu event serial, and pass it along in context menu events. * java/org/gnu/emacs/EmacsNative.java (sendContextMenu): New argument. * src/android.c (sendContextMenu): Pass serial number in event. * src/androidgui.h (struct android_menu_event): New field `menu_event_serial'. * src/androidmenu.c (FIND_METHOD_STATIC) (android_init_emacs_context_menu): Adjust method declarations. (android_menu_show, android_dialog_show): * src/androidterm.c (handle_one_android_event): Expect serial in context menu events. * src/androidterm.h: Update prototypes.
This commit is contained in:
@@ -315,6 +315,8 @@ public class EmacsActivity extends Activity
|
||||
public final void
|
||||
onContextMenuClosed (Menu menu)
|
||||
{
|
||||
int serial;
|
||||
|
||||
Log.d (TAG, "onContextMenuClosed: " + menu);
|
||||
|
||||
/* See the comment inside onMenuItemClick. */
|
||||
@@ -335,7 +337,11 @@ public class EmacsActivity extends Activity
|
||||
/* Send a context menu event given that no menu item has already
|
||||
been selected. */
|
||||
if (!EmacsContextMenu.itemAlreadySelected)
|
||||
EmacsNative.sendContextMenu ((short) 0, 0);
|
||||
{
|
||||
serial = EmacsContextMenu.lastMenuEventSerial;
|
||||
EmacsNative.sendContextMenu ((short) 0, 0,
|
||||
serial);
|
||||
}
|
||||
|
||||
super.onContextMenuClosed (menu);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user