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

Side by Side Diff: chrome/browser/chromeos/events/event_rewriter.cc

Issue 399443004: Maintain Diamond (F15) modifier state when rewriting. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/events/event_rewriter.h" 5 #include "chrome/browser/chromeos/events/event_rewriter.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/sticky_keys/sticky_keys_controller.h" 9 #include "ash/sticky_keys/sticky_keys_controller.h"
10 #include "ash/wm/window_state.h" 10 #include "ash/wm/window_state.h"
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 #endif 175 #endif
176 return false; 176 return false;
177 } 177 }
178 178
179 } // namespace 179 } // namespace
180 180
181 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) 181 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller)
182 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), 182 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE),
183 ime_keyboard_for_testing_(NULL), 183 ime_keyboard_for_testing_(NULL),
184 pref_service_for_testing_(NULL), 184 pref_service_for_testing_(NULL),
185 sticky_keys_controller_(sticky_keys_controller) { 185 sticky_keys_controller_(sticky_keys_controller),
186 active_diamond_modifier_(ui::EF_NONE) {
186 } 187 }
187 188
188 EventRewriter::~EventRewriter() { 189 EventRewriter::~EventRewriter() {
189 } 190 }
190 191
191 EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting( 192 EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting(
192 int device_id, 193 int device_id,
193 const std::string& device_name) { 194 const std::string& device_name) {
194 // Tests must avoid XI2 reserved device IDs. 195 // Tests must avoid XI2 reserved device IDs.
195 DCHECK((device_id < 0) || (device_id > 1)); 196 DCHECK((device_id < 0) || (device_id > 1));
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 return true; 319 return true;
319 320
320 ash::wm::WindowState* state = ash::wm::GetActiveWindowState(); 321 ash::wm::WindowState* state = ash::wm::GetActiveWindowState();
321 return state ? state->top_row_keys_are_function_keys() : false; 322 return state ? state->top_row_keys_are_function_keys() : false;
322 } 323 }
323 324
324 int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service, 325 int EventRewriter::GetRemappedModifierMasks(const PrefService& pref_service,
325 const ui::Event& event, 326 const ui::Event& event,
326 int original_flags) const { 327 int original_flags) const {
327 int unmodified_flags = original_flags; 328 int unmodified_flags = original_flags;
328 int rewritten_flags = 0; 329 int rewritten_flags = active_diamond_modifier_;
329 for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings)); 330 for (size_t i = 0; unmodified_flags && (i < arraysize(kModifierRemappings));
330 ++i) { 331 ++i) {
331 const ModifierRemapping* remapped_key = NULL; 332 const ModifierRemapping* remapped_key = NULL;
332 if (!(unmodified_flags & kModifierRemappings[i].flag)) 333 if (!(unmodified_flags & kModifierRemappings[i].flag))
333 continue; 334 continue;
334 switch (kModifierRemappings[i].flag) { 335 switch (kModifierRemappings[i].flag) {
335 case ui::EF_COMMAND_DOWN: 336 case ui::EF_COMMAND_DOWN:
336 // Rewrite Command key presses on an Apple keyboard to Control. 337 // Rewrite Command key presses on an Apple keyboard to Control.
337 if (IsAppleKeyboard()) { 338 if (IsAppleKeyboard()) {
338 DCHECK_EQ(ui::EF_CONTROL_DOWN, kModifierRemappingCtrl->flag); 339 DCHECK_EQ(ui::EF_CONTROL_DOWN, kModifierRemappingCtrl->flag);
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 switch (incoming.key_code) { 613 switch (incoming.key_code) {
613 // On Chrome OS, F15 (XF86XK_Launch6) with NumLock (Mod2Mask) is sent 614 // On Chrome OS, F15 (XF86XK_Launch6) with NumLock (Mod2Mask) is sent
614 // when Diamond key is pressed. 615 // when Diamond key is pressed.
615 case ui::VKEY_F15: 616 case ui::VKEY_F15:
616 // When diamond key is not available, the configuration UI for Diamond 617 // When diamond key is not available, the configuration UI for Diamond
617 // key is not shown. Therefore, ignore the kLanguageRemapDiamondKeyTo 618 // key is not shown. Therefore, ignore the kLanguageRemapDiamondKeyTo
618 // syncable pref. 619 // syncable pref.
619 if (HasDiamondKey()) 620 if (HasDiamondKey())
620 remapped_key = 621 remapped_key =
621 GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service); 622 GetRemappedKey(prefs::kLanguageRemapDiamondKeyTo, *pref_service);
622 // Default behavior is Ctrl key. 623 // Default behavior of F15 is Control, even if --has-chromeos-diamond-key
624 // is absent, according to unit test comments.
623 if (!remapped_key) { 625 if (!remapped_key) {
624 DCHECK_EQ(ui::VKEY_CONTROL, kModifierRemappingCtrl->key_code); 626 DCHECK_EQ(ui::VKEY_CONTROL, kModifierRemappingCtrl->key_code);
625 remapped_key = kModifierRemappingCtrl; 627 remapped_key = kModifierRemappingCtrl;
626 characteristic_flag = ui::EF_CONTROL_DOWN; 628 }
629 // F15 is not a modifier key, so we need to track its state directly.
630 if (key_event.type() == ui::ET_KEY_PRESSED) {
631 int remapped_flag = remapped_key->flag;
632 if (remapped_key->remap_to == input_method::kCapsLockKey)
633 remapped_flag |= ui::EF_CAPS_LOCK_DOWN;
634 active_diamond_modifier_ = remapped_flag;
635 } else {
636 active_diamond_modifier_ = ui::EF_NONE;
627 } 637 }
628 break; 638 break;
629 // On Chrome OS, XF86XK_Launch7 (F16) with Mod3Mask is sent when Caps Lock 639 // On Chrome OS, XF86XK_Launch7 (F16) with Mod3Mask is sent when Caps Lock
630 // is pressed (with one exception: when 640 // is pressed (with one exception: when
631 // IsISOLevel5ShiftUsedByCurrentInputMethod() is true, the key generates 641 // IsISOLevel5ShiftUsedByCurrentInputMethod() is true, the key generates
632 // XK_ISO_Level3_Shift with Mod3Mask, not XF86XK_Launch7). 642 // XK_ISO_Level3_Shift with Mod3Mask, not XF86XK_Launch7).
633 case ui::VKEY_F16: 643 case ui::VKEY_F16:
634 characteristic_flag = ui::EF_CAPS_LOCK_DOWN; 644 characteristic_flag = ui::EF_CAPS_LOCK_DOWN;
635 remapped_key = 645 remapped_key =
636 GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service); 646 GetRemappedKey(prefs::kLanguageRemapCapsLockKeyTo, *pref_service);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name); 947 KeyboardDeviceAddedInternal(device_info[i].deviceid, device_info[i].name);
938 } 948 }
939 949
940 XIFreeDeviceInfo(device_info); 950 XIFreeDeviceInfo(device_info);
941 #else 951 #else
942 KeyboardDeviceAddedInternal(device_id, "keyboard"); 952 KeyboardDeviceAddedInternal(device_id, "keyboard");
943 #endif 953 #endif
944 } 954 }
945 955
946 } // namespace chromeos 956 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698