aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/virtualkeyboard/content/components/HandwritingModeKey.qml2
-rw-r--r--src/virtualkeyboard/content/components/Keyboard.qml73
-rw-r--r--src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml17
-rw-r--r--tests/auto/inputpanel/data/inputpanel/inputpanel.qml2
4 files changed, 45 insertions, 49 deletions
diff --git a/src/virtualkeyboard/content/components/HandwritingModeKey.qml b/src/virtualkeyboard/content/components/HandwritingModeKey.qml
index b07cdcd6..815d89db 100644
--- a/src/virtualkeyboard/content/components/HandwritingModeKey.qml
+++ b/src/virtualkeyboard/content/components/HandwritingModeKey.qml
@@ -49,6 +49,6 @@ Key {
displayText: "HWR"
functionKey: true
visible: keyboard.isHandwritingAvailable()
- onClicked: keyboard.handwritingMode = !keyboard.handwritingMode
+ onClicked: keyboard.setHandwritingMode(!keyboard.handwritingMode)
keyPanelDelegate: keyboard.style ? keyboard.style.handwritingKeyPanel : undefined
}
diff --git a/src/virtualkeyboard/content/components/Keyboard.qml b/src/virtualkeyboard/content/components/Keyboard.qml
index 8dfd7f7d..47df1afa 100644
--- a/src/virtualkeyboard/content/components/Keyboard.qml
+++ b/src/virtualkeyboard/content/components/Keyboard.qml
@@ -48,14 +48,17 @@ Item {
property string locale: localeIndex >= 0 && localeIndex < layoutsModel.count ? layoutsModel.get(localeIndex, "fileName") : ""
property string inputLocale
property int defaultLocaleIndex: -1
- property bool latinOnly: InputContext.inputMethodHints & Qt.ImhLatinOnly
- property bool preferNumbers: InputContext.inputMethodHints & Qt.ImhPreferNumbers
+ readonly property bool latinOnly: InputContext.inputMethodHints & (Qt.ImhLatinOnly | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)
+ readonly property bool preferNumbers: InputContext.inputMethodHints & Qt.ImhPreferNumbers
+ readonly property bool dialableCharactersOnly: InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly
+ readonly property bool formattedNumbersOnly: InputContext.inputMethodHints & Qt.ImhFormattedNumbersOnly
+ readonly property bool digitsOnly: InputContext.inputMethodHints & Qt.ImhDigitsOnly
property string layout
property string layoutType: {
if (keyboard.handwritingMode) return "handwriting"
- if (InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly) return "dialpad"
- if (InputContext.inputMethodHints & Qt.ImhFormattedNumbersOnly) return "numbers"
- if (InputContext.inputMethodHints & Qt.ImhDigitsOnly) return "digits"
+ if (keyboard.dialableCharactersOnly) return "dialpad"
+ if (keyboard.formattedNumbersOnly) return "numbers"
+ if (keyboard.digitsOnly) return "digits"
if (keyboard.symbolMode) return "symbols"
return "main"
}
@@ -128,17 +131,14 @@ Item {
updateAvailableLocaleIndices()
updateLayout()
}
- onLatinOnlyChanged: {
- if (!latinOnly)
- inputModeNeedsReset = true
- updateInputMethod()
- }
+ onLatinOnlyChanged: inputModeNeedsReset = true
onPreferNumbersChanged: {
keyboard.symbolMode = !keyboard.handwritingMode && preferNumbers
- if (!preferNumbers)
- inputModeNeedsReset = true
- updateInputMethod()
+ inputModeNeedsReset = true
}
+ onDialableCharactersOnlyChanged: inputModeNeedsReset = true
+ onFormattedNumbersOnlyChanged: inputModeNeedsReset = true
+ onDigitsOnlyChanged: inputModeNeedsReset = true
onHandwritingModeChanged: if (!keyboard.handwritingMode) keyboard.fullScreenHandwritingMode = false
onFullScreenHandwritingModeChanged: if (keyboard.fullScreenHandwritingMode) keyboard.handwritingMode = true
onLanguagePopupListActiveChanged: {
@@ -751,6 +751,12 @@ Item {
when: keyboard.layout.length > 0
}
+ onItemChanged: {
+ // Reset input mode if the new layout wants to override it
+ if (item && item.inputMode !== -1)
+ inputModeNeedsReset = true
+ }
+
MultiPointTouchArea {
id: keyboardInputArea
objectName: "keyboardInputArea"
@@ -1139,29 +1145,30 @@ Item {
var inputModes = InputContext.inputEngine.inputModes
if (inputModes.length > 0) {
// Reset to default input mode if the input locale has changed
- if (inputModeNeedsReset)
+ if (inputModeNeedsReset) {
inputMode = inputModes[0]
- // Check the current layout for input mode override
- if (keyboardLayoutLoader.item.inputMode !== -1)
- inputMode = keyboardLayoutLoader.item.inputMode
+ // Check the current layout for input mode override
+ if (keyboardLayoutLoader.item.inputMode !== -1)
+ inputMode = keyboardLayoutLoader.item.inputMode
+
+ // Update input mode automatically in handwriting mode
+ if (keyboard.handwritingMode) {
+ if (keyboard.dialableCharactersOnly && inputModes.indexOf(InputEngine.Dialable) !== -1)
+ inputMode = InputEngine.Dialable
+ else if ((keyboard.formattedNumbersOnly || keyboard.digitsOnly) && inputModes.indexOf(InputEngine.Numeric) !== -1)
+ inputMode = InputEngine.Numeric
+ else if (keyboardLayoutLoader.item.inputMode === -1)
+ inputMode = inputModes[0]
+ }
- // Update input mode automatically in handwriting mode
- if (keyboard.handwritingMode) {
- if ((InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly) && inputModes.indexOf(InputEngine.Dialable) !== -1)
- inputMode = InputEngine.Dialable
- else if ((InputContext.inputMethodHints & (Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) && inputModes.indexOf(InputEngine.Numeric) !== -1)
+ // Check the input method hints for input mode overrides
+ if (latinOnly)
+ inputMode = InputEngine.Latin
+ if (preferNumbers)
inputMode = InputEngine.Numeric
- else if (keyboardLayoutLoader.item.inputMode === -1)
- inputMode = inputModes[0]
}
- // Check the input method hints for input mode overrides
- if (latinOnly)
- inputMode = InputEngine.Latin
- if (preferNumbers)
- inputMode = InputEngine.Numeric
-
// Make sure the input mode is supported by the current input method
if (inputModes.indexOf(inputMode) === -1)
inputMode = inputModes[0]
@@ -1349,4 +1356,10 @@ Item {
function isHandwritingAvailable() {
return VirtualKeyboardInputMethods.indexOf("HandwritingInputMethod") !== -1 && layoutExists(locale, "handwriting")
}
+
+ function setHandwritingMode(enabled, resetInputMode) {
+ if (enabled && resetInputMode)
+ inputModeNeedsReset = true
+ handwritingMode = enabled
+ }
}
diff --git a/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml b/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml
index 0820cbbc..9fe3b191 100644
--- a/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml
+++ b/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml
@@ -36,23 +36,6 @@ KeyboardLayout {
return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent)
}
sharedLayouts: ['symbols']
- inputMode: preferredInputMode()
-
- Connections {
- target: InputContext
- onInputMethodHintsChanged: {
- var newInputMode = preferredInputMode()
- if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1)
- InputContext.inputEngine.inputMode = newInputMode
- }
- }
-
- function preferredInputMode() {
- return InputContext.inputMethodHints &
- (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly |
- Qt.ImhLatinOnly) ? InputEngine.Latin : InputEngine.JapaneseHandwriting
- }
-
KeyboardRow {
Layout.preferredHeight: 3
KeyboardColumn {
diff --git a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml
index 4fc167e4..1113a268 100644
--- a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml
+++ b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml
@@ -555,7 +555,7 @@ InputPanel {
function setHandwritingMode(enabled) {
if (inputPanel.keyboard.handwritingMode !== enabled) {
if (!enabled || inputPanel.keyboard.isHandwritingAvailable())
- inputPanel.keyboard.handwritingMode = enabled
+ inputPanel.keyboard.setHandwritingMode(enabled, true)
}
return inputPanel.keyboard.handwritingMode === enabled
}