summaryrefslogtreecommitdiff
path: root/java/org/gnu
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/gnu')
-rw-r--r--java/org/gnu/emacs/EmacsSurfaceView.java54
-rw-r--r--java/org/gnu/emacs/EmacsView.java58
2 files changed, 27 insertions, 85 deletions
diff --git a/java/org/gnu/emacs/EmacsSurfaceView.java b/java/org/gnu/emacs/EmacsSurfaceView.java
index 2fe9e103b2b..f6cb77bb2b8 100644
--- a/java/org/gnu/emacs/EmacsSurfaceView.java
+++ b/java/org/gnu/emacs/EmacsSurfaceView.java
@@ -45,14 +45,11 @@ public class EmacsSurfaceView extends SurfaceView
surfaceChanged (SurfaceHolder holder, int format,
int width, int height)
{
- Log.d (TAG, "surfaceChanged: " + view + ", " + view.pendingConfigure);
+ Canvas canvas;
- /* Make sure not to swap buffers if there is pending
- configuration, because otherwise the redraw callback will not
- run correctly. */
+ Log.d (TAG, "surfaceChanged: " + view + ", ");
- if (view.pendingConfigure == 0)
- view.swapBuffers ();
+ view.swapBuffers (true);
}
@Override
@@ -67,7 +64,7 @@ public class EmacsSurfaceView extends SurfaceView
/* Drop the lock when doing this, or a deadlock can
result. */
- view.swapBuffers ();
+ view.swapBuffers (true);
}
@Override
@@ -82,44 +79,6 @@ public class EmacsSurfaceView extends SurfaceView
}
}
- /* And this is the callback used on Android 26 and later. It is
- used because it can tell the system when drawing completes. */
-
- private class Callback2 extends Callback implements SurfaceHolder.Callback2
- {
- @Override
- public void
- surfaceRedrawNeeded (SurfaceHolder holder)
- {
- /* This version is not supported. */
- return;
- }
-
- @Override
- public void
- surfaceRedrawNeededAsync (SurfaceHolder holder,
- Runnable drawingFinished)
- {
- Runnable old;
-
- Log.d (TAG, "surfaceRedrawNeededAsync: " + view.pendingConfigure);
-
- /* The system calls this function when it wants to know whether
- or not Emacs is still configuring itself in response to a
- resize.
-
- If the view did not send an outstanding ConfigureNotify
- event, then call drawingFinish immediately. Else, give it to
- the view to execute after drawing completes. */
-
- if (view.pendingConfigure == 0)
- drawingFinished.run ();
- else
- /* And set this runnable to run once drawing completes. */
- view.drawingFinished = drawingFinished;
- }
- }
-
public
EmacsSurfaceView (final EmacsView view)
{
@@ -128,10 +87,7 @@ public class EmacsSurfaceView extends SurfaceView
this.surfaceChangeLock = new Object ();
this.view = view;
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
- getHolder ().addCallback (new Callback ());
- else
- getHolder ().addCallback (new Callback2 ());
+ getHolder ().addCallback (new Callback ());
}
public boolean
diff --git a/java/org/gnu/emacs/EmacsView.java b/java/org/gnu/emacs/EmacsView.java
index 873124c86d1..fac11870ebf 100644
--- a/java/org/gnu/emacs/EmacsView.java
+++ b/java/org/gnu/emacs/EmacsView.java
@@ -96,13 +96,6 @@ public class EmacsView extends ViewGroup
/* The InputMethodManager for this view's context. */
private InputMethodManager imManager;
- /* Runnable that will run once drawing completes. */
- public Runnable drawingFinished;
-
- /* Serial of the last ConfigureNotify event sent that Emacs has not
- yet responded to. 0 if there is no such outstanding event. */
- public long pendingConfigure;
-
/* Whether or not this view is attached to a window. */
public boolean isAttachedToWindow;
@@ -110,6 +103,14 @@ public class EmacsView extends ViewGroup
displayed whenever possible. */
public boolean isCurrentlyTextEditor;
+ /* An empty rectangle. */
+ public static final Rect emptyRect;
+
+ static
+ {
+ emptyRect = new Rect ();
+ };
+
public
EmacsView (EmacsWindow window)
{
@@ -286,16 +287,10 @@ public class EmacsView extends ViewGroup
int count, i;
View child;
Rect windowRect;
+ int wantedWidth, wantedHeight;
count = getChildCount ();
- if (changed || mustReportLayout)
- {
- mustReportLayout = false;
- pendingConfigure
- = window.viewLayout (left, top, right, bottom);
- }
-
measuredWidth = right - left;
measuredHeight = bottom - top;
@@ -311,8 +306,6 @@ public class EmacsView extends ViewGroup
Log.d (TAG, "onLayout: " + child);
if (child == surfaceView)
- /* The child is the surface view, so give it the entire
- view. */
child.layout (0, 0, right - left, bottom - top);
else if (child.getVisibility () != GONE)
{
@@ -326,6 +319,14 @@ public class EmacsView extends ViewGroup
windowRect.right, windowRect.bottom);
}
}
+
+ /* Now report the layout change to the window. */
+
+ if (changed || mustReportLayout)
+ {
+ mustReportLayout = false;
+ window.viewLayout (left, top, right, bottom);
+ }
}
public void
@@ -352,7 +353,7 @@ public class EmacsView extends ViewGroup
synchronized (damageRegion)
{
- if (damageRegion.isEmpty ())
+ if (!force && damageRegion.isEmpty ())
return;
bitmap = getBitmap ();
@@ -363,7 +364,10 @@ public class EmacsView extends ViewGroup
synchronized (surfaceView.surfaceChangeLock)
{
- damageRect = damageRegion.getBounds ();
+ if (!force)
+ damageRect = damageRegion.getBounds ();
+ else
+ damageRect = emptyRect;
if (!surfaceView.isCreated ())
return;
@@ -612,24 +616,6 @@ public class EmacsView extends ViewGroup
isCurrentlyTextEditor = false;
}
- public void
- windowUpdated (long serial)
- {
- Log.d (TAG, "windowUpdated: serial is " + serial);
-
- if (pendingConfigure <= serial
- /* Detect wraparound. */
- || pendingConfigure - serial >= 0x7fffffff)
- {
- pendingConfigure = 0;
-
- if (drawingFinished != null)
- drawingFinished.run ();
-
- drawingFinished = null;
- }
- }
-
@Override
public InputConnection
onCreateInputConnection (EditorInfo info)