diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-01-06 11:14:07 +0200 |
---|---|---|
committer | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2017-01-20 17:37:41 +0000 |
commit | 839a0afec5c39c92ac7221e2c5b6a866d6848382 (patch) | |
tree | 12a6bf83805af3cecc2887518d4ce12098dac817 /tests/auto | |
parent | e2c4fde1804654e449465aee1b9d217e05f06075 (diff) |
Automatically hide word candidate list
This change adds support for automatically hiding word candidate list
when inactive. This feature includes the following enhancements:
- Added new settings:
* VirtualKeyboardSettings.wordCandidateList.autoHideDelay
* VirtualKeyboardSettings.wordCandidateList.alwaysVisible
- Automatic hiding of word candidate list when inactive and when
autoHideDelay elapsed.
- alwaysVisible setting restores the old functionality.
- Added new signal selectionListsChanged() to input method, allowing
the input method to dynamically allocate or deallocate selection
lists.
- HunspellInputMethod does not allocate selection list when
dictionary cannot be loaded, or Qt::ImhNoPredictiveText is enabled.
Also, it will no longer use pre-edit text in this case.
- OpenWnnInputMethod does not allocate selection list if not needed.
[ChangeLog] Automatically hide word candidate list when inactive.
Change-Id: Ifa95ae8a7c47a96719ffdc2929601ff2ef9c0d2e
Reviewed-by: Gordan Markus <gordan.markus@pelagicore.com>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/inputpanel/data/inputpanel/inputpanel.qml | 17 | ||||
-rw-r--r-- | tests/auto/inputpanel/data/tst_inputpanel.qml | 43 |
2 files changed, 59 insertions, 1 deletions
diff --git a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml index 1fb37d74..034150be 100644 --- a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml +++ b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml @@ -30,7 +30,7 @@ import QtTest 1.0 import QtQuick 2.0 import QtQuick.VirtualKeyboard 2.1 -import QtQuick.VirtualKeyboard.Settings 2.1 +import QtQuick.VirtualKeyboard.Settings 2.2 import "handwriting.js" as Handwriting import "utils.js" as Utils @@ -83,6 +83,7 @@ InputPanel { property alias soundEffectSpy: soundEffectSpy property alias inputMethodResultSpy: inputMethodResultSpy property alias wordCandidateListChangedSpy: wordCandidateListChangedSpy + property alias wordCandidateListVisibleSpy: wordCandidateListVisibleSpy property alias shiftStateSpy: shiftStateSpy signal inputMethodResult(var text) @@ -164,6 +165,12 @@ InputPanel { } SignalSpy { + id: wordCandidateListVisibleSpy + target: wordCandidateView + signalName: "onVisibleConditionChanged" + } + + SignalSpy { id: shiftStateSpy target: InputContext signalName: "onShiftChanged" @@ -207,6 +214,14 @@ InputPanel { VirtualKeyboardSettings.activeLocales = activeLocales } + function setWclAutoHideDelay(wclAutoHideDelay) { + VirtualKeyboardSettings.wordCandidateList.autoHideDelay = wclAutoHideDelay + } + + function setWclAlwaysVisible(wclAlwaysVisible) { + VirtualKeyboardSettings.wordCandidateList.alwaysVisible = wclAlwaysVisible + } + function mapInputMode(inputModeName) { if (inputModeName === "Latin") return InputEngine.Latin diff --git a/tests/auto/inputpanel/data/tst_inputpanel.qml b/tests/auto/inputpanel/data/tst_inputpanel.qml index 9cc1fedb..ffe88cc8 100644 --- a/tests/auto/inputpanel/data/tst_inputpanel.qml +++ b/tests/auto/inputpanel/data/tst_inputpanel.qml @@ -78,6 +78,8 @@ Rectangle { } function prepareTest(data) { + inputPanel.setWclAutoHideDelay(data !== undefined && data.hasOwnProperty("wclAutoHideDelay") ? data.wclAutoHideDelay : 5000) + inputPanel.setWclAlwaysVisible(data !== undefined && data.hasOwnProperty("wclAlwaysVisible") && data.wclAlwaysVisible) container.forceActiveFocus() if (data !== undefined && data.hasOwnProperty("initText")) { textInput.text = data.initText @@ -172,6 +174,14 @@ Rectangle { property var locale: VirtualKeyboardSettings.locale; \ property var availableLocales: VirtualKeyboardSettings.availableLocales; \ property var activeLocales: VirtualKeyboardSettings.activeLocales }" }, + { qml: "import QtQuick 2.7; \ + import QtQuick.VirtualKeyboard.Settings 2.2; \ + Item { property var styleName: VirtualKeyboardSettings.styleName; \ + property var locale: VirtualKeyboardSettings.locale; \ + property var availableLocales: VirtualKeyboardSettings.availableLocales; \ + property var activeLocales: VirtualKeyboardSettings.activeLocales; \ + property var wclAutoHideDelay: VirtualKeyboardSettings.wordCandidateList.autoHideDelay; \ + property var wclAlwaysVisible: VirtualKeyboardSettings.wordCandidateList.alwaysVisible; }" }, ] } @@ -1569,5 +1579,38 @@ Rectangle { compare(languagePopupList.visible, false) } + + function test_wclAutoHide_data() { + return [ + { wclAutoHideDelay: 100, wclAlwaysVisible: false }, + { wclAutoHideDelay: 0, wclAlwaysVisible: true }, + { wclAutoHideDelay: 0, wclAlwaysVisible: false }, + ] + } + + function test_wclAutoHide(data) { + prepareTest(data) + inputPanel.wordCandidateListChangedSpy.clear() + Qt.inputMethod.show() + waitForRendering(inputPanel) + compare(inputPanel.wordCandidateView.visibleCondition, data.wclAlwaysVisible) + inputPanel.virtualKeyClick("a") + inputPanel.virtualKeyClick("u") + inputPanel.virtualKeyClick("t") + inputPanel.virtualKeyClick("o") + waitForRendering(inputPanel) + if (!inputPanel.wordCandidateListVisibleHint) + skip("Prediction/spell correction not enabled") + inputPanel.wordCandidateListChangedSpy.wait(1000) + compare(inputPanel.wordCandidateView.visibleCondition, true) + inputPanel.wordCandidateListVisibleSpy.clear() + inputPanel.selectionListSelectCurrentItem() + if (data.wclAlwaysVisible) + wait(data.wclAutoHideDelay + 250) + else + inputPanel.wordCandidateListVisibleSpy.wait(data.wclAutoHideDelay + 500) + waitForRendering(inputPanel) + compare(inputPanel.wordCandidateView.visibleCondition, data.wclAlwaysVisible) + } } } |