diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java index 10c1af9e19a..124ea5301bb 100644 --- a/java/org/gnu/emacs/EmacsView.java +++ b/java/org/gnu/emacs/EmacsView.java @@ -356,16 +356,23 @@ else if (child.getVisibility () != GONE) damageRect = null; + /* Now see if there is a damage region. */ + synchronized (damageRegion) { if (damageRegion.isEmpty ()) return; + /* And extract and clear the damage region. */ + + damageRect = damageRegion.getBounds (); + damageRegion.setEmpty (); + bitmap = getBitmap (); /* Transfer the bitmap to the surface view, then invalidate it. */ - surfaceView.setBitmap (bitmap, damageRect); + surfaceView.setBitmap (bitmap, damageRect); } } @@ -545,20 +552,17 @@ else if (child.getVisibility () != GONE) { isAttachedToWindow = false; - synchronized (this) - { - /* Recycle the bitmap and call GC. */ + /* Recycle the bitmap and call GC. */ - if (bitmap != null) - bitmap.recycle (); + if (bitmap != null) + bitmap.recycle (); - bitmap = null; - canvas = null; - surfaceView.setBitmap (null, null); + bitmap = null; + canvas = null; + surfaceView.setBitmap (null, null); - /* Collect the bitmap storage; it could be large. */ - Runtime.getRuntime ().gc (); - } + /* Collect the bitmap storage; it could be large. */ + Runtime.getRuntime ().gc (); super.onDetachedFromWindow (); }