Android: Create QtWindow layout and set parent in the calling thread
In the QtWindow constructor, creation of the layout and setting the parent window were posted on the Android UI thread, leading to them being called at a later point. If QAndroidPlatformWindow did not have a parent at the point it was created in, but setParent() was called shortly after, the QtWindow.setParent() call with the actual intended parent got invoked before the Runnable posted in the constructor got ran, leading to the parent being overwritten with the null one passed to the constructor, essentially leaving the QtWindow as a top level one, while the QAndroidPlatformWindow was a child window. The above would happen more often with foreign child windows, sometimes causing hang ups when the parent of the foreign child window was shown. Creating the QtLayout outside of the Android UI thread seems to be safe, as long as we only modify its view hierarchy inside it. Pick-to: 6.7 Task-number: QTBUG-116187 Change-Id: If1ed1983f5d6ba56e625148ee6a61771234a2aa1 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>bb10
parent
8feb41e446
commit
8df46c8890
|
|
@ -29,9 +29,9 @@ public class QtWindow implements QtSurfaceInterface, QtLayout.QtTouchListener {
|
|||
public QtWindow(Context context, QtWindow parentWindow)
|
||||
{
|
||||
m_id = View.generateViewId();
|
||||
m_layout = new QtLayout(context, this);
|
||||
setParent(parentWindow);
|
||||
QtNative.runAction(() -> {
|
||||
m_layout = new QtLayout(context, this);
|
||||
setParent(parentWindow);
|
||||
m_gestureDetector =
|
||||
new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
|
||||
public void onLongPress(MotionEvent event) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue