QAndroidInputContext: Consider preedit text in getCursorCapsMode()

Fixes auto-capitalization in AnySoftKeyboard. It was typing the whole
first word in a sentence in upper case.

Change-Id: I605a1aee39d432a3474c0bf706445d354562285f
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
bb10
Vova Mshanetskiy 2019-05-31 18:51:43 +03:00
parent e19d93b212
commit 399bf44577
1 changed files with 7 additions and 2 deletions

View File

@ -1200,13 +1200,18 @@ jint QAndroidInputContext::getCursorCapsMode(jint /*reqModes*/)
const uint qtInputMethodHints = query->value(Qt::ImHints).toUInt();
const int localPos = query->value(Qt::ImCursorPosition).toInt();
bool atWordBoundary = (localPos == 0);
bool atWordBoundary =
localPos == 0
&& (!focusObjectIsComposing() || m_composingCursor == m_composingTextStart);
if (!atWordBoundary) {
QString surroundingText = query->value(Qt::ImSurroundingText).toString();
surroundingText.truncate(localPos);
if (focusObjectIsComposing())
surroundingText += m_composingText.leftRef(m_composingCursor - m_composingTextStart);
// Add a character to see if it is at the end of the sentence or not
QTextBoundaryFinder finder(QTextBoundaryFinder::Sentence, surroundingText + QLatin1Char('A'));
finder.setPosition(localPos);
finder.setPosition(surroundingText.length());
if (finder.isAtBoundary())
atWordBoundary = finder.isAtBoundary();
}