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.java33
1 files changed, 20 insertions, 13 deletions
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java
index 136d8abc713..109208b2518 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -456,7 +456,6 @@ public final class EmacsView extends ViewGroup
{
Canvas canvas;
Rect damageRect;
- Bitmap bitmap;
/* Make sure this function is called only from the Emacs
thread. */
@@ -474,11 +473,12 @@ public final class EmacsView extends ViewGroup
damageRect = damageRegion.getBounds ();
damageRegion.setEmpty ();
- bitmap = getBitmap ();
-
- /* Transfer the bitmap to the surface view, then invalidate
- it. */
- surfaceView.setBitmap (bitmap, damageRect);
+ synchronized (this)
+ {
+ /* Transfer the bitmap to the surface view, then invalidate
+ it. */
+ surfaceView.setBitmap (bitmap, damageRect);
+ }
}
@Override
@@ -724,17 +724,20 @@ public final class EmacsView extends ViewGroup
public synchronized void
onDetachedFromWindow ()
{
- isAttachedToWindow = false;
-
- /* Recycle the bitmap and call GC. */
-
- if (bitmap != null)
- bitmap.recycle ();
+ Bitmap savedBitmap;
+ savedBitmap = bitmap;
+ isAttachedToWindow = false;
bitmap = null;
canvas = null;
+
surfaceView.setBitmap (null, null);
+ /* Recycle the bitmap and call GC. */
+
+ if (savedBitmap != null)
+ savedBitmap.recycle ();
+
/* Collect the bitmap storage; it could be large. */
Runtime.getRuntime ().gc ();
@@ -835,9 +838,13 @@ public final class EmacsView extends ViewGroup
EmacsNative.requestSelectionUpdate (window.handle);
}
- if (mode == EmacsService.IC_MODE_ACTION)
+ if (mode == EmacsService.IC_MODE_ACTION
+ || mode == EmacsService.IC_MODE_PASSWORD)
info.imeOptions |= EditorInfo.IME_ACTION_DONE;
+ if (mode == EmacsService.IC_MODE_PASSWORD)
+ info.inputType |= InputType.TYPE_TEXT_VARIATION_PASSWORD;
+
/* Set the initial selection fields. */
info.initialSelStart = selection[0];
info.initialSelEnd = selection[1];