diff options
| author | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-09-17 09:20:08 +0200 |
|---|---|---|
| committer | Bartlomiej Moskal <bartlomiej.moskal@qt.io> | 2024-10-09 20:46:14 +0000 |
| commit | 2971dbfe062de6b0be3ed9f251f9506bd45d5854 (patch) | |
| tree | 20729842dd3a846016fd3b8f9173b3467999c0b2 | |
| parent | 0d4778497ee13f93ecaff9036ee7f5f6d24bb2a3 (diff) | |
Android: Allow to open Keyboard without touch
After changes in f4050cc5ea7490ba3b8b2bb0a174559d7e72a27e commit, the
keyboard can be opened only when internal m_currentEditText is set (what
is happening only on touch). Because of that, the keyboard cannot be
opened just by setting focus on an item like it was before.
To allow open the keyboard not only after touch, QtWindow needs to be
informed about each focus change.
Fixes: QTBUG-124360
Pick-to: 6.8
Change-Id: Ic3ca4451f53df55bfb1f3e300078fd1916e77155
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
4 files changed, 16 insertions, 1 deletions
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 88078a843df..5ceccb3bf5e 100644 --- a/src/android/jar/src/org/qtproject/qt/android/QtWindow.java +++ b/src/android/jar/src/org/qtproject/qt/android/QtWindow.java @@ -236,4 +236,11 @@ class QtWindow extends QtLayout implements QtSurfaceInterface { if (m_parentWindow != null) m_parentWindow.addChildWindow(this); } + + @UsedFromNativeCode + void updateFocusedEditText() + { + if (m_editText != null && m_inputConnectionListener != null) + m_inputConnectionListener.onEditTextChanged(m_editText); + } } diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp index 4d752a3cc32..cc9c435a32b 100644 --- a/src/plugins/platforms/android/qandroidplatformscreen.cpp +++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp @@ -299,8 +299,10 @@ void QAndroidPlatformScreen::topVisibleWindowChanged() QtAndroidMenu::setActiveTopLevelWindow(w); if (w && w->handle()) { QAndroidPlatformWindow *platformWindow = static_cast<QAndroidPlatformWindow *>(w->handle()); - if (platformWindow) + if (platformWindow) { platformWindow->updateSystemUiVisibility(); + platformWindow->updateFocusedEditText(); + } } } diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index 1362b7d3929..5559a897596 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -266,6 +266,11 @@ void QAndroidPlatformWindow::updateSystemUiVisibility() } } +void QAndroidPlatformWindow::updateFocusedEditText() +{ + m_nativeQtWindow.callMethod<void>("updateFocusedEditText"); +} + bool QAndroidPlatformWindow::isExposed() const { return qApp->applicationState() > Qt::ApplicationHidden diff --git a/src/plugins/platforms/android/qandroidplatformwindow.h b/src/plugins/platforms/android/qandroidplatformwindow.h index ef4e799a75e..c282adb9b0e 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.h +++ b/src/plugins/platforms/android/qandroidplatformwindow.h @@ -57,6 +57,7 @@ public: void propagateSizeHints() override; void requestActivateWindow() override; void updateSystemUiVisibility(); + void updateFocusedEditText(); inline bool isRaster() const { return m_isRaster; } bool isExposed() const override; QtJniTypes::QtWindow nativeWindow() const { return m_nativeQtWindow; } |
