diff options
| author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2024-11-28 18:30:47 +0200 |
|---|---|---|
| committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2024-12-03 17:27:27 +0200 |
| commit | 5c37d3f06b967c208364a3797c1589250786ddb6 (patch) | |
| tree | 95830a9bf4d645c95675a56c987bd17bbff7038b /src/plugins/platforms/android/qandroidplatformwindow.cpp | |
| parent | 10805e7d8af0bcbcba12bc896a01d645e1648741 (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.cpp | 29 |
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) })) { |
