diff options
-rw-r--r-- | src/plugins/platforms/android/src/qandroidinputcontext.cpp | 9 | ||||
-rw-r--r-- | src/plugins/platforms/android/src/qandroidinputcontext.h | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/src/qandroidinputcontext.cpp b/src/plugins/platforms/android/src/qandroidinputcontext.cpp index 37fb605ea8..2180560b04 100644 --- a/src/plugins/platforms/android/src/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/src/qandroidinputcontext.cpp @@ -337,7 +337,10 @@ void QAndroidInputContext::reset() void QAndroidInputContext::commit() { finishComposingText(); +} +void QAndroidInputContext::updateCursorPosition() +{ QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQuery(); if (!query.isNull()) { const int cursorPos = query->value(Qt::ImCursorPosition).toInt(); @@ -378,6 +381,12 @@ void QAndroidInputContext::showInputPanel() QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQuery(); if (query.isNull()) return; + + disconnect(m_updateCursorPosConnection); + if (qGuiApp->focusObject()->metaObject()->indexOfSignal("cursorPositionChanged(int,int)") >= 0) // QLineEdit breaks the pattern + m_updateCursorPosConnection = connect(qGuiApp->focusObject(), SIGNAL(cursorPositionChanged(int,int)), this, SLOT(updateCursorPosition())); + else + m_updateCursorPosConnection = connect(qGuiApp->focusObject(), SIGNAL(cursorPositionChanged()), this, SLOT(updateCursorPosition())); QRectF itemRect = qGuiApp->inputMethod()->inputItemRectangle(); QRect rect = qGuiApp->inputMethod()->inputItemTransform().mapRect(itemRect).toRect(); QWindow *window = qGuiApp->focusWindow(); diff --git a/src/plugins/platforms/android/src/qandroidinputcontext.h b/src/plugins/platforms/android/src/qandroidinputcontext.h index e2b8107044..482aeffa50 100644 --- a/src/plugins/platforms/android/src/qandroidinputcontext.h +++ b/src/plugins/platforms/android/src/qandroidinputcontext.h @@ -119,10 +119,12 @@ private: private slots: virtual void sendEvent(QObject *receiver, QInputMethodEvent *event); virtual void sendEvent(QObject *receiver, QInputMethodQueryEvent *event); + void updateCursorPosition(); private: ExtractedText m_extractedText; QString m_composingText; + QMetaObject::Connection m_updateCursorPosConnection; }; QT_END_NAMESPACE |