summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2024-11-28 18:30:47 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2024-12-03 17:27:27 +0200
commit5c37d3f06b967c208364a3797c1589250786ddb6 (patch)
tree95830a9bf4d645c95675a56c987bd17bbff7038b /src/plugins/platforms/android/qandroidplatformwindow.cpp
parent10805e7d8af0bcbcba12bc896a01d645e1648741 (diff)
Android: rename and move updateWindow native method to QtWindow
That method is related to window management so move it to QtWindow where it belongs, and any related C++ code from androidjnimain.cpp to QAndroidPlatformWindow. Rename the method to updateWindows since it's operating on all windows and not one window. Change-Id: I91e729b0749b6a8168b7126f9140d79c542b23d3 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
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)
})) {