summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kdab.com>2015-12-04 15:36:40 +0200
committerBogDan Vatra <bogdan@kdab.com>2016-01-26 12:41:14 +0000
commitfd639b7adc3a536812f1d41f1da6b4f42b372b20 (patch)
tree7523c222ff1711bca6911157dc29da50489c13af /src/plugins
parent397061a6a92db9f962360d5db96f69b315f93074 (diff)
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>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp9
-rw-r--r--src/plugins/platforms/android/androidjnimain.h1
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.cpp7
3 files changed, 16 insertions, 1 deletions
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index dd9154f8d2..ac37e7bd92 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -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)
diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h
index cdedeb38f8..037a070516 100644
--- a/src/plugins/platforms/android/androidjnimain.h
+++ b/src/plugins/platforms/android/androidjnimain.h
@@ -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);
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
index 315a0faac0..03927dbe5a 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
@@ -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;