summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java29
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtLayout.java13
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtNative.java20
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp22
-rw-r--r--src/plugins/platforms/android/androidjnimain.h2
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.cpp18
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.h2
7 files changed, 104 insertions, 2 deletions
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
index 9507d7eb3b..cddb06eff1 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java
@@ -1102,4 +1102,33 @@ public class QtActivityDelegate
m_layout.removeView(view);
}
}
+
+ public void bringChildToFront(int id)
+ {
+ View view = m_surfaces.get(id);
+ if (view != null) {
+ final int index = m_layout.getChildCount() - m_nativeViews.size() - 1;
+ m_layout.moveChild(view, index < 0 ? 0 : index);
+ return;
+ }
+
+ view = m_nativeViews.get(id);
+ if (view != null)
+ m_layout.moveChild(view, -1);
+ }
+
+ public void bringChildToBack(int id)
+ {
+ View view = m_surfaces.get(id);
+ if (view != null) {
+ m_layout.moveChild(view, 0);
+ return;
+ }
+
+ view = m_nativeViews.get(id);
+ if (view != null) {
+ final int index = m_layout.getChildCount() - m_nativeViews.size();
+ m_layout.moveChild(view, index);
+ }
+ }
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
index 058b10750f..4033866e6c 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtLayout.java
@@ -205,8 +205,17 @@ public class QtLayout extends ViewGroup
}
}
- public void bringChildFront(int child)
+ public void moveChild(View view, int index)
{
- bringChildToFront(getChildAt(child));
+ if (view == null)
+ return;
+
+ if (indexOfChild(view) == -1)
+ return;
+
+ detachViewFromParent(view);
+ requestLayout();
+ invalidate();
+ attachViewToParent(view, index, view.getLayoutParams());
}
}
diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
index 8b0febe641..aba4cfa502 100644
--- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
+++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java
@@ -537,6 +537,26 @@ public class QtNative
});
}
+ private static void bringChildToFront(final int id)
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activityDelegate.bringChildToFront(id);
+ }
+ });
+ }
+
+ private static void bringChildToBack(final int id)
+ {
+ runAction(new Runnable() {
+ @Override
+ public void run() {
+ m_activityDelegate.bringChildToBack(id);
+ }
+ });
+ }
+
private static void destroySurface(final int id)
{
runAction(new Runnable() {
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index e068a43241..11f0bc5ffe 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -401,6 +401,28 @@ namespace QtAndroid
surfaceId);
}
+ void bringChildToFront(int surfaceId)
+ {
+ if (surfaceId == -1)
+ return;
+
+ QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass,
+ "bringChildToFront",
+ "(I)V",
+ surfaceId);
+ }
+
+ void bringChildToBack(int surfaceId)
+ {
+ if (surfaceId == -1)
+ return;
+
+ QJNIObjectPrivate::callStaticMethod<void>(m_applicationClass,
+ "bringChildToBack",
+ "(I)V",
+ surfaceId);
+ }
+
bool blockEventLoopsWhenSuspended()
{
static bool block = qgetenv("QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED").toInt();
diff --git a/src/plugins/platforms/android/androidjnimain.h b/src/plugins/platforms/android/androidjnimain.h
index 7f762c8108..01330ce283 100644
--- a/src/plugins/platforms/android/androidjnimain.h
+++ b/src/plugins/platforms/android/androidjnimain.h
@@ -64,6 +64,8 @@ namespace QtAndroid
int insertNativeView(jobject view, const QRect &geometry);
void setSurfaceGeometry(int surfaceId, const QRect &geometry);
void destroySurface(int surfaceId);
+ void bringChildToFront(int surfaceId);
+ void bringChildToBack(int surfaceId);
QWindow *topLevelWindowAt(const QPoint &globalPos);
int desktopWidthPixels();
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
index af409d13a0..31c3614284 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
@@ -53,6 +53,24 @@ QAndroidPlatformForeignWindow::~QAndroidPlatformForeignWindow()
QtAndroid::destroySurface(m_surfaceId);
}
+void QAndroidPlatformForeignWindow::lower()
+{
+ if (m_surfaceId == -1)
+ return;
+
+ QAndroidPlatformWindow::lower();
+ QtAndroid::bringChildToBack(m_surfaceId);
+}
+
+void QAndroidPlatformForeignWindow::raise()
+{
+ if (m_surfaceId == -1)
+ return;
+
+ QAndroidPlatformWindow::raise();
+ QtAndroid::bringChildToFront(m_surfaceId);
+}
+
void QAndroidPlatformForeignWindow::setGeometry(const QRect &rect)
{
QWindow *parent = window()->parent();
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.h b/src/plugins/platforms/android/qandroidplatformforeignwindow.h
index 974ffbc376..df11c78b7c 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.h
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.h
@@ -45,6 +45,8 @@ class QAndroidPlatformForeignWindow : public QAndroidPlatformWindow
public:
explicit QAndroidPlatformForeignWindow(QWindow *window);
~QAndroidPlatformForeignWindow();
+ void lower() Q_DECL_OVERRIDE;
+ void raise() Q_DECL_OVERRIDE;
void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
void setVisible(bool visible) Q_DECL_OVERRIDE;
void applicationStateChanged(Qt::ApplicationState state) Q_DECL_OVERRIDE;