| 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 038c5436b021bfc23cad03c6555db0cf59ad4bae..08277134977686d6dee17a5734e2972737a7b8a6 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),
|
| + current_diamond_key_modifier_flags_(ui::EF_NONE) {
|
| }
|
|
|
| EventRewriter::~EventRewriter() {
|
| @@ -330,7 +331,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 = current_diamond_key_modifier_flags_;
|
| for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings));
|
| ++i) {
|
| const ModifierRemapping* remapped_key = NULL;
|
| @@ -624,11 +625,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;
|
| + current_diamond_key_modifier_flags_ = remapped_flag;
|
| + } else {
|
| + current_diamond_key_modifier_flags_ = ui::EF_NONE;
|
| }
|
| break;
|
| // On Chrome OS, XF86XK_Launch7 (F16) with Mod3Mask is sent when Caps Lock
|
|
|