diff options
author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-09-12 18:29:34 +0300 |
---|---|---|
committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-09-12 18:29:34 +0300 |
commit | 6efece8c8fe18ec3cc01dbc9c02fed3f17208ef4 (patch) | |
tree | 243504aa152967c5586bc848f9f62679d51551d0 /src/plugins/platforms/android | |
parent | a5984e059385e93ab06eb95cbe12bea5215f7b9d (diff) | |
parent | dbf21da8a66e4cf1a050792c3a5816d2c686a846 (diff) |
Merge remote-tracking branch 'origin/tqtc/lts-5.15.7' into tqtc/lts-5.15-opensource
Change-Id: I976ce0c3664c9953dd0019b7d76d3f603583634f
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r-- | src/plugins/platforms/android/qandroidinputcontext.cpp | 35 | ||||
-rw-r--r-- | src/plugins/platforms/android/qandroidinputcontext.h | 2 |
2 files changed, 8 insertions, 29 deletions
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp index 96eee24c2f..55b9c56724 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.cpp +++ b/src/plugins/platforms/android/qandroidinputcontext.cpp @@ -905,34 +905,7 @@ void QAndroidInputContext::update(Qt::InputMethodQueries queries) QSharedPointer<QInputMethodQueryEvent> query = focusObjectInputMethodQuery(queries); if (query.isNull()) return; - - if (query->value(Qt::ImCursorPosition).toInt() >= 0 && - query->value(Qt::ImSurroundingText).toString() != nullptr && - query->value(Qt::ImSurroundingText).toString() - .left(query->value(Qt::ImCursorPosition).toInt()).length()>=0) { - // Cursos position should be always valid - // when object is composing - if (focusObjectIsComposing()) - return; - if (m_focusObject->isWidgetType()) - updateCursorPosition(); - else - updateCursorPositionInRange(query); - } -} - -void QAndroidInputContext::updateCursorPositionInRange(const QSharedPointer<QInputMethodQueryEvent> &query) -{ - QObject *input = qGuiApp->focusObject(); - QList<QInputMethodEvent::Attribute> attributes; - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, - query->value(Qt::ImCursorPosition).toInt(), 1)); - - QInputMethodEvent event(QString(), attributes); - QCoreApplication::sendEvent(input, &event); - QtAndroidInput::updateSelection(query->value(Qt::ImCursorPosition).toInt(), - query->value(Qt::ImCursorPosition).toInt(), 0, - query->value(Qt::ImSurroundingText).toString().length()); +#warning TODO extract the needed data from query } void QAndroidInputContext::invokeAction(QInputMethod::Action action, int cursorPosition) @@ -965,6 +938,12 @@ void QAndroidInputContext::showInputPanel() 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())); + QRect rect = cursorRect(); if (!isInputPanelVisible()) QtAndroidInput::showSoftwareKeyboard(rect.left(), rect.top(), rect.width(), rect.height(), diff --git a/src/plugins/platforms/android/qandroidinputcontext.h b/src/plugins/platforms/android/qandroidinputcontext.h index 521061b02c..02a66c367a 100644 --- a/src/plugins/platforms/android/qandroidinputcontext.h +++ b/src/plugins/platforms/android/qandroidinputcontext.h @@ -156,13 +156,13 @@ private: void focusObjectStartComposing(); bool focusObjectStopComposing(); QRect cursorRect(); - void updateCursorPositionInRange(const QSharedPointer<QInputMethodQueryEvent> &query); private: ExtractedText m_extractedText; QString m_composingText; int m_composingTextStart; int m_composingCursor; + QMetaObject::Connection m_updateCursorPosConnection; HandleModes m_handleMode; int m_batchEditNestingLevel; QObject *m_focusObject; |