aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTarja Sundqvist <tarja.sundqvist@qt.io>2022-08-16 20:37:57 +0300
committerTarja Sundqvist <tarja.sundqvist@qt.io>2022-08-16 20:37:57 +0300
commitf05d6542fe994ddf58df2b68c9fba4f1269bd91f (patch)
treef7a2a319c49686f29ea03057a3eb85cbabfa0187
parent1dfbdd2fc87b2be860efc97e809c92f21fb20ae2 (diff)
parentdc84cfaf080d7ccd5d59b8553c25c1db746ee4fb (diff)
Merge remote-tracking branch 'origin/tqtc/lts-5.15.6' into tqtc/lts-5.15-opensourcev5.15.6-lts-lgpl
-rw-r--r--.qmake.conf2
-rw-r--r--src/plugins/openwnn/plugin/openwnninputmethod.cpp7
-rw-r--r--src/plugins/pinyin/3rdparty/pinyin/share/splparser.cpp8
-rw-r--r--src/plugins/pinyin/plugin/pinyininputmethod.cpp2
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp14
-rw-r--r--src/virtualkeyboard/qvirtualkeyboardinputengine.cpp6
-rw-r--r--src/virtualkeyboard/virtualkeyboardsettings.cpp1
-rw-r--r--tests/auto/inputpanel/data/tst_inputpanel.qml40
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.