aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-08-24 01:52:35 +0300
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-08-30 07:04:12 +0000
commit825b9a7de3a425c53316a1cd61f9dafdeaa7c649 (patch)
tree444052e888131df0db8103b4ed79691370ca8ff9
parent24c2e5cc619f374d614ba1cecac291ae830772d3 (diff)
Fix handling of invalid VirtualKeyboardSettings.activeLocales
If VirtualKeyboardSettings.activeLocales contains value(s) but not any value which is actually available, the available locale was set to contain only the first installed locale. Previously, before the layout fallback improvement, it was set to "en_GB" only. This change fixes the issue and treats invalid activeLocales as if it is empty (default). This means the default locale is set as normal. Change-Id: I8377d0f28d9217b896aa446fe6037f32943e72f4 Reviewed-by: Andy Shaw <andy.shaw@qt.io>
-rw-r--r--src/virtualkeyboard/content/components/Keyboard.qml55
1 files changed, 32 insertions, 23 deletions
diff --git a/src/virtualkeyboard/content/components/Keyboard.qml b/src/virtualkeyboard/content/components/Keyboard.qml
index 47566e55..6003bb03 100644
--- a/src/virtualkeyboard/content/components/Keyboard.qml
+++ b/src/virtualkeyboard/content/components/Keyboard.qml
@@ -1415,33 +1415,37 @@ Item {
}
}
- function updateAvailableLocaleIndices() {
- // Update list of all available locales
- var fallbackIndex = findFallbackIndex()
- var newIndices = []
- var newAvailableLocales = []
+ function filterLocaleIndices(filterCb) {
+ var localeIndices = []
for (var i = 0; i < layoutsModel.count; i++) {
- if (i === fallbackIndex)
- continue
- var localeName = layoutsModel.get(i, "fileName")
- if (isValidLocale(i) && newIndices.indexOf(i) === -1 && findLayout(localeName, "main")) {
- newIndices.push(i)
- newAvailableLocales.push(localeName)
+ if (localeIndices.indexOf(i) === -1) {
+ var localeName = layoutsModel.get(i, "fileName")
+ if (filterCb(localeName) && findLayout(localeName, "main"))
+ localeIndices.push(i)
}
}
+ return localeIndices
+ }
+
+ function updateAvailableLocaleIndices() {
+ // Update list of all available locales
+ var fallbackIndex = findFallbackIndex()
+ var newIndices = filterLocaleIndices(function(localeName) {
+ return isValidLocale(localeName)
+ })
// Handle case where the VirtualKeyboardSettings.activeLocales contains no valid entries
+ // Fetch all locales by ignoring active locales setting
if (newIndices.length === 0) {
- for (i = 0; i < layoutsModel.count; i++) {
- if (i === fallbackIndex)
- continue
- localeName = layoutsModel.get(i, "fileName")
- if (Qt.locale(localeName).name !== "C" && findLayout(localeName, "main")) {
- newIndices.push(i)
- newAvailableLocales.push(localeName)
- break
- }
- }
+ newIndices = filterLocaleIndices(function(localeName) {
+ return isValidLocale(localeName, true)
+ })
+ }
+
+ // Fetch matching locale names
+ var newAvailableLocales = []
+ for (var i = 0; i < newIndices.length; i++) {
+ newAvailableLocales.push(layoutsModel.get(newIndices[i], "fileName"))
}
newIndices.sort(function(a, b) { return a - b })
@@ -1519,7 +1523,7 @@ Item {
return -1
}
- function isValidLocale(localeNameOrIndex) {
+ function isValidLocale(localeNameOrIndex, ignoreActiveLocales) {
var localeName
if (typeof localeNameOrIndex == "number") {
if (localeNameOrIndex < 0 || localeNameOrIndex >= layoutsModel.count)
@@ -1529,13 +1533,18 @@ Item {
localeName = localeNameOrIndex
}
+ if (!localeName)
+ return false
+
if (localeName === "fallback")
return false
if (Qt.locale(localeName).name === "C")
return false
- if (VirtualKeyboardSettings.activeLocales.length > 0 && VirtualKeyboardSettings.activeLocales.indexOf(localeName) === -1)
+ if (ignoreActiveLocales !== true &&
+ VirtualKeyboardSettings.activeLocales.length > 0 &&
+ VirtualKeyboardSettings.activeLocales.indexOf(localeName) === -1)
return false
return true