Index: chrome/browser/ui/ash/event_rewriter.cc |
diff --git a/chrome/browser/ui/ash/event_rewriter.cc b/chrome/browser/ui/ash/event_rewriter.cc |
index ad5fdec8222933b98b2b6ea4d600ac8061314596..78730dbdf82dc9564b91d1cf40bc6578b1e99305 100644 |
--- a/chrome/browser/ui/ash/event_rewriter.cc |
+++ b/chrome/browser/ui/ash/event_rewriter.cc |
@@ -85,6 +85,7 @@ const struct ModifierFlagToPrefName { |
{ Mod4Mask, 0, prefs::kLanguageRemapSearchKeyTo }, |
{ ControlMask, ui::EF_CONTROL_DOWN, prefs::kLanguageRemapControlKeyTo }, |
{ Mod1Mask, ui::EF_ALT_DOWN, prefs::kLanguageRemapAltKeyTo }, |
+ { Mod2Mask, 0, prefs::kLanguageRemapDiamondKeyTo }, |
}; |
// Gets a remapped key for |pref_name| key. For example, to find out which |
@@ -122,6 +123,11 @@ bool HasChromeOSKeyboard() { |
switches::kHasChromeOSKeyboard); |
} |
+bool HasDiamondKey() { |
+ return CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kHasChromeOSDiamondKey); |
+} |
+ |
bool IsMod3UsedByCurrentInputMethod() { |
// Since both German Neo2 XKB layout and Caps Lock depend on Mod3Mask, |
// it's not possible to make both features work. For now, we don't remap |
@@ -426,7 +432,7 @@ void EventRewriter::GetRemappedModifierMasks( |
(original_flags & ~(ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)) | |
*remapped_flags; |
- unsigned int native_mask = Mod4Mask | ControlMask | Mod1Mask; |
+ unsigned int native_mask = Mod4Mask | ControlMask | Mod1Mask | Mod2Mask; |
if (!skip_mod3) |
native_mask |= Mod3Mask; |
*remapped_native_modifiers = |
@@ -467,6 +473,18 @@ bool EventRewriter::RewriteModifiers(ui::KeyEvent* event) { |
// First, remap |keysym|. |
const ModifierRemapping* remapped_key = NULL; |
switch (keysym) { |
+ // On Chrome OS, XF86XK_Launch6 (F15) with Mod2Mask is sent when Diamond |
+ // key is pressed. |
+ case XF86XK_Launch6: |
+ // When diamond key is not available, the configuration UI for Diamond |
+ // key is not shown. Therefore, ignore the kLanguageRemapDiamondKeyTo |
+ // syncable pref. |
+ if (HasDiamondKey()) |
+ remapped_key = |
+ GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service); |
+ if (!remapped_key) |
+ remapped_key = kModifierRemappingCtrl; |
+ break; |
// On Chrome OS, XF86XK_Launch7 (F16) with Mod3Mask is sent when Caps Lock |
// is pressed (with one exception: when IsMod3UsedByCurrentInputMethod() is |
// true, the key generates XK_ISO_Level3_Shift with Mod3Mask, not |
@@ -475,11 +493,11 @@ bool EventRewriter::RewriteModifiers(ui::KeyEvent* event) { |
// When a Chrome OS keyboard is available, the configuration UI for Caps |
// Lock is not shown. Therefore, ignore the kLanguageRemapCapsLockKeyTo |
// syncable pref. |
- if (HasChromeOSKeyboard()) |
- remapped_key = kModifierRemappingCapsLock; |
- else |
+ if (!HasChromeOSKeyboard()) |
remapped_key = |
GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service); |
+ if (!remapped_key) |
+ remapped_key = kModifierRemappingCapsLock; |
break; |
case XK_Super_L: |
case XK_Super_R: |