mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-05 22:20:24 -08:00
Fix omission of updates to child frames on Android
* java/org/gnu/emacs/EmacsView.java (onAttachedFromWindow): Force a layout cycle rather than report exposure immediately. (prepareForLayout): Delete function. * java/org/gnu/emacs/EmacsWindow.java (mapWindow): Remove redundant calls to prepareForLayout. * src/androidterm.c (handle_one_android_event): Do not swap buffers when exposure is registered by a frame only partially updated.
This commit is contained in:
parent
0edacf2aa7
commit
73a58329a6
3 changed files with 22 additions and 23 deletions
|
|
@ -267,13 +267,6 @@ public final class EmacsView extends ViewGroup
|
|||
return canvas;
|
||||
}
|
||||
|
||||
public synchronized void
|
||||
prepareForLayout (int wantedWidth, int wantedHeight)
|
||||
{
|
||||
measuredWidth = wantedWidth;
|
||||
measuredHeight = wantedWidth;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void
|
||||
onMeasure (int widthMeasureSpec, int heightMeasureSpec)
|
||||
|
|
@ -773,23 +766,30 @@ public final class EmacsView extends ViewGroup
|
|||
|
||||
/* Collect the bitmap storage; it could be large. */
|
||||
Runtime.getRuntime ().gc ();
|
||||
|
||||
super.onDetachedFromWindow ();
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void
|
||||
public void
|
||||
onAttachedToWindow ()
|
||||
{
|
||||
isAttachedToWindow = true;
|
||||
synchronized (this)
|
||||
{
|
||||
isAttachedToWindow = true;
|
||||
|
||||
/* Dirty the bitmap, as it was destroyed when onDetachedFromWindow
|
||||
was called. */
|
||||
bitmapDirty = true;
|
||||
/* Dirty the bitmap, as it was destroyed when
|
||||
onDetachedFromWindow was called. */
|
||||
bitmapDirty = true;
|
||||
|
||||
/* Now expose the view contents again. */
|
||||
EmacsNative.sendExpose (this.window.handle, 0, 0,
|
||||
measuredWidth, measuredHeight);
|
||||
/* Rather than unconditionally generating an exposure event upon
|
||||
window attachment, avoid delivering successive Exposure
|
||||
events if the size of the window has changed but is still to
|
||||
be reported by clearing the measured width and height, and
|
||||
requesting another layout computation. */
|
||||
measuredWidth = measuredHeight = 0;
|
||||
}
|
||||
|
||||
requestLayout ();
|
||||
super.onAttachedToWindow ();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -492,7 +492,6 @@ public final class EmacsWindow extends EmacsHandleObject
|
|||
/* Attach the view. */
|
||||
try
|
||||
{
|
||||
view.prepareForLayout (width, height);
|
||||
windowManager.addView (view, params);
|
||||
|
||||
/* Record the window manager being used in the
|
||||
|
|
@ -517,11 +516,6 @@ public final class EmacsWindow extends EmacsHandleObject
|
|||
public void
|
||||
run ()
|
||||
{
|
||||
/* Prior to mapping the view, set its measuredWidth and
|
||||
measuredHeight to some reasonable value, in order to
|
||||
avoid excessive bitmap dirtying. */
|
||||
|
||||
view.prepareForLayout (width, height);
|
||||
view.setVisibility (View.VISIBLE);
|
||||
|
||||
if (!getDontFocusOnMap ())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue