mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 20:00:46 -08:00
Fix displaying popup menus from a menu entry on Android
* java/org/gnu/emacs/EmacsActivity.java (EmacsActivity, onDestroy) (onWindowFocusChanged): Keep track of the last focused activity. * java/org/gnu/emacs/EmacsDialog.java (display1): Use it if there is no current focus.
This commit is contained in:
parent
c4c34f72a1
commit
ab48881a2f
2 changed files with 35 additions and 4 deletions
|
|
@ -47,6 +47,9 @@ public class EmacsActivity extends Activity
|
|||
/* List of activities with focus. */
|
||||
public static List<EmacsActivity> focusedActivities;
|
||||
|
||||
/* The last activity to have been focused. */
|
||||
public static EmacsActivity lastFocusedActivity;
|
||||
|
||||
/* The currently focused window. */
|
||||
public static EmacsWindow focusedWindow;
|
||||
|
||||
|
|
@ -215,6 +218,11 @@ public class EmacsActivity extends Activity
|
|||
manager.removeWindowConsumer (this, isMultitask || isFinishing ());
|
||||
focusedActivities.remove (this);
|
||||
invalidateFocus ();
|
||||
|
||||
/* Remove this activity from the static field, lest it leak. */
|
||||
if (lastFocusedActivity == this)
|
||||
lastFocusedActivity = null;
|
||||
|
||||
super.onDestroy ();
|
||||
}
|
||||
|
||||
|
|
@ -223,7 +231,10 @@ public class EmacsActivity extends Activity
|
|||
onWindowFocusChanged (boolean isFocused)
|
||||
{
|
||||
if (isFocused && !focusedActivities.contains (this))
|
||||
focusedActivities.add (this);
|
||||
{
|
||||
focusedActivities.add (this);
|
||||
lastFocusedActivity = this;
|
||||
}
|
||||
else
|
||||
focusedActivities.remove (this);
|
||||
|
||||
|
|
|
|||
|
|
@ -230,11 +230,31 @@ public class EmacsDialog implements DialogInterface.OnDismissListener
|
|||
AlertDialog dialog;
|
||||
|
||||
if (EmacsActivity.focusedActivities.isEmpty ())
|
||||
return false;
|
||||
{
|
||||
/* If focusedActivities is empty then this dialog may have
|
||||
been displayed immediately after a popup dialog is
|
||||
dismissed. */
|
||||
|
||||
activity = EmacsActivity.lastFocusedActivity;
|
||||
|
||||
if (activity == null)
|
||||
return false;
|
||||
}
|
||||
else
|
||||
activity = EmacsActivity.focusedActivities.get (0);
|
||||
|
||||
activity = EmacsActivity.focusedActivities.get (0);
|
||||
dialog = dismissDialog = toAlertDialog (activity);
|
||||
dismissDialog.show ();
|
||||
|
||||
try
|
||||
{
|
||||
dismissDialog.show ();
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
/* This can happen when the system decides Emacs is not in the
|
||||
foreground any longer. */
|
||||
return false;
|
||||
}
|
||||
|
||||
/* If there are less than four buttons, then they must be
|
||||
individually enabled or disabled after the dialog is
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue