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,
|
public static boolean startApplication(String params,
|
||||||
String environment,
|
String environment,
|
||||||
String mainLibrary,
|
String mainLibrary,
|
||||||
|
@ -356,6 +356,15 @@ namespace QtAndroid
|
|||||||
return surfaceId;
|
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)
|
void setSurfaceGeometry(int surfaceId, const QRect &geometry)
|
||||||
{
|
{
|
||||||
if (surfaceId == -1)
|
if (surfaceId == -1)
|
||||||
|
@ -62,6 +62,7 @@ namespace QtAndroid
|
|||||||
|
|
||||||
int createSurface(AndroidSurfaceClient * client, const QRect &geometry, bool onTop, int imageDepth);
|
int createSurface(AndroidSurfaceClient * client, const QRect &geometry, bool onTop, int imageDepth);
|
||||||
int insertNativeView(jobject view, const QRect &geometry);
|
int insertNativeView(jobject view, const QRect &geometry);
|
||||||
|
void setViewVisibility(jobject view, bool visible);
|
||||||
void setSurfaceGeometry(int surfaceId, const QRect &geometry);
|
void setSurfaceGeometry(int surfaceId, const QRect &geometry);
|
||||||
void destroySurface(int surfaceId);
|
void destroySurface(int surfaceId);
|
||||||
void bringChildToFront(int surfaceId);
|
void bringChildToFront(int surfaceId);
|
||||||
|
@ -45,10 +45,14 @@ QAndroidPlatformForeignWindow::QAndroidPlatformForeignWindow(QWindow *window)
|
|||||||
{
|
{
|
||||||
const WId wId = window->property("_q_foreignWinId").value<WId>();
|
const WId wId = window->property("_q_foreignWinId").value<WId>();
|
||||||
m_view = reinterpret_cast<jobject>(wId);
|
m_view = reinterpret_cast<jobject>(wId);
|
||||||
|
if (m_view.isValid())
|
||||||
|
QtAndroid::setViewVisibility(m_view.object(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
QAndroidPlatformForeignWindow::~QAndroidPlatformForeignWindow()
|
QAndroidPlatformForeignWindow::~QAndroidPlatformForeignWindow()
|
||||||
{
|
{
|
||||||
|
if (m_view.isValid())
|
||||||
|
QtAndroid::setViewVisibility(m_view.object(), false);
|
||||||
if (m_surfaceId != -1)
|
if (m_surfaceId != -1)
|
||||||
QtAndroid::destroySurface(m_surfaceId);
|
QtAndroid::destroySurface(m_surfaceId);
|
||||||
}
|
}
|
||||||
@ -84,8 +88,9 @@ void QAndroidPlatformForeignWindow::setVisible(bool visible)
|
|||||||
if (!m_view.isValid())
|
if (!m_view.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QAndroidPlatformWindow::setVisible(visible);
|
QtAndroid::setViewVisibility(m_view.object(), visible);
|
||||||
|
|
||||||
|
QAndroidPlatformWindow::setVisible(visible);
|
||||||
if (!visible && m_surfaceId != -1) {
|
if (!visible && m_surfaceId != -1) {
|
||||||
QtAndroid::destroySurface(m_surfaceId);
|
QtAndroid::destroySurface(m_surfaceId);
|
||||||
m_surfaceId = -1;
|
m_surfaceId = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user