Handle native views visibility properly.
Hide the native view in constructor and in destructor. Task-number: QTBUG-40159 Change-Id: I200b28af9ac2928c38299b71395a97e39f1bbe6d Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
This commit is contained in:
parent
397061a6a9
commit
fd639b7adc
@ -214,6 +214,16 @@ public class QtNative
|
||||
});
|
||||
}
|
||||
|
||||
private static void setViewVisibility(final View view, final boolean visible)
|
||||
{
|
||||
runAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
view.setVisibility(visible ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean startApplication(String params,
|
||||
String environment,
|
||||
String mainLibrary,
|
||||
|
@ -356,6 +356,15 @@ namespace QtAndroid
|
||||
return surfaceId;
|
||||
}
|
||||
|
||||
void setViewVisibility(jobject view, bool visible)
|
||||
{
|
||||
QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass,
|
||||
"setViewVisibility",
|
||||
"(Landroid/view/View;Z)V",
|
||||
view,
|
||||
visible);
|
||||
}
|
||||
|
||||
void setSurfaceGeometry(int surfaceId, const QRect &geometry)
|
||||
{
|
||||
if (surfaceId == -1)
|
||||
|
@ -62,6 +62,7 @@ namespace QtAndroid
|
||||
|
||||
int createSurface(AndroidSurfaceClient * client, const QRect &geometry, bool onTop, int imageDepth);
|
||||
int insertNativeView(jobject view, const QRect &geometry);
|
||||
void setViewVisibility(jobject view, bool visible);
|
||||
void setSurfaceGeometry(int surfaceId, const QRect &geometry);
|
||||
void destroySurface(int surfaceId);
|
||||
void bringChildToFront(int surfaceId);
|
||||
|
@ -45,10 +45,14 @@ QAndroidPlatformForeignWindow::QAndroidPlatformForeignWindow(QWindow *window)
|
||||
{
|
||||
const WId wId = window->property("_q_foreignWinId").value<WId>();
|
||||
m_view = reinterpret_cast<jobject>(wId);
|
||||
if (m_view.isValid())
|
||||
QtAndroid::setViewVisibility(m_view.object(), false);
|
||||
}
|
||||
|
||||
QAndroidPlatformForeignWindow::~QAndroidPlatformForeignWindow()
|
||||
{
|
||||
if (m_view.isValid())
|
||||
QtAndroid::setViewVisibility(m_view.object(), false);
|
||||
if (m_surfaceId != -1)
|
||||
QtAndroid::destroySurface(m_surfaceId);
|
||||
}
|
||||
@ -84,8 +88,9 @@ void QAndroidPlatformForeignWindow::setVisible(bool visible)
|
||||
if (!m_view.isValid())
|
||||
return;
|
||||
|
||||
QAndroidPlatformWindow::setVisible(visible);
|
||||
QtAndroid::setViewVisibility(m_view.object(), visible);
|
||||
|
||||
QAndroidPlatformWindow::setVisible(visible);
|
||||
if (!visible && m_surfaceId != -1) {
|
||||
QtAndroid::destroySurface(m_surfaceId);
|
||||
m_surfaceId = -1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user