diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-03-12 16:41:07 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2020-03-26 11:32:02 +0100 |
commit | d2648237c7e3bfc03077b7b1e63c72dc24ff519c (patch) | |
tree | 903c3eed9283d54437d9748b3b1533fec7e25aa8 /src/virtualkeyboard/shifthandler.cpp | |
parent | 007ac4095d554d6cad9c795ab5cb888a255db397 (diff) |
Auto-capitalize only after space following a sentence-ending characterv5.15.0-beta3
A dot alone should not change to capital letters, only the space
following the dot. This is standard behavior on mobile platforms.
In inputmethods that support auto-completion and auto-space-insertion,
we need to watch out if the auto-inserted space triggered auto-
capitalization. If so, then the inserted text needs to be
capitalized even though the keyboard will have shown lower-case
characters.
Fixes: QTBUG-77673
Change-Id: Icd907055d6557a7756468318fba5669eb8f62a28
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/virtualkeyboard/shifthandler.cpp')
-rw-r--r-- | src/virtualkeyboard/shifthandler.cpp | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/virtualkeyboard/shifthandler.cpp b/src/virtualkeyboard/shifthandler.cpp index d268282e..b2d44f95 100644 --- a/src/virtualkeyboard/shifthandler.cpp +++ b/src/virtualkeyboard/shifthandler.cpp @@ -298,14 +298,14 @@ void ShiftHandler::autoCapitalize() bool preferLowerCase = d->inputContext->inputMethodHints() & Qt::ImhPreferLowercase; if (cursorPosition == 0) { setShiftActive(!preferLowerCase); - } else { + } else { // space after sentence-ending character triggers auto-capitalization QString text = d->inputContext->surroundingText(); text.truncate(cursorPosition); - text = text.trimmed(); - if (text.length() == 0) - setShiftActive(!preferLowerCase); - else if (text.length() > 0 && d->sentenceEndingCharacters.indexOf(text[text.length() - 1]) >= 0) + if (text.trimmed().length() == 0) setShiftActive(!preferLowerCase); + else if (text.endsWith(QLatin1Char(' '))) + setShiftActive(d->sentenceEndingCharacters.contains(text.rightRef(2)[0]) + && !preferLowerCase); else setShiftActive(false); } |