Index: chrome/browser/chromeos/events/event_rewriter.cc |
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc |
index fdd465ff6897bcd970bbf08d91b758457a58e186..900ac4a8adf0cdfb477fe5255f0603ff7fc4c906 100644 |
--- a/chrome/browser/chromeos/events/event_rewriter.cc |
+++ b/chrome/browser/chromeos/events/event_rewriter.cc |
@@ -182,7 +182,8 @@ EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) |
: last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), |
ime_keyboard_for_testing_(NULL), |
pref_service_for_testing_(NULL), |
- sticky_keys_controller_(sticky_keys_controller) { |
+ sticky_keys_controller_(sticky_keys_controller), |
+ active_diamond_modifier_(ui::EF_NONE) { |
} |
EventRewriter::~EventRewriter() { |
@@ -325,7 +326,7 @@ int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service, |
const ui::Event& event, |
int original_flags) const { |
int unmodified_flags = original_flags; |
- int rewritten_flags = 0; |
+ int rewritten_flags = active_diamond_modifier_; |
for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings)); |
++i) { |
const ModifierRemapping* remapped_key = NULL; |
@@ -619,11 +620,20 @@ void EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event, |
if (HasDiamondKey()) |
remapped_key = |
GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service); |
- // Default behavior is Ctrl key. |
+ // Default behavior of F15 is Control, even if --has-chromeos-diamond-key |
+ // is absent, according to unit test comments. |
if (!remapped_key) { |
DCHECK_EQ(ui::VKEY_CONTROL, kModifierRemappingCtrl->key_code); |
remapped_key = kModifierRemappingCtrl; |
- characteristic_flag = ui::EF_CONTROL_DOWN; |
+ } |
+ // F15 is not a modifier key, so we need to track its state directly. |
+ if (key_event.type() == ui::ET_KEY_PRESSED) { |
+ int remapped_flag = remapped_key->flag; |
+ if (remapped_key->remap_to == input_method::kCapsLockKey) |
+ remapped_flag |= ui::EF_CAPS_LOCK_DOWN; |
+ active_diamond_modifier_ = remapped_flag; |
+ } else { |
+ active_diamond_modifier_ = ui::EF_NONE; |
} |
break; |
// On Chrome OS, XF86XK_Launch7 (F16) with Mod3Mask is sent when Caps Lock |