summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformwindow.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index 58fc68ee122..edbbbd95e07 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -382,6 +382,34 @@ void QAndroidPlatformWindow::windowFocusChanged(JNIEnv *env, jobject object,
}
}
+static void updateWindows(JNIEnv *env, jobject object)
+{
+ Q_UNUSED(env)
+ Q_UNUSED(object)
+
+ if (QGuiApplication::instance() != nullptr) {
+ const auto tlw = QGuiApplication::topLevelWindows();
+ for (QWindow *w : tlw) {
+
+ // Skip non-platform windows, e.g., offscreen windows.
+ if (!w->handle())
+ continue;
+
+ const QRect availableGeometry = w->screen()->availableGeometry();
+ const QRect geometry = w->geometry();
+ const bool isPositiveGeometry = (geometry.width() > 0 && geometry.height() > 0);
+ const bool isPositiveAvailableGeometry =
+ (availableGeometry.width() > 0 && availableGeometry.height() > 0);
+
+ if (isPositiveGeometry && isPositiveAvailableGeometry) {
+ const QRegion region = QRegion(QRect(QPoint(), w->geometry().size()));
+ QWindowSystemInterface::handleExposeEvent(w, region);
+ }
+ }
+ }
+}
+Q_DECLARE_JNI_NATIVE_METHOD(updateWindows)
+
/*
Due to calls originating from Android, it is possible for native methods to
try to manipulate any given instance of QAndroidPlatformWindow when it is
@@ -398,6 +426,7 @@ bool QAndroidPlatformWindow::registerNatives(QJniEnvironment &env)
{
if (!env.registerNativeMethods(QtJniTypes::Traits<QtJniTypes::QtWindow>::className(),
{
+ Q_JNI_NATIVE_METHOD(updateWindows),
Q_JNI_NATIVE_SCOPED_METHOD(setSurface, QAndroidPlatformWindow),
Q_JNI_NATIVE_SCOPED_METHOD(windowFocusChanged, QAndroidPlatformWindow)
})) {