From 7cea4391ced9d3f96e0a7f4aa50104718c120c32 Mon Sep 17 00:00:00 2001 From: Petri Virkkunen Date: Fri, 26 Jul 2024 14:23:29 +0300 Subject: [PATCH] Android: Set window focus based on window touch, not global focus parentage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since QtEditText is no longer focused on QtWindow touch, onGlobalFocusChange event is no longer triggered, and so we cannot get the parent View (QtWindow) of the current global focus object and set it as the focused QWindow. Move QWindow focus setting to be done directly under QtWindow onTouched. Pick-to: 6.7 Change-Id: I292f197c64d170aa2f15a3118e6f861b59c906f5 Reviewed-by: Tinja Paavoseppä (cherry picked from commit 1442a9ea479d197ed338f440d5106a7e195c4ee2) Reviewed-by: Qt Cherry-pick Bot --- .../qt/android/QtActivityDelegate.java | 1 - .../qt/android/QtActivityDelegateBase.java | 17 ----------------- .../qt/android/QtEmbeddedDelegate.java | 2 -- .../src/org/qtproject/qt/android/QtWindow.java | 1 + 4 files changed, 1 insertion(+), 20 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 1096ccf1b7d..428a1817ac9 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegate.java @@ -149,7 +149,6 @@ 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 32b00856ea9..c99695e6dde 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtActivityDelegateBase.java @@ -108,23 +108,6 @@ 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()); - } else { - int id = -1; - if (oldFocus instanceof QtEditText) { - final QtWindow oldWindow = (QtWindow) oldFocus.getParent(); - QtWindow.windowFocusChanged(false, oldWindow.getId()); - } - } - } - 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 4cc6e683497..ce68a8fb1b3 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtEmbeddedDelegate.java @@ -165,8 +165,6 @@ class QtEmbeddedDelegate extends QtActivityDelegateBase { m_view = view; updateInputDelegate(); - if (m_view != null) - registerGlobalFocusChangeListener(m_view); } // QtEmbeddedViewInterface implementation end 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 e844a57987a..3bdbc592b86 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -67,6 +67,7 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { @Override public boolean onTouchEvent(MotionEvent event) { + windowFocusChanged(true, getId()); if (m_editText != null && m_inputConnectionListener != null) m_inputConnectionListener.onEditTextChanged(m_editText);