summaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtNative.java4
-rw-r--r--src/android/jar/src/org/qtproject/qt/android/QtWindow.java1
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp21
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp29
7 files changed, 33 insertions, 28 deletions
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
index b875459ea2a..01635aadfb4 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityBase.java
@@ -143,7 +143,7 @@ public class QtActivityBase extends Activity
QtNative.setApplicationState(QtNative.ApplicationState.ApplicationActive);
if (QtNative.getStateDetails().isStarted) {
m_delegate.displayManager().registerDisplayListener();
- QtNative.updateWindow();
+ QtWindow.updateWindows();
// Suspending the app clears the immersive mode, so we need to set it again.
m_delegate.displayManager().updateFullScreen();
}
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
index 685a708b7a6..577f60ba99a 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java
@@ -90,7 +90,7 @@ class QtActivityDelegate extends QtActivityDelegateBase
if (m_layout != null) {
m_displayManager.setSystemUiVisibility(systemUiVisibility);
m_layout.requestLayout();
- QtNative.updateWindow();
+ QtWindow.updateWindows();
}
});
}
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java
index 381f2f17701..fb1ddd9907e 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java
@@ -42,7 +42,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase
public void onActivityResumed(Activity activity) {
if (m_activity == activity && m_stateDetails.isStarted) {
QtNative.setApplicationState(ApplicationActive);
- QtNative.updateWindow();
+ QtWindow.updateWindows();
}
}
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtNative.java b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
index 771ec5d2e6f..461bf8a77a4 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtNative.java
@@ -437,10 +437,6 @@ public class QtNative
static native boolean updateNativeActivity();
// application methods
- // window methods
- static native void updateWindow();
- // window methods
-
// application methods
static native void updateApplicationState(int state);
static native void updateLocale();
diff --git a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java
index 19ad204a086..26536956fe4 100644
--- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java
+++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java
@@ -26,6 +26,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface {
private static native void setSurface(int windowId, Surface surface);
static native void windowFocusChanged(boolean hasFocus, int id);
+ static native void updateWindows();
QtWindow(Context context, boolean isForeignWindow, QtWindow parentWindow,
QtInputConnection.QtInputConnectionListener listener)
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index cac1bb8c987..e6ca37de202 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -581,26 +581,6 @@ static void setDisplayMetrics(JNIEnv * /*env*/, jclass /*clazz*/, jint screenWid
}
Q_DECLARE_JNI_NATIVE_METHOD(setDisplayMetrics)
-static void updateWindow(JNIEnv */*env*/, jobject /*thiz*/)
-{
- if (!m_androidPlatformIntegration)
- return;
-
- 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;
-
- QRect availableGeometry = w->screen()->availableGeometry();
- if (w->geometry().width() > 0 && w->geometry().height() > 0 && availableGeometry.width() > 0 && availableGeometry.height() > 0)
- QWindowSystemInterface::handleExposeEvent(w, QRegion(QRect(QPoint(), w->geometry().size())));
- }
- }
-}
-
static void updateApplicationState(JNIEnv */*env*/, jobject /*thiz*/, jint state)
{
QMutexLocker lock(&m_platformMutex);
@@ -745,7 +725,6 @@ static JNINativeMethod methods[] = {
{ "quitQtCoreApplication", "()V", (void *)quitQtCoreApplication },
{ "terminateQt", "()V", (void *)terminateQt },
{ "waitForServiceSetup", "()V", (void *)waitForServiceSetup },
- { "updateWindow", "()V", (void *)updateWindow },
{ "updateApplicationState", "(I)V", (void *)updateApplicationState },
{ "onActivityResult", "(IILandroid/content/Intent;)V", (void *)onActivityResult },
{ "onNewIntent", "(Landroid/content/Intent;)V", (void *)onNewIntent },
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)
})) {