summaryrefslogtreecommitdiff
path: root/java/org/gnu/emacs/EmacsView.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu/emacs/EmacsView.java')
-rw-r--r--java/org/gnu/emacs/EmacsView.java47
1 files changed, 47 insertions, 0 deletions
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java
index 41acabab97b..1391f630be0 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -21,6 +21,7 @@ package org.gnu.emacs;
import android.content.res.ColorStateList;
+import android.view.ContextMenu;
import android.view.View;
import android.view.KeyEvent;
import android.view.MotionEvent;
@@ -73,6 +74,12 @@ public class EmacsView extends ViewGroup
next call to getBitmap. */
private Rect bitmapDirty;
+ /* Whether or not a popup is active. */
+ private boolean popupActive;
+
+ /* The current context menu. */
+ private EmacsContextMenu contextMenu;
+
public
EmacsView (EmacsWindow window)
{
@@ -98,6 +105,10 @@ public class EmacsView extends ViewGroup
/* Get rid of the foreground and background tint. */
setBackgroundTintList (null);
setForegroundTintList (null);
+
+ /* Get rid of the default focus highlight. */
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O)
+ setDefaultFocusHighlightEnabled (false);
}
private void
@@ -423,4 +434,40 @@ public class EmacsView extends ViewGroup
removeView (surfaceView);
addView (surfaceView, 0);
}
+
+ @Override
+ protected void
+ onCreateContextMenu (ContextMenu menu)
+ {
+ if (contextMenu == null)
+ return;
+
+ contextMenu.expandTo (menu);
+ }
+
+ public boolean
+ popupMenu (EmacsContextMenu menu, int xPosition,
+ int yPosition)
+ {
+ if (popupActive)
+ return false;
+
+ contextMenu = menu;
+
+ /* On API 21 or later, use showContextMenu (float, float). */
+ if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
+ return showContextMenu ((float) xPosition, (float) yPosition);
+ else
+ return showContextMenu ();
+ }
+
+ public void
+ cancelPopupMenu ()
+ {
+ if (!popupActive)
+ throw new IllegalStateException ("cancelPopupMenu called without"
+ + " popupActive set");
+
+ contextMenu = null;
+ }
};