diff options
author | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-08-16 20:37:57 +0300 |
---|---|---|
committer | Tarja Sundqvist <tarja.sundqvist@qt.io> | 2022-08-16 20:37:57 +0300 |
commit | f05d6542fe994ddf58df2b68c9fba4f1269bd91f (patch) | |
tree | f7a2a319c49686f29ea03057a3eb85cbabfa0187 | |
parent | 1dfbdd2fc87b2be860efc97e809c92f21fb20ae2 (diff) | |
parent | dc84cfaf080d7ccd5d59b8553c25c1db746ee4fb (diff) |
Merge remote-tracking branch 'origin/tqtc/lts-5.15.6' into tqtc/lts-5.15-opensourcev5.15.6-lts-lgpl
Change-Id: I43c09d7d70a5dd94e0d8ed4ecab9afb1408608e7
-rw-r--r-- | .qmake.conf | 2 | ||||
-rw-r--r-- | src/plugins/openwnn/plugin/openwnninputmethod.cpp | 7 | ||||
-rw-r--r-- | src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp | 8 | ||||
-rw-r--r-- | src/plugins/pinyin/plugin/pinyininputmethod.cpp | 2 | ||||
-rw-r--r-- | src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp | 14 | ||||
-rw-r--r-- | src/virtualkeyboard/qvirtualkeyboardinputengine.cpp | 6 | ||||
-rw-r--r-- | src/virtualkeyboard/virtualkeyboardsettings.cpp | 1 | ||||
-rw-r--r-- | tests/auto/inputpanel/data/tst_inputpanel.qml | 40 |
8 files changed, 67 insertions, 13 deletions
diff --git a/.qmake.conf b/.qmake.conf index e62ae21d..d7055d75 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -2,4 +2,4 @@ load(qt_build_config) DEFINES += QT_NO_FOREACH QT_NO_JAVA_STYLE_ITERATORS QT_NO_LINKED_LIST -MODULE_VERSION = 5.15.5 +MODULE_VERSION = 5.15.6 diff --git a/src/plugins/openwnn/plugin/openwnninputmethod.cpp b/src/plugins/openwnn/plugin/openwnninputmethod.cpp index efe68a1e..c54cecb7 100644 --- a/src/plugins/openwnn/plugin/openwnninputmethod.cpp +++ b/src/plugins/openwnn/plugin/openwnninputmethod.cpp @@ -805,6 +805,7 @@ void OpenWnnInputMethod::selectionListItemSelected(QVirtualKeyboardSelectionList { Q_UNUSED(type) Q_D(OpenWnnInputMethod); + d->activeWordIndex = index; // Set selected text as preeditText to place cursor at the end of selected text inputContext()->setPreeditText(d->candidateList.at(index)->candidate); d->commitText(*d->candidateList.at(index)); @@ -813,7 +814,7 @@ void OpenWnnInputMethod::selectionListItemSelected(QVirtualKeyboardSelectionList void OpenWnnInputMethod::reset() { Q_D(OpenWnnInputMethod); - d->commitAll(); + d->composingText.clear(); d->initializeScreen(); d->fitInputType(); } @@ -821,8 +822,10 @@ void OpenWnnInputMethod::reset() void OpenWnnInputMethod::update() { Q_D(OpenWnnInputMethod); - if (!d->disableUpdate) + if (!d->disableUpdate) { + d->commitAll(); reset(); + } } } // namespace QtVirtualKeyboard diff --git a/src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp b/src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp index d75aec6a..96405d2e 100644 --- a/src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp +++ b/src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp @@ -133,9 +133,9 @@ uint16 SpellingParser::splstr_to_idxs(const char *splstr, uint16 str_len, idx_num++; if (NULL != start_pos) start_pos[idx_num] = str_pos; - } - last_is_pre = !last_is_splitter; + last_is_pre = !last_is_splitter; + } return idx_num; } @@ -262,9 +262,9 @@ uint16 SpellingParser::splstr16_to_idxs(const char16 *splstr, uint16 str_len, idx_num++; if (NULL != start_pos) start_pos[idx_num] = str_pos; - } - last_is_pre = !last_is_splitter; + last_is_pre = !last_is_splitter; + } return idx_num; } diff --git a/src/plugins/pinyin/plugin/pinyininputmethod.cpp b/src/plugins/pinyin/plugin/pinyininputmethod.cpp index 420b13d2..98d8c513 100644 --- a/src/plugins/pinyin/plugin/pinyininputmethod.cpp +++ b/src/plugins/pinyin/plugin/pinyininputmethod.cpp @@ -73,7 +73,7 @@ public: QVirtualKeyboardInputContext *inputContext = q->inputContext(); // Disable the user dictionary when entering sensitive data - if (inputContext) { + if (inputContext && pinyinDecoderService) { bool userDictionaryEnabled = !inputContext->inputMethodHints().testFlag(Qt::ImhSensitiveData); if (userDictionaryEnabled != pinyinDecoderService->isUserDictionaryEnabled()) pinyinDecoderService->setUserDictionary(userDictionaryEnabled); diff --git a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp index a7c0aad9..385be912 100644 --- a/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp +++ b/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp @@ -505,6 +505,7 @@ bool QVirtualKeyboardInputContextPrivate::filterEvent(const QEvent *event) QEvent::Type type = event->type(); if (type == QEvent::KeyPress || type == QEvent::KeyRelease) { const QKeyEvent *keyEvent = static_cast<const QKeyEvent *>(event); + const int key = keyEvent->key(); // Keep track of pressed keys update key event state if (type == QEvent::KeyPress) @@ -518,7 +519,6 @@ bool QVirtualKeyboardInputContextPrivate::filterEvent(const QEvent *event) setState(State::KeyEvent); #ifdef QT_VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION - int key = keyEvent->key(); if ((key >= Qt::Key_Left && key <= Qt::Key_Down) || key == Qt::Key_Return) { if (type == QEvent::KeyPress && platformInputContext->isInputPanelVisible()) { activeNavigationKeys += key; @@ -533,8 +533,16 @@ bool QVirtualKeyboardInputContextPrivate::filterEvent(const QEvent *event) #endif // Break composing text since the virtual keyboard does not support hard keyboard events - if (!preeditText.isEmpty()) - commit(); + if (!preeditText.isEmpty()) { + if (type == QEvent::KeyPress && (key == Qt::Key_Delete || key == Qt::Key_Backspace)) { + reset(); + Q_Q(QVirtualKeyboardInputContext); + q->clear(); + return true; + } else { + commit(); + } + } } #ifdef QT_VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION else if (type == QEvent::ShortcutOverride) { diff --git a/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp b/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp index e64ea4eb..5f74c2a7 100644 --- a/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp +++ b/src/virtualkeyboard/qvirtualkeyboardinputengine.cpp @@ -716,9 +716,11 @@ void QVirtualKeyboardInputEngine::timerEvent(QTimerEvent *timerEvent) { Q_D(QVirtualKeyboardInputEngine); if (timerEvent->timerId() == d->repeatTimer) { - d->repeatTimer = 0; d->virtualKeyClick(d->activeKey, d->activeKeyText, d->activeKeyModifiers, true); - d->repeatTimer = startTimer(50); + if (!d->repeatCount) { + killTimer(d->repeatTimer); + d->repeatTimer = startTimer(50); + } d->repeatCount++; } } diff --git a/src/virtualkeyboard/virtualkeyboardsettings.cpp b/src/virtualkeyboard/virtualkeyboardsettings.cpp index d415c36c..173ab858 100644 --- a/src/virtualkeyboard/virtualkeyboardsettings.cpp +++ b/src/virtualkeyboard/virtualkeyboardsettings.cpp @@ -352,6 +352,7 @@ void VirtualKeyboardSettings::resetStyle() /*! \qmlproperty list<string> VirtualKeyboardSettings::availableLocales \since QtQuick.VirtualKeyboard.Settings 2.0 + \readonly This property contains a list of languages supported by the virtual keyboard. diff --git a/tests/auto/inputpanel/data/tst_inputpanel.qml b/tests/auto/inputpanel/data/tst_inputpanel.qml index d814f282..e4a00e3d 100644 --- a/tests/auto/inputpanel/data/tst_inputpanel.qml +++ b/tests/auto/inputpanel/data/tst_inputpanel.qml @@ -321,6 +321,31 @@ Rectangle { compare(textInput.text, "A") } + function test_hardKeyBackspaceClearsInput_data() { + return [ + { initLocale: "en_GB", initText: "12345", initCursorPosition: 1, inputSequence: "hello", outputText: "12345", expectedCursorPosition: 1 }, + { initLocale: "ja_JP", initText: "12345", initCursorPosition: 1, inputSequence: "watashi", outputText: "12345", expectedCursorPosition: 1 }, + ] + } + + function test_hardKeyBackspaceClearsInput(data) { + prepareTest(data) + + if (!inputPanel.wordCandidateListVisibleHint) + skip("Prediction/spell correction not enabled") + + compare(Qt.inputMethod.locale.name, Qt.locale(data.initLocale).name) + for (var inputIndex in data.inputSequence) { + verify(inputPanel.virtualKeyClick(data.inputSequence[inputIndex])) + } + + keyClick(Qt.Key_Backspace) + waitForRendering(textInput) + + compare(textInput.text, data.outputText) + compare(textInput.cursorPosition, data.expectedCursorPosition) + } + function test_hardKeyInput() { prepareTest() @@ -920,6 +945,8 @@ Rectangle { // Add an apostrophe before joined syllables in cases of ambiguity, disable the user dictionary (Qt.ImhSensitiveData) so it does not affect to the results { initInputMethodHints: Qt.ImhNone | Qt.ImhSensitiveData, initLocale: "zh_CN", inputSequence: "zhangang", expectedCandidates: [ "\u5360", "\u94A2" ], outputText: "\u5360\u94A2" }, { initInputMethodHints: Qt.ImhNone | Qt.ImhSensitiveData, initLocale: "zh_CN", inputSequence: "zhang'ang", expectedCandidates: [ "\u7AE0", "\u6602" ], outputText: "\u7AE0\u6602" }, + // Invalid pinyin sequence + { initInputMethodHints: Qt.ImhNone, initLocale: "zh_CN", inputSequence: "fi", expectedCandidates: [ "\u53D1", "i" ], outputText: "\u53D1i" }, ] } @@ -1235,6 +1262,19 @@ Rectangle { compare(textInput.cursorPosition, data.expectedCursorPosition) } + function test_japaneseSelectCurrentItemResetsIndex() { + prepareTest({ initLocale: "ja_JP" }, true) + + verify(inputPanel.virtualKeyClick("a")) + verify(inputPanel.virtualKeyClick("a")) + verify(inputPanel.virtualKeyClick("a")) + + compare(inputPanel.wordCandidateView.currentIndex, -1) + inputPanel.wordCandidateView.currentIndex = 0 + inputPanel.selectionListSelectCurrentItem() + compare(inputPanel.wordCandidateView.currentIndex, -1, "QTBUG-94560") + } + function test_baseKeyNoModifier() { // The Japanese keyboard uses the BaseKey.noModifier flag for the arrow keys. // Without this flag the arrow key + shift would extend the text selection. |