diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index fc83a9c766..9d64083237 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -202,9 +202,16 @@ "vcruntime140_1_app.dll", "vcruntime140_app.dll", "modules\\PowerAccent\\Vanara.Core.dll", + "modules\\PowerAccent\\Vanara.PInvoke.ComCtl32.dll", + "modules\\PowerAccent\\Vanara.PInvoke.Cryptography.dll", "modules\\PowerAccent\\Vanara.PInvoke.Gdi32.dll", "modules\\PowerAccent\\Vanara.PInvoke.Kernel32.dll", + "modules\\PowerAccent\\Vanara.PInvoke.Ole.dll", + "modules\\PowerAccent\\Vanara.PInvoke.Rpc.dll", + "modules\\PowerAccent\\Vanara.PInvoke.Security.dll", "modules\\PowerAccent\\Vanara.PInvoke.Shared.dll", + "modules\\PowerAccent\\Vanara.PInvoke.Shell32.dll", + "modules\\PowerAccent\\Vanara.PInvoke.ShlwApi.dll", "modules\\PowerAccent\\Vanara.PInvoke.User32.dll", "modules\\FileExplorerPreview\\Microsoft.Web.WebView2.Core.dll", "modules\\FileExplorerPreview\\Microsoft.Web.WebView2.WinForms.dll", diff --git a/installer/PowerToysSetup/Product.wxs b/installer/PowerToysSetup/Product.wxs index 70dbe48f53..e9d063dee0 100644 --- a/installer/PowerToysSetup/Product.wxs +++ b/installer/PowerToysSetup/Product.wxs @@ -129,7 +129,7 @@ - + (); + } + + // Currencies (source: https://www.eurochange.co.uk/travel-money/world-currency-abbreviations-symbols-and-codes-travel-money) + private static char[] GetDefaultLetterKeyCUR(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_B: + return new char[] { '฿', 'в' }; + case LetterKey.VK_C: + return new char[] { '¢', '₡', 'č' }; + case LetterKey.VK_D: + return new char[] { '₫' }; + case LetterKey.VK_E: + return new char[] { '€' }; + case LetterKey.VK_F: + return new char[] { 'ƒ' }; + case LetterKey.VK_H: + return new char[] { '₴' }; + case LetterKey.VK_K: + return new char[] { '₭' }; + case LetterKey.VK_L: + return new char[] { 'ł' }; + case LetterKey.VK_N: + return new char[] { 'л' }; + case LetterKey.VK_M: + return new char[] { '₼' }; + case LetterKey.VK_P: + return new char[] { '£', '₽' }; + case LetterKey.VK_R: + return new char[] { '₹', '៛', '﷼' }; + case LetterKey.VK_S: + return new char[] { '$', '₪' }; + case LetterKey.VK_T: + return new char[] { '₮', '₺' }; + case LetterKey.VK_W: + return new char[] { '₩' }; + case LetterKey.VK_Y: + return new char[] { '¥' }; + case LetterKey.VK_Z: + return new char[] { 'z' }; + } + + return Array.Empty(); + } + + // French + private static char[] GetDefaultLetterKeyFR(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'à', 'â', 'á', 'ä', 'ã', 'æ' }; + case LetterKey.VK_C: + return new char[] { 'ç' }; + case LetterKey.VK_E: + return new char[] { 'é', 'è', 'ê', 'ë', '€' }; + case LetterKey.VK_I: + return new char[] { 'î', 'ï', 'í', 'ì' }; + case LetterKey.VK_O: + return new char[] { 'ô', 'ö', 'ó', 'ò', 'õ', 'œ' }; + case LetterKey.VK_U: + return new char[] { 'û', 'ù', 'ü', 'ú' }; + case LetterKey.VK_Y: + return new char[] { 'ÿ', 'ý' }; + } + + return Array.Empty(); + } + + // Iceland + private static char[] GetDefaultLetterKeyIS(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'á', 'æ' }; + case LetterKey.VK_D: + return new char[] { 'ð' }; + case LetterKey.VK_E: + return new char[] { 'é' }; + case LetterKey.VK_O: + return new char[] { 'ó', 'ö' }; + case LetterKey.VK_U: + return new char[] { 'ú' }; + case LetterKey.VK_Y: + return new char[] { 'ý' }; + case LetterKey.VK_COMMA: + return new char[] { 'þ' }; + } + + return Array.Empty(); + } + + // Spain + private static char[] GetDefaultLetterKeySP(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'á' }; + case LetterKey.VK_E: + return new char[] { 'é', '€' }; + case LetterKey.VK_I: + return new char[] { 'í' }; + case LetterKey.VK_N: + return new char[] { 'ñ' }; + case LetterKey.VK_O: + return new char[] { 'ó' }; + case LetterKey.VK_U: + return new char[] { 'ú', 'ü' }; + case LetterKey.VK_COMMA: + return new char[] { '¿', '?' }; + } + + return Array.Empty(); + } + + // Maori + private static char[] GetDefaultLetterKeyMI(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'ā' }; + case LetterKey.VK_E: + return new char[] { 'ē' }; + case LetterKey.VK_I: + return new char[] { 'ī' }; + case LetterKey.VK_O: + return new char[] { 'ō' }; + case LetterKey.VK_S: + return new char[] { '$' }; + case LetterKey.VK_U: + return new char[] { 'ū' }; + } + + return Array.Empty(); + } + + // Pinyin + private static char[] GetDefaultLetterKeyPI(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'ā', 'á', 'ǎ', 'à', 'a' }; + case LetterKey.VK_E: + return new char[] { 'ē', 'é', 'ě', 'è', 'e' }; + case LetterKey.VK_I: + return new char[] { 'ī', 'í', 'ǐ', 'ì', 'i' }; + case LetterKey.VK_O: + return new char[] { 'ō', 'ó', 'ǒ', 'ò', 'o' }; + case LetterKey.VK_U: + return new char[] { 'ū', 'ú', 'ǔ', 'ù', 'u' }; + case LetterKey.VK_V: + return new char[] { 'ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü' }; + } + + return Array.Empty(); + } + + // Turkish + private static char[] GetDefaultLetterKeyTK(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'â' }; + case LetterKey.VK_C: + return new char[] { 'ç' }; + case LetterKey.VK_E: + return new char[] { 'ë', '€' }; + case LetterKey.VK_G: + return new char[] { 'ğ' }; + case LetterKey.VK_I: + return new char[] { 'ı', 'İ', 'î', }; + case LetterKey.VK_O: + return new char[] { 'ö', 'ô' }; + case LetterKey.VK_S: + return new char[] { 'ş' }; + case LetterKey.VK_T: + return new char[] { '₺' }; + case LetterKey.VK_U: + return new char[] { 'ü', 'û' }; + } + + return Array.Empty(); + } + + // Polish + private static char[] GetDefaultLetterKeyPL(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'ą' }; + case LetterKey.VK_C: + return new char[] { 'ć' }; + case LetterKey.VK_E: + return new char[] { 'ę', '€' }; + case LetterKey.VK_L: + return new char[] { 'ł' }; + case LetterKey.VK_N: + return new char[] { 'ń' }; + case LetterKey.VK_O: + return new char[] { 'ó' }; + case LetterKey.VK_S: + return new char[] { 'ś' }; + case LetterKey.VK_Z: + return new char[] { 'ż', 'ź' }; + } + + return Array.Empty(); + } + + // Slovak + private static char[] GetDefaultLetterKeySK(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'á', 'ä' }; + case LetterKey.VK_C: + return new char[] { 'č' }; + case LetterKey.VK_D: + return new char[] { 'ď' }; + case LetterKey.VK_E: + return new char[] { 'é', '€' }; + case LetterKey.VK_I: + return new char[] { 'í' }; + case LetterKey.VK_L: + return new char[] { 'ľ', 'ĺ' }; + case LetterKey.VK_N: + return new char[] { 'ň' }; + case LetterKey.VK_O: + return new char[] { 'ó', 'ô' }; + case LetterKey.VK_R: + return new char[] { 'ŕ' }; + case LetterKey.VK_S: + return new char[] { 'š' }; + case LetterKey.VK_T: + return new char[] { 'ť' }; + case LetterKey.VK_U: + return new char[] { 'ú' }; + case LetterKey.VK_Y: + return new char[] { 'ý' }; + case LetterKey.VK_Z: + return new char[] { 'ž' }; + } + + return Array.Empty(); + } + + // Czech + private static char[] GetDefaultLetterKeyCZ(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'á' }; + case LetterKey.VK_C: + return new char[] { 'č' }; + case LetterKey.VK_D: + return new char[] { 'ď' }; + case LetterKey.VK_E: + return new char[] { 'ě', 'é' }; + case LetterKey.VK_I: + return new char[] { 'í' }; + case LetterKey.VK_N: + return new char[] { 'ň' }; + case LetterKey.VK_O: + return new char[] { 'ó' }; + case LetterKey.VK_R: + return new char[] { 'ř' }; + case LetterKey.VK_S: + return new char[] { 'š' }; + case LetterKey.VK_T: + return new char[] { 'ť' }; + case LetterKey.VK_U: + return new char[] { 'ů', 'ú' }; + case LetterKey.VK_Y: + return new char[] { 'ý' }; + case LetterKey.VK_Z: + return new char[] { 'ž' }; + } + + return Array.Empty(); + } + + // German + private static char[] GetDefaultLetterKeyDE(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'ä' }; + case LetterKey.VK_E: + return new char[] { '€' }; + case LetterKey.VK_O: + return new char[] { 'ö' }; + case LetterKey.VK_S: + return new char[] { 'ß' }; + case LetterKey.VK_U: + return new char[] { 'ü' }; + } + + return Array.Empty(); + } + + // Hungarian + private static char[] GetDefaultLetterKeyHU(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'á' }; + case LetterKey.VK_E: + return new char[] { 'é' }; + case LetterKey.VK_I: + return new char[] { 'í' }; + case LetterKey.VK_O: + return new char[] { 'ó', 'ő', 'ö' }; + case LetterKey.VK_U: + return new char[] { 'ú', 'ű', 'ü' }; + } + + return Array.Empty(); + } + + // Romanian + private static char[] GetDefaultLetterKeyRO(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'ă', 'â' }; + case LetterKey.VK_I: + return new char[] { 'î' }; + case LetterKey.VK_S: + return new char[] { 'ș' }; + case LetterKey.VK_T: + return new char[] { 'ț' }; + } + + return Array.Empty(); + } + + // Italian + private static char[] GetDefaultLetterKeyIT(LetterKey letter) + { + switch (letter) + { + case LetterKey.VK_A: + return new char[] { 'à' }; + case LetterKey.VK_E: + return new char[] { 'è', 'é', '€' }; + case LetterKey.VK_I: + return new char[] { 'ì', 'í' }; + case LetterKey.VK_O: + return new char[] { 'ò', 'ó' }; + case LetterKey.VK_U: + return new char[] { 'ù', 'ú' }; + } + + return Array.Empty(); + } + } +} diff --git a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.Core.csproj b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.Core.csproj index 3acf6d1eba..6fc6b89f27 100644 --- a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.Core.csproj +++ b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.Core.csproj @@ -18,7 +18,8 @@ - + + diff --git a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs index e419bd07b7..b3f117fc0a 100644 --- a/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs +++ b/src/modules/poweraccent/PowerAccent.Core/PowerAccent.cs @@ -57,12 +57,17 @@ public class PowerAccent : IDisposable ProcessNextChar(triggerKey); }); })); + + _keyboardListener.SetIsLanguageLetterDelegate(new PowerToys.PowerAccentKeyboardService.IsLanguageLetter((LetterKey letterKey, out bool result) => + { + result = Languages.GetDefaultLetterKey(letterKey, _settingService.SelectedLang).Length > 0; + })); } private void ShowToolbar(LetterKey letterKey) { _visible = true; - _characters = (WindowsFunctions.IsCapsLockState() || WindowsFunctions.IsShiftState()) ? ToUpper(SettingsService.GetDefaultLetterKey(letterKey)) : SettingsService.GetDefaultLetterKey(letterKey); + _characters = (WindowsFunctions.IsCapsLockState() || WindowsFunctions.IsShiftState()) ? ToUpper(Languages.GetDefaultLetterKey(letterKey, _settingService.SelectedLang)) : Languages.GetDefaultLetterKey(letterKey, _settingService.SelectedLang); Task.Delay(_settingService.InputTime).ContinueWith( t => { diff --git a/src/modules/poweraccent/PowerAccent.Core/Services/SettingsService.cs b/src/modules/poweraccent/PowerAccent.Core/Services/SettingsService.cs index 4a5ba06e4d..c82215677c 100644 --- a/src/modules/poweraccent/PowerAccent.Core/Services/SettingsService.cs +++ b/src/modules/poweraccent/PowerAccent.Core/Services/SettingsService.cs @@ -55,6 +55,9 @@ public class SettingsService InputTime = settings.Properties.InputTime.Value; _keyboardListener.UpdateInputTime(InputTime); + + SelectedLang = Enum.TryParse(settings.Properties.SelectedLang.Value, out Language selectedLangValue) ? selectedLangValue : Language.ALL; + switch (settings.Properties.ToolbarPosition.Value) { case "Top center": @@ -85,8 +88,6 @@ public class SettingsService Position = Position.Center; break; } - - _keyboardListener.UpdateInputTime(InputTime); } } catch (Exception ex) @@ -142,31 +143,19 @@ public class SettingsService } } - public static char[] GetDefaultLetterKey(LetterKey letter) + private Language _selectedLang; + + public Language SelectedLang { - switch (letter) + get { - case LetterKey.VK_A: - return new char[] { 'à', 'â', 'á', 'ä', 'ã', 'å', 'æ' }; - case LetterKey.VK_C: - return new char[] { 'ć', 'ĉ', 'č', 'ċ', 'ç', 'ḉ' }; - case LetterKey.VK_E: - return new char[] { 'é', 'è', 'ê', 'ë', 'ē', 'ė', '€' }; - case LetterKey.VK_I: - return new char[] { 'î', 'ï', 'í', 'ì', 'ī' }; - case LetterKey.VK_N: - return new char[] { 'ñ', 'ń' }; - case LetterKey.VK_O: - return new char[] { 'ô', 'ö', 'ó', 'ò', 'õ', 'ø', 'œ' }; - case LetterKey.VK_S: - return new char[] { 'š', 'ß', 'ś' }; - case LetterKey.VK_U: - return new char[] { 'û', 'ù', 'ü', 'ú', 'ū' }; - case LetterKey.VK_Y: - return new char[] { 'ÿ', 'ý' }; + return _selectedLang; } - throw new ArgumentException("Letter {0} is missing", letter.ToString()); + set + { + _selectedLang = value; + } } } diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp index d0490a0327..63bde6769e 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.cpp @@ -68,6 +68,15 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation }; } + void KeyboardListener::SetIsLanguageLetterDelegate(IsLanguageLetter isLanguageLetterDelegate) + { + m_isLanguageLetterCb = [trigger = std::move(isLanguageLetterDelegate)](LetterKey key) { + bool result; + trigger(key, result); + return result; + }; + } + void KeyboardListener::UpdateActivationKey(int32_t activationKey) { m_settings.activationKey = static_cast(activationKey); @@ -80,7 +89,7 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation bool KeyboardListener::OnKeyDown(KBDLLHOOKSTRUCT info) noexcept { - if (std::find(std::begin(letters), end(letters), static_cast(info.vkCode)) != end(letters)) + if (std::find(std::begin(letters), end(letters), static_cast(info.vkCode)) != end(letters) && m_isLanguageLetterCb(static_cast(info.vkCode))) { m_stopwatch.reset(); letterPressed = static_cast(info.vkCode); @@ -139,7 +148,7 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation bool KeyboardListener::OnKeyUp(KBDLLHOOKSTRUCT info) noexcept { - if (std::find(std::begin(letters), end(letters), static_cast(info.vkCode)) != end(letters)) + if (std::find(std::begin(letters), end(letters), static_cast(info.vkCode)) != end(letters) && m_isLanguageLetterCb(static_cast(info.vkCode))) { letterPressed = LetterKey::None; diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h index a11b67766f..11140468dd 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.h @@ -32,6 +32,7 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation void SetShowToolbarEvent(ShowToolbar showToolbarEvent); void SetHideToolbarEvent(HideToolbar hideToolbarEvent); void SetNextCharEvent(NextChar NextCharEvent); + void SetIsLanguageLetterDelegate(IsLanguageLetter IsLanguageLetterDelegate); void UpdateActivationKey(int32_t activationKey); void UpdateInputTime(int32_t inputTime); @@ -49,18 +50,47 @@ namespace winrt::PowerToys::PowerAccentKeyboardService::implementation std::function m_showToolbarCb; std::function m_hideToolbarCb; std::function m_nextCharCb; + std::function m_isLanguageLetterCb; bool m_triggeredWithSpace; spdlog::stopwatch m_stopwatch; - static inline const std::vector letters = { LetterKey::VK_A, - LetterKey::VK_C, - LetterKey::VK_E, - LetterKey::VK_I, - LetterKey::VK_N, - LetterKey::VK_O, - LetterKey::VK_S, - LetterKey::VK_U, - LetterKey::VK_Y }; + static inline const std::vector letters = { LetterKey::VK_0, + LetterKey::VK_1, + LetterKey::VK_2, + LetterKey::VK_3, + LetterKey::VK_4, + LetterKey::VK_5, + LetterKey::VK_6, + LetterKey::VK_7, + LetterKey::VK_8, + LetterKey::VK_9, + LetterKey::VK_A, + LetterKey::VK_B, + LetterKey::VK_C, + LetterKey::VK_D, + LetterKey::VK_E, + LetterKey::VK_F, + LetterKey::VK_G, + LetterKey::VK_H, + LetterKey::VK_I, + LetterKey::VK_J, + LetterKey::VK_K, + LetterKey::VK_L, + LetterKey::VK_M, + LetterKey::VK_N, + LetterKey::VK_O, + LetterKey::VK_P, + LetterKey::VK_Q, + LetterKey::VK_R, + LetterKey::VK_S, + LetterKey::VK_T, + LetterKey::VK_U, + LetterKey::VK_V, + LetterKey::VK_W, + LetterKey::VK_X, + LetterKey::VK_Y, + LetterKey::VK_Z, + LetterKey::VK_COMMA }; LetterKey letterPressed{}; static inline const std::vector triggers = { TriggerKey::Right, TriggerKey::Left, TriggerKey::Space }; diff --git a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl index 46a11a7ffa..272d3ce3ed 100644 --- a/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl +++ b/src/modules/poweraccent/PowerAccentKeyboardService/KeyboardListener.idl @@ -5,15 +5,43 @@ namespace PowerToys enum LetterKey { None = 0x00, + VK_0 = 0x30, + VK_1 = 0x31, + VK_2 = 0x32, + VK_3 = 0x33, + VK_4 = 0x34, + VK_5 = 0x35, + VK_6 = 0x36, + VK_7 = 0x37, + VK_8 = 0x38, + VK_9 = 0x39, VK_A = 0x41, + VK_B = 0x42, VK_C = 0x43, + VK_D = 0x44, VK_E = 0x45, + VK_F = 0x46, + VK_G = 0x47, + VK_H = 0x48, VK_I = 0x49, + VK_J = 0x4A, + VK_K = 0x4B, + VK_L = 0x4C, + VK_M = 0x4D, VK_N = 0x4E, VK_O = 0x4F, + VK_P = 0x50, + VK_Q = 0x51, + VK_R = 0x52, VK_S = 0x53, + VK_T = 0x54, VK_U = 0x55, - VK_Y = 0x59 + VK_V = 0x56, + VK_W = 0x57, + VK_X = 0x58, + VK_Y = 0x59, + VK_Z = 0x5A, + VK_COMMA = 0xBC }; enum TriggerKey @@ -33,6 +61,7 @@ namespace PowerToys [version(1.0), uuid(37197089-5438-4479-af57-30ab3f3c8be4)] delegate void ShowToolbar(LetterKey key); [version(1.0), uuid(8eb79d6b-1826-424f-9fbc-af21ae19725e)] delegate void HideToolbar(InputType inputType); [version(1.0), uuid(db72d45c-a5a2-446f-bdc1-506e9121764a)] delegate void NextChar(TriggerKey inputSpace); + [version(1.0), uuid(20be2919-2b91-4313-b6e0-4c3484fe91ef)] delegate void IsLanguageLetter(LetterKey key, [out] boolean* result); [default_interface] runtimeclass KeyboardListener { KeyboardListener(); @@ -41,6 +70,7 @@ namespace PowerToys void SetShowToolbarEvent(event ShowToolbar showToolbarEvent); void SetHideToolbarEvent(event HideToolbar hideToolbarEvent); void SetNextCharEvent(event NextChar nextCharEvent); + void SetIsLanguageLetterDelegate(IsLanguageLetter isLanguageLetterDelegate); void UpdateActivationKey(Int32 activationKey); void UpdateInputTime(Int32 inputTime); } diff --git a/src/settings-ui/Settings.UI.Library/PowerAccentProperties.cs b/src/settings-ui/Settings.UI.Library/PowerAccentProperties.cs index 6aa4773fc3..e365da3366 100644 --- a/src/settings-ui/Settings.UI.Library/PowerAccentProperties.cs +++ b/src/settings-ui/Settings.UI.Library/PowerAccentProperties.cs @@ -18,11 +18,15 @@ namespace Microsoft.PowerToys.Settings.UI.Library [JsonPropertyName("input_time_ms")] public IntProperty InputTime { get; set; } + [JsonPropertyName("selected_lang")] + public StringProperty SelectedLang { get; set; } + public PowerAccentProperties() { ActivationKey = PowerAccentActivationKey.Both; ToolbarPosition = "Top center"; InputTime = new IntProperty(200); + SelectedLang = "ALL"; } } } diff --git a/src/settings-ui/Settings.UI.Library/ViewModels/PowerAccentViewModel.cs b/src/settings-ui/Settings.UI.Library/ViewModels/PowerAccentViewModel.cs index 5f7ebcc6f3..6057cef6fb 100644 --- a/src/settings-ui/Settings.UI.Library/ViewModels/PowerAccentViewModel.cs +++ b/src/settings-ui/Settings.UI.Library/ViewModels/PowerAccentViewModel.cs @@ -74,6 +74,55 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels break; } + switch (_powerAccentSettings.Properties.SelectedLang.Value) + { + case "ALL": + _selectedLangIndex = 0; + break; + case "CUR": + _selectedLangIndex = 1; + break; + case "CZ": + _selectedLangIndex = 2; + break; + case "DE": + _selectedLangIndex = 3; + break; + case "FR": + _selectedLangIndex = 4; + break; + case "HU": + _selectedLangIndex = 5; + break; + case "IS": + _selectedLangIndex = 6; + break; + case "IT": + _selectedLangIndex = 7; + break; + case "MI": + _selectedLangIndex = 8; + break; + case "PI": + _selectedLangIndex = 9; + break; + case "PL": + _selectedLangIndex = 10; + break; + case "RO": + _selectedLangIndex = 11; + break; + case "SK": + _selectedLangIndex = 12; + break; + case "SP": + _selectedLangIndex = 13; + break; + case "TK": + _selectedLangIndex = 14; + break; + } + // set the callback functions value to hangle outgoing IPC message. SendConfigMSG = ipcMSGCallBackFunc; } @@ -192,6 +241,74 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels } } + private int _selectedLangIndex; + + public int SelectedLangIndex + { + get + { + return _selectedLangIndex; + } + + set + { + if (_selectedLangIndex != value) + { + _selectedLangIndex = value; + switch (_selectedLangIndex) + { + case 0: + _powerAccentSettings.Properties.SelectedLang.Value = "ALL"; + break; + case 1: + _powerAccentSettings.Properties.SelectedLang.Value = "CUR"; + break; + case 2: + _powerAccentSettings.Properties.SelectedLang.Value = "CZ"; + break; + case 3: + _powerAccentSettings.Properties.SelectedLang.Value = "DE"; + break; + case 4: + _powerAccentSettings.Properties.SelectedLang.Value = "FR"; + break; + case 5: + _powerAccentSettings.Properties.SelectedLang.Value = "HU"; + break; + case 6: + _powerAccentSettings.Properties.SelectedLang.Value = "IS"; + break; + case 7: + _powerAccentSettings.Properties.SelectedLang.Value = "IT"; + break; + case 8: + _powerAccentSettings.Properties.SelectedLang.Value = "MI"; + break; + case 9: + _powerAccentSettings.Properties.SelectedLang.Value = "PI"; + break; + case 10: + _powerAccentSettings.Properties.SelectedLang.Value = "PL"; + break; + case 11: + _powerAccentSettings.Properties.SelectedLang.Value = "RO"; + break; + case 12: + _powerAccentSettings.Properties.SelectedLang.Value = "SK"; + break; + case 13: + _powerAccentSettings.Properties.SelectedLang.Value = "SP"; + break; + case 14: + _powerAccentSettings.Properties.SelectedLang.Value = "TK"; + break; + } + + RaisePropertyChanged(nameof(SelectedLangIndex)); + } + } + } + private void RaisePropertyChanged([CallerMemberName] string propertyName = null) { // Notify UI of property change diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw index f2d729f759..f6a7e0a237 100644 --- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw +++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw @@ -2350,7 +2350,8 @@ Activate by holding the key for the character you want to add an accent to, then Hold the key down for this much time to make the accent menu appear (ms) ms = milliseconds - + + Learn more about Text Extractor @@ -2399,4 +2400,61 @@ Activate by holding the key for the character you want to add an accent to, then The continuous capture mode will consume more resources when in use. Also, measurements will be excluded from screenshots and screen capture. pointer as in mouse pointer. Resources refer to things like CPU, GPU, RAM - + + Disable when Game Mode is On + + + Language + + + Choose language + + + Show only accented characters common to the selected language + + + All available + + + Currency + + + Czech + + + Dutch + + + French + + + Maori + + + Pinyin + + + Polish + + + Slovakian + + + Spanish + + + Turkish + + + Icelandic + + + Romanian + + + Hungarian + + + Italian + + \ No newline at end of file diff --git a/src/settings-ui/Settings.UI/Views/PowerAccentPage.xaml b/src/settings-ui/Settings.UI/Views/PowerAccentPage.xaml index 4f69cdbcb0..71fbd72094 100644 --- a/src/settings-ui/Settings.UI/Views/PowerAccentPage.xaml +++ b/src/settings-ui/Settings.UI/Views/PowerAccentPage.xaml @@ -36,6 +36,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -54,6 +79,7 @@ +