diff options
author | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2018-08-24 01:52:35 +0300 |
---|---|---|
committer | Jarkko Koivikko <jarkko.koivikko@code-q.fi> | 2018-08-30 07:04:12 +0000 |
commit | 825b9a7de3a425c53316a1cd61f9dafdeaa7c649 (patch) | |
tree | 444052e888131df0db8103b4ed79691370ca8ff9 | |
parent | 24c2e5cc619f374d614ba1cecac291ae830772d3 (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.qml | 55 |
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 |