diff options
Diffstat (limited to 'src/android/jar/src/org/qtproject')
4 files changed, 24 insertions, 0 deletions
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 1fee857a58..25ac59ec32 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -138,6 +138,7 @@ class QtActivityDelegate extends QtActivityDelegateBase r.width(), kbHeight); return true; }); + registerGlobalFocusChangeListener(m_layout); m_inputDelegate.setEditPopupMenu(new EditPopupMenu(m_activity, m_layout)); } diff --git a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java index 5c36c5fd05..8625c1f601 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java @@ -133,6 +133,26 @@ abstract class QtActivityDelegateBase setUpLayout(); } + protected void registerGlobalFocusChangeListener(final View view) { + view.getViewTreeObserver().addOnGlobalFocusChangeListener(this::onGlobalFocusChanged); + } + + private void onGlobalFocusChanged(View oldFocus, View newFocus) { + if (newFocus instanceof QtEditText) { + final QtWindow newWindow = (QtWindow) newFocus.getParent(); + QtWindow.windowFocusChanged(true, newWindow.getId()); + m_inputDelegate.setFocusedView((QtEditText) newFocus); + } else { + int id = -1; + if (oldFocus instanceof QtEditText) { + final QtWindow oldWindow = (QtWindow) oldFocus.getParent(); + id = oldWindow.getId(); + } + QtWindow.windowFocusChanged(false, id); + m_inputDelegate.setFocusedView(null); + } + } + public void hideSplashScreen() { hideSplashScreen(0); 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 cab542622b..66a3f6c949 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java @@ -135,6 +135,7 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase implements QtNative.AppS void setView(QtView view) { m_view = view; + registerGlobalFocusChangeListener(m_view); } public void setRootWindowRef(long ref) { 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 d126ba3dc1..2f8f9cfbdc 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -24,6 +24,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { private final QtEditText m_editText; private static native void setSurface(int windowId, Surface surface); + static native void windowFocusChanged(boolean hasFocus, int id); public QtWindow(Context context, QtWindow parentWindow) { @@ -31,6 +32,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { setId(View.generateViewId()); m_editText = new QtEditText(context); setParent(parentWindow); + setFocusableInTouchMode(true); QtNative.runAction(() -> { m_gestureDetector = |