Index: ui/events/test/keyboard_layout_win.cc |
diff --git a/ui/events/test/keyboard_layout_win.cc b/ui/events/test/keyboard_layout_win.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f6870874128491f64c4a5bcd9e9918a2dc30c41b |
--- /dev/null |
+++ b/ui/events/test/keyboard_layout_win.cc |
@@ -0,0 +1,50 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/events/test/keyboard_layout.h" |
+ |
+#include "base/logging.h" |
+ |
+namespace ui { |
+ |
+// |LoadKeyboardLayout()| ensures the locale to be loaded into the system |
+// (Similar to temporarily adding a locale in Control Panel), otherwise |
+// |ToUnicodeEx()| will fall-back to the default locale. |
+// See MSDN LoadKeyboardLayout(): |
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms646305(v=vs.85).aspx |
+// And language constants and strings: |
+// https://msdn.microsoft.com/en-us/library/windows/desktop/dd318693(v=vs.85).aspx |
+PlatformKeyboardLayout GetPlatformKeyboardLayout(KeyboardLayout layout) { |
+ switch (layout) { |
+ case KEYBOARD_LAYOUT_ENGLISH_US: |
+ return LoadKeyboardLayout(L"00000409", KLF_ACTIVATE); |
+ case KEYBOARD_LAYOUT_FRENCH: |
+ return LoadKeyboardLayout(L"0000040c", KLF_ACTIVATE); |
+ case KEYBOARD_LAYOUT_GERMAN: |
+ return LoadKeyboardLayout(L"00000407", KLF_ACTIVATE); |
+ case KEYBOARD_LAYOUT_GREEK: |
+ return LoadKeyboardLayout(L"00000408", KLF_ACTIVATE); |
+ case KEYBOARD_LAYOUT_JAPANESE: |
+ return LoadKeyboardLayout(L"00000411", KLF_ACTIVATE); |
+ case KEYBOARD_LAYOUT_KOREAN: |
+ return LoadKeyboardLayout(L"00000412", KLF_ACTIVATE); |
Wez
2016/09/13 20:03:16
We no longer care about DrMemory failures?
Tomasz Moniuszko
2016/09/14 13:56:06
Peter Kasting suggested this change here: https://
Wez
2016/09/16 00:57:18
Peter's approach seems reasonable, but let's comme
|
+ case KEYBOARD_LAYOUT_RUSSIAN: |
+ return LoadKeyboardLayout(L"00000419", KLF_ACTIVATE); |
+ default: |
Wez
2016/09/13 20:03:16
You're handling all 7 possibilities; do you need a
Tomasz Moniuszko
2016/09/14 13:56:06
I'll move NOTREACHED() outside of switch statement
Wez
2016/09/16 00:57:18
Acknowledged.
|
+ NOTREACHED(); |
+ return 0; |
+ } |
+} |
+ |
+PlatformKeyboardLayout ScopedKeyboardLayout::GetActiveLayout() { |
+ return GetKeyboardLayout(0); |
+} |
+ |
+void ScopedKeyboardLayout::ActivateLayout(PlatformKeyboardLayout layout) { |
+ DCHECK(layout); |
+ HKL result = ActivateKeyboardLayout(layout, 0); |
+ DCHECK(!!result); |
+} |
+ |
+} // namespace ui |