summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android
diff options
context:
space:
mode:
authorAndy Shaw <andy.shaw@qt.io>2019-04-24 09:45:57 +0200
committerAndy Shaw <andy.shaw@qt.io>2019-05-03 06:58:02 +0000
commit8f24dbaf0703cf792c263d7d26400892c527a712 (patch)
treef4e6a84c49078468c9263ae523f8e0924082c393 /src/plugins/platforms/android
parent6c0ced4b7a77b089b434ab5eb9f430717f26d687 (diff)
Android: Fix deleting of new lines when using backspace
With some keyboards (ASOP, SwiftKey) it was not deleting any new lines when using backspace. So this ensures that it is correctly deleting at these points. Tested with the Samsung, Gboard and SwiftKey keyboards. Fixes: QTBUG-74824 Fixes: QTBUG-57798 Change-Id: Id2e4f96c18c3fec0e7f444b55dd3db2653625fd0 Done-with: Vova Mshanetskiy <vovams163@gmail.com> Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r--src/plugins/platforms/android/qandroidinputcontext.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/plugins/platforms/android/qandroidinputcontext.cpp b/src/plugins/platforms/android/qandroidinputcontext.cpp
index c31e43e0bb..00ab3409d3 100644
--- a/src/plugins/platforms/android/qandroidinputcontext.cpp
+++ b/src/plugins/platforms/android/qandroidinputcontext.cpp
@@ -978,15 +978,25 @@ jboolean QAndroidInputContext::deleteSurroundingText(jint leftLength, jint right
m_composingText.clear();
m_composingTextStart = -1;
- QString text = query->value(Qt::ImSurroundingText).toString();
- if (text.isEmpty())
- return JNI_TRUE;
-
if (leftLength < 0) {
rightLength += -leftLength;
leftLength = 0;
}
+ QVariant textBeforeCursor = query->value(Qt::ImTextBeforeCursor);
+ QVariant textAfterCursor = query->value(Qt::ImTextAfterCursor);
+ if (textBeforeCursor.isValid() && textAfterCursor.isValid()) {
+ leftLength = qMin(leftLength, textBeforeCursor.toString().length());
+ rightLength = qMin(rightLength, textAfterCursor.toString().length());
+ } else {
+ int cursorPos = query->value(Qt::ImCursorPosition).toInt();
+ leftLength = qMin(leftLength, cursorPos);
+ rightLength = qMin(rightLength, query->value(Qt::ImSurroundingText).toString().length() - cursorPos);
+ }
+
+ if (leftLength == 0 && rightLength == 0)
+ return JNI_TRUE;
+
QInputMethodEvent event;
event.setCommitString(QString(), -leftLength, leftLength+rightLength);
sendInputMethodEvent(&event);
@@ -1075,6 +1085,14 @@ const QAndroidInputContext::ExtractedText &QAndroidInputContext::getExtractedTex
int cpos = localPos + composeLength; //actual cursor pos relative to the current block
int localOffset = 0; // start of extracted text relative to the current block
+ if (blockPos > 0) {
+ QString prevBlockEnding = query->value(Qt::ImTextBeforeCursor).toString();
+ prevBlockEnding.chop(localPos);
+ if (prevBlockEnding.endsWith(QLatin1Char('\n'))) {
+ localOffset = -qMin(20, prevBlockEnding.length());
+ blockText = prevBlockEnding.right(-localOffset) + blockText;
+ }
+ }
// It is documented that we should try to return hintMaxChars
// characters, but that's not what the standard Android controls do, and