Fix remaining Android bugs reported over the past months
* java/org/gnu/emacs/EmacsActivity.java (attachWindow): Guarantee that child windows promoted to toplevels receive layout parameters that direct them to receive their parents' dimensions. Otherwise, the size of the window as a child is retained on Huawei HarmonyOS 4.2 and possibly other Android distributions. * java/org/gnu/emacs/EmacsService.java (updateCursorAnchorInfo): Run anchor updates on the UI thread, as `InputMethodManager#updateCursorAnchorInfo' is liable to call `View#requestLayout'. * java/org/gnu/emacs/EmacsView.java (onMeasure): Always call `measureChildren', or child frames' onLayout handlers might not be invoked after they request a layout cycle and are duly processed in `onLayout'. (swapBuffers): Delete erroneous commentary. * java/org/gnu/emacs/EmacsWindow.java (viewLayout): If overrideRedirect, don't inadvertently clear rect.left and rect.top by recording the window's WM window-relative position. Fix typos. (reparentTo): Invalidate focus after transferring frame. (translateCoordinates): Account for override-redirect windows. Mostly important for mouse-drag-and-drop-region.
This commit is contained in:
@@ -179,6 +179,8 @@ public class EmacsActivity extends Activity
|
||||
public final void
|
||||
attachWindow (EmacsWindow child)
|
||||
{
|
||||
FrameLayout.LayoutParams defaultParams;
|
||||
|
||||
if (window != null)
|
||||
throw new IllegalStateException ("trying to attach window when one"
|
||||
+ " already exists");
|
||||
@@ -187,8 +189,15 @@ public class EmacsActivity extends Activity
|
||||
|
||||
/* Record and attach the view. */
|
||||
|
||||
/* Reset residual LayoutParams that might remain in effect on this
|
||||
window, or some distributions of Android (e.g. Huawei HarmonyOS
|
||||
4.2) will retain the size of this window as a child frame. */
|
||||
defaultParams
|
||||
= new FrameLayout.LayoutParams (FrameLayout.LayoutParams.MATCH_PARENT,
|
||||
FrameLayout.LayoutParams.MATCH_PARENT);
|
||||
syncFullscreenWith (child);
|
||||
window = child;
|
||||
layout.addView (window.view);
|
||||
layout.addView (window.view, defaultParams);
|
||||
child.setConsumer (this);
|
||||
|
||||
/* If the window isn't no-focus-on-map, focus its view. */
|
||||
|
||||
Reference in New Issue
Block a user