Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(401)

Unified Diff: ui/events/keycodes/platform_key_map_win.cc

Issue 2128573002: [DomKey] Support Japanese (JIS) layout special keys (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Wez's review 2 Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/keycodes/keyboard_codes_win.h ('k') | ui/events/keycodes/platform_key_map_win_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/keycodes/platform_key_map_win.cc
diff --git a/ui/events/keycodes/platform_key_map_win.cc b/ui/events/keycodes/platform_key_map_win.cc
index 593e386936dd4167f21ca08105d0024186715185..da447d2cf0d6512f41d1f2c4d4afbc7fd18278a5 100644
--- a/ui/events/keycodes/platform_key_map_win.cc
+++ b/ui/events/keycodes/platform_key_map_win.cc
@@ -209,15 +209,41 @@ DomKey LanguageSpecificOemKeyboardCodeToDomKey(KeyboardCode key_code,
default:
return DomKey::NONE;
}
+ } else if (primary_language == LANG_JAPANESE) {
+ switch (key_code) {
+ // VKEY_KANA isn't generated by any modern layouts but is a listed value
+ // that third-party apps might synthesize, so we handle it anyway.
+ case VKEY_KANA:
+ case VKEY_ATTN:
+ return DomKey::KANA_MODE;
+ case VKEY_KANJI:
+ return DomKey::KANJI_MODE;
+ case VKEY_OEM_ATTN:
+ return DomKey::ALPHANUMERIC;
+ case VKEY_OEM_FINISH:
+ return DomKey::KATAKANA;
+ case VKEY_OEM_COPY:
+ return DomKey::HIRAGANA;
+ case VKEY_DBE_SBCSCHAR:
+ return DomKey::HANKAKU;
+ case VKEY_DBE_DBCSCHAR:
+ return DomKey::ZENKAKU;
+ case VKEY_OEM_BACKTAB:
+ return DomKey::ROMAJI;
+ default:
+ return DomKey::NONE;
+ }
}
- // TODO(chongz): Handle Japanese keyboard layout keys 0xF0..0xF5, VKEY_KANA,
- // VKEY_KANJI.
- // https://crbug.com/612694
return DomKey::NONE;
}
DomKey NonPrintableKeyboardCodeToDomKey(KeyboardCode key_code, HKL layout) {
- // 1. Most |key_codes| have the same meaning regardless of |layout|.
+ // 1. Check if |key_code| has a |layout|-specific meaning.
+ const DomKey key = LanguageSpecificOemKeyboardCodeToDomKey(key_code, layout);
+ if (key != DomKey::NONE)
+ return key;
+
+ // 2. Most |key_codes| have the same meaning regardless of |layout|.
const NonPrintableKeyEntry* result = std::lower_bound(
std::begin(kNonPrintableKeyMap), std::end(kNonPrintableKeyMap), key_code,
[](const NonPrintableKeyEntry& entry, KeyboardCode needle) {
@@ -225,8 +251,8 @@ DomKey NonPrintableKeyboardCodeToDomKey(KeyboardCode key_code, HKL layout) {
});
if (result != std::end(kNonPrintableKeyMap) && result->key_code == key_code)
return result->dom_key;
- // 2. Look up a |layout|-specific meaning for |key_code|.
- return LanguageSpecificOemKeyboardCodeToDomKey(key_code, layout);
+
+ return DomKey::NONE;
}
void CleanupKeyMapTls(void* data) {
@@ -280,11 +306,12 @@ DomKey PlatformKeyMap::DomKeyFromKeyboardCodeImpl(KeyboardCode key_code,
if (it != printable_keycode_to_key_.end()) {
key = it->second;
if (key != DomKey::NONE)
- break;
+ return key;
}
}
- return key;
+ // Return DomKey::UNIDENTIFIED to prevent US layout fall-back.
+ return DomKey::UNIDENTIFIED;
}
// static
« no previous file with comments | « ui/events/keycodes/keyboard_codes_win.h ('k') | ui/events/keycodes/platform_key_map_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698