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

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

Issue 1284433002: Revise ui::DomKey to unify character and non-character codes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 const struct ModifierRemapping { 74 const struct ModifierRemapping {
75 int flag; 75 int flag;
76 int remap_to; 76 int remap_to;
77 const char* pref_name; 77 const char* pref_name;
78 EventRewriter::MutableKeyState result; 78 EventRewriter::MutableKeyState result;
79 } kModifierRemappings[] = { 79 } kModifierRemappings[] = {
80 {// kModifierRemappingCtrl references this entry by index. 80 {// kModifierRemappingCtrl references this entry by index.
81 ui::EF_CONTROL_DOWN, 81 ui::EF_CONTROL_DOWN,
82 input_method::kControlKey, 82 input_method::kControlKey,
83 prefs::kLanguageRemapControlKeyTo, 83 prefs::kLanguageRemapControlKeyTo,
84 {ui::EF_CONTROL_DOWN, 84 {ui::EF_CONTROL_DOWN, ui::DomCode::CONTROL_LEFT, ui::DomKey::CONTROL,
85 ui::DomCode::CONTROL_LEFT,
86 ui::DomKey::CONTROL,
87 0,
88 ui::VKEY_CONTROL}}, 85 ui::VKEY_CONTROL}},
89 {// kModifierRemappingNeoMod3 references this entry by index. 86 {// kModifierRemappingNeoMod3 references this entry by index.
90 ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, 87 ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN,
91 input_method::kNumModifierKeys, 88 input_method::kNumModifierKeys,
92 nullptr, 89 nullptr,
93 {ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, 90 {ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, ui::DomCode::CAPS_LOCK,
94 ui::DomCode::CAPS_LOCK, 91 ui::DomKey::ALT_GRAPH, ui::VKEY_ALTGR}},
95 ui::DomKey::ALT_GRAPH,
96 0,
97 ui::VKEY_ALTGR}},
98 {ui::EF_COMMAND_DOWN, 92 {ui::EF_COMMAND_DOWN,
99 input_method::kSearchKey, 93 input_method::kSearchKey,
100 prefs::kLanguageRemapSearchKeyTo, 94 prefs::kLanguageRemapSearchKeyTo,
101 {ui::EF_COMMAND_DOWN, 95 {ui::EF_COMMAND_DOWN, ui::DomCode::OS_LEFT, ui::DomKey::OS,
102 ui::DomCode::OS_LEFT,
103 ui::DomKey::OS,
104 0,
105 ui::VKEY_LWIN}}, 96 ui::VKEY_LWIN}},
106 {ui::EF_ALT_DOWN, 97 {ui::EF_ALT_DOWN,
107 input_method::kAltKey, 98 input_method::kAltKey,
108 prefs::kLanguageRemapAltKeyTo, 99 prefs::kLanguageRemapAltKeyTo,
109 {ui::EF_ALT_DOWN, 100 {ui::EF_ALT_DOWN, ui::DomCode::ALT_LEFT, ui::DomKey::ALT, ui::VKEY_MENU}},
110 ui::DomCode::ALT_LEFT,
111 ui::DomKey::ALT,
112 0,
113 ui::VKEY_MENU}},
114 {ui::EF_NONE, 101 {ui::EF_NONE,
115 input_method::kVoidKey, 102 input_method::kVoidKey,
116 nullptr, 103 nullptr,
117 {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}}, 104 {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, ui::VKEY_UNKNOWN}},
118 {ui::EF_MOD3_DOWN, 105 {ui::EF_MOD3_DOWN,
119 input_method::kCapsLockKey, 106 input_method::kCapsLockKey,
120 prefs::kLanguageRemapCapsLockKeyTo, 107 prefs::kLanguageRemapCapsLockKeyTo,
121 {ui::EF_MOD3_DOWN, 108 {ui::EF_MOD3_DOWN, ui::DomCode::CAPS_LOCK, ui::DomKey::CAPS_LOCK,
122 ui::DomCode::CAPS_LOCK,
123 ui::DomKey::CAPS_LOCK,
124 0,
125 ui::VKEY_CAPITAL}}, 109 ui::VKEY_CAPITAL}},
126 {ui::EF_NONE, 110 {ui::EF_NONE,
127 input_method::kEscapeKey, 111 input_method::kEscapeKey,
128 nullptr, 112 nullptr,
129 {ui::EF_NONE, 113 {ui::EF_NONE, ui::DomCode::ESCAPE, ui::DomKey::ESCAPE, ui::VKEY_ESCAPE}},
130 ui::DomCode::ESCAPE,
131 ui::DomKey::ESCAPE,
132 0,
133 ui::VKEY_ESCAPE}},
134 {ui::EF_NONE, 114 {ui::EF_NONE,
135 input_method::kNumModifierKeys, 115 input_method::kNumModifierKeys,
136 prefs::kLanguageRemapDiamondKeyTo, 116 prefs::kLanguageRemapDiamondKeyTo,
137 {ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, 0, ui::VKEY_F15}}}; 117 {ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, ui::VKEY_F15}}};
138 118
139 const ModifierRemapping* kModifierRemappingCtrl = &kModifierRemappings[0]; 119 const ModifierRemapping* kModifierRemappingCtrl = &kModifierRemappings[0];
140 const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1]; 120 const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1];
141 121
142 // Gets a remapped key for |pref_name| key. For example, to find out which 122 // Gets a remapped key for |pref_name| key. For example, to find out which
143 // key Search is currently remapped to, call the function with 123 // key Search is currently remapped to, call the function with
144 // prefs::kLanguageRemapSearchKeyTo. 124 // prefs::kLanguageRemapSearchKeyTo.
145 const ModifierRemapping* GetRemappedKey(const std::string& pref_name, 125 const ModifierRemapping* GetRemappedKey(const std::string& pref_name,
146 const PrefService& pref_service) { 126 const PrefService& pref_service) {
147 if (!pref_service.FindPreference(pref_name.c_str())) 127 if (!pref_service.FindPreference(pref_name.c_str()))
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 return ((test.key_code == ui::VKEY_UNKNOWN) || 223 return ((test.key_code == ui::VKEY_UNKNOWN) ||
244 (test.key_code == suspect.key_code)) && 224 (test.key_code == suspect.key_code)) &&
245 ((suspect.flags & test.flags) == test.flags); 225 ((suspect.flags & test.flags) == test.flags);
246 } 226 }
247 227
248 void ApplyRemapping(const EventRewriter::MutableKeyState& changes, 228 void ApplyRemapping(const EventRewriter::MutableKeyState& changes,
249 EventRewriter::MutableKeyState* state) { 229 EventRewriter::MutableKeyState* state) {
250 state->flags |= changes.flags; 230 state->flags |= changes.flags;
251 if (changes.code != ui::DomCode::NONE) 231 if (changes.code != ui::DomCode::NONE)
252 state->code = changes.code; 232 state->code = changes.code;
253 if (changes.key != ui::DomKey::NONE) { 233 if (changes.key != ui::DomKey::NONE)
254 state->key = changes.key; 234 state->key = changes.key;
255 state->character = changes.character;
256 }
257 if (changes.key_code != ui::VKEY_UNKNOWN) 235 if (changes.key_code != ui::VKEY_UNKNOWN)
258 state->key_code = changes.key_code; 236 state->key_code = changes.key_code;
259 } 237 }
260 238
261 // Given a set of KeyboardRemapping structs, finds a matching struct 239 // Given a set of KeyboardRemapping structs, finds a matching struct
262 // if possible, and updates the remapped event values. Returns true if a 240 // if possible, and updates the remapped event values. Returns true if a
263 // remapping was found and remapped values were updated. 241 // remapping was found and remapped values were updated.
264 bool RewriteWithKeyboardRemappings( 242 bool RewriteWithKeyboardRemappings(
265 const KeyboardRemapping* mappings, 243 const KeyboardRemapping* mappings,
266 size_t num_mappings, 244 size_t num_mappings,
267 const EventRewriter::MutableKeyState& input_state, 245 const EventRewriter::MutableKeyState& input_state,
268 EventRewriter::MutableKeyState* remapped_state) { 246 EventRewriter::MutableKeyState* remapped_state) {
269 for (size_t i = 0; i < num_mappings; ++i) { 247 for (size_t i = 0; i < num_mappings; ++i) {
270 const KeyboardRemapping& map = mappings[i]; 248 const KeyboardRemapping& map = mappings[i];
271 if (MatchKeyboardRemapping(input_state, map.condition)) { 249 if (MatchKeyboardRemapping(input_state, map.condition)) {
272 remapped_state->flags = (input_state.flags & ~map.condition.flags); 250 remapped_state->flags = (input_state.flags & ~map.condition.flags);
273 ApplyRemapping(map.result, remapped_state); 251 ApplyRemapping(map.result, remapped_state);
274 return true; 252 return true;
275 } 253 }
276 } 254 }
277 return false; 255 return false;
278 } 256 }
279 257
280 void SetMeaningForLayout(ui::EventType type, 258 void SetMeaningForLayout(ui::EventType type,
281 EventRewriter::MutableKeyState* state) { 259 EventRewriter::MutableKeyState* state) {
282 // Currently layout is applied by creating a temporary key event with the 260 // Currently layout is applied by creating a temporary key event with the
283 // current physical state, and extracting the layout results. 261 // current physical state, and extracting the layout results.
284 ui::KeyEvent key(type, state->key_code, state->code, state->flags); 262 ui::KeyEvent key(type, state->key_code, state->code, state->flags);
285 state->key = key.GetDomKey(); 263 state->key = key.GetDomKey();
286 state->character = key.GetCharacter();
287 } 264 }
288 265
289 ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) { 266 ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) {
290 bool right = (location == ui::DomKeyLocation::RIGHT); 267 bool right = (location == ui::DomKeyLocation::RIGHT);
291 switch (code) { 268 switch (code) {
292 case ui::DomCode::CONTROL_LEFT: 269 case ui::DomCode::CONTROL_LEFT:
293 case ui::DomCode::CONTROL_RIGHT: 270 case ui::DomCode::CONTROL_RIGHT:
294 return right ? ui::DomCode::CONTROL_RIGHT : ui::DomCode::CONTROL_LEFT; 271 return right ? ui::DomCode::CONTROL_RIGHT : ui::DomCode::CONTROL_LEFT;
295 case ui::DomCode::SHIFT_LEFT: 272 case ui::DomCode::SHIFT_LEFT:
296 case ui::DomCode::SHIFT_RIGHT: 273 case ui::DomCode::SHIFT_RIGHT:
(...skipping 10 matching lines...) Expand all
307 return code; 284 return code;
308 } 285 }
309 286
310 } // namespace 287 } // namespace
311 288
312 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller) 289 EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller)
313 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE), 290 : last_keyboard_device_id_(ui::ED_UNKNOWN_DEVICE),
314 ime_keyboard_for_testing_(NULL), 291 ime_keyboard_for_testing_(NULL),
315 pref_service_for_testing_(NULL), 292 pref_service_for_testing_(NULL),
316 sticky_keys_controller_(sticky_keys_controller), 293 sticky_keys_controller_(sticky_keys_controller),
317 current_diamond_key_modifier_flags_(ui::EF_NONE) { 294 current_diamond_key_modifier_flags_(ui::EF_NONE) {}
318 }
319 295
320 EventRewriter::~EventRewriter() { 296 EventRewriter::~EventRewriter() {}
321 }
322 297
323 EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting( 298 EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting(
324 int device_id, 299 int device_id,
325 const std::string& device_name) { 300 const std::string& device_name) {
326 // Tests must avoid XI2 reserved device IDs. 301 // Tests must avoid XI2 reserved device IDs.
327 DCHECK((device_id < 0) || (device_id > 1)); 302 DCHECK((device_id < 0) || (device_id > 1));
328 return KeyboardDeviceAddedInternal(device_id, device_name, kUnknownVendorId, 303 return KeyboardDeviceAddedInternal(device_id, device_name, kUnknownVendorId,
329 kUnknownProductId); 304 kUnknownProductId);
330 } 305 }
331 306
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 return sticky_keys_controller_->NextDispatchEvent(new_event); 351 return sticky_keys_controller_->NextDispatchEvent(new_event);
377 } 352 }
378 NOTREACHED(); 353 NOTREACHED();
379 return ui::EVENT_REWRITE_CONTINUE; 354 return ui::EVENT_REWRITE_CONTINUE;
380 } 355 }
381 356
382 void EventRewriter::BuildRewrittenKeyEvent( 357 void EventRewriter::BuildRewrittenKeyEvent(
383 const ui::KeyEvent& key_event, 358 const ui::KeyEvent& key_event,
384 const MutableKeyState& state, 359 const MutableKeyState& state,
385 scoped_ptr<ui::Event>* rewritten_event) { 360 scoped_ptr<ui::Event>* rewritten_event) {
386 ui::KeyEvent* rewritten_key_event = new ui::KeyEvent( 361 ui::KeyEvent* rewritten_key_event =
387 key_event.type(), state.key_code, state.code, state.flags, state.key, 362 new ui::KeyEvent(key_event.type(), state.key_code, state.code,
388 state.character, key_event.time_stamp()); 363 state.flags, state.key, key_event.time_stamp());
389 rewritten_event->reset(rewritten_key_event); 364 rewritten_event->reset(rewritten_key_event);
390 } 365 }
391 366
392 void EventRewriter::DeviceKeyPressedOrReleased(int device_id) { 367 void EventRewriter::DeviceKeyPressedOrReleased(int device_id) {
393 std::map<int, DeviceType>::const_iterator iter = 368 std::map<int, DeviceType>::const_iterator iter =
394 device_id_to_type_.find(device_id); 369 device_id_to_type_.find(device_id);
395 DeviceType type; 370 DeviceType type;
396 if (iter != device_id_to_type_.end()) 371 if (iter != device_id_to_type_.end())
397 type = iter->second; 372 type = iter->second;
398 else 373 else
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
506 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE) 481 if (key_event.source_device_id() != ui::ED_UNKNOWN_DEVICE)
507 DeviceKeyPressedOrReleased(key_event.source_device_id()); 482 DeviceKeyPressedOrReleased(key_event.source_device_id());
508 483
509 // Drop repeated keys from Hotrod remote. 484 // Drop repeated keys from Hotrod remote.
510 if ((key_event.flags() & ui::EF_IS_REPEAT) && 485 if ((key_event.flags() & ui::EF_IS_REPEAT) &&
511 (key_event.type() == ui::ET_KEY_PRESSED) && IsHotrodRemote() && 486 (key_event.type() == ui::ET_KEY_PRESSED) && IsHotrodRemote() &&
512 key_event.key_code() != ui::VKEY_BACK) { 487 key_event.key_code() != ui::VKEY_BACK) {
513 return ui::EVENT_REWRITE_DISCARD; 488 return ui::EVENT_REWRITE_DISCARD;
514 } 489 }
515 490
516 MutableKeyState state = {key_event.flags(), 491 MutableKeyState state = {key_event.flags(), key_event.code(),
517 key_event.code(), 492 key_event.GetDomKey(), key_event.key_code()};
518 key_event.GetDomKey(),
519 key_event.GetCharacter(),
520 key_event.key_code()};
521 493
522 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See 494 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
523 // crbug.com/136465. 495 // crbug.com/136465.
524 if (!(key_event.flags() & ui::EF_FINAL)) { 496 if (!(key_event.flags() & ui::EF_FINAL)) {
525 RewriteModifierKeys(key_event, &state); 497 RewriteModifierKeys(key_event, &state);
526 RewriteNumPadKeys(key_event, &state); 498 RewriteNumPadKeys(key_event, &state);
527 } 499 }
528 500
529 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE; 501 ui::EventRewriteStatus status = ui::EVENT_REWRITE_CONTINUE;
530 bool is_sticky_key_extension_command = false; 502 bool is_sticky_key_extension_command = false;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 remapped_key = kModifierRemappingNeoMod3; 745 remapped_key = kModifierRemappingNeoMod3;
774 break; 746 break;
775 default: 747 default:
776 break; 748 break;
777 } 749 }
778 750
779 if (remapped_key) { 751 if (remapped_key) {
780 state->key_code = remapped_key->result.key_code; 752 state->key_code = remapped_key->result.key_code;
781 state->code = remapped_key->result.code; 753 state->code = remapped_key->result.code;
782 state->key = remapped_key->result.key; 754 state->key = remapped_key->result.key;
783 state->character = remapped_key->result.character;
784 incoming.flags |= characteristic_flag; 755 incoming.flags |= characteristic_flag;
785 characteristic_flag = remapped_key->flag; 756 characteristic_flag = remapped_key->flag;
786 state->code = RelocateModifier( 757 state->code = RelocateModifier(
787 state->code, ui::KeycodeConverter::DomCodeToLocation(incoming.code)); 758 state->code, ui::KeycodeConverter::DomCodeToLocation(incoming.code));
788 } 759 }
789 760
790 // Next, remap modifier bits. 761 // Next, remap modifier bits.
791 state->flags |= 762 state->flags |=
792 GetRemappedModifierMasks(*pref_service, key_event, incoming.flags); 763 GetRemappedModifierMasks(*pref_service, key_event, incoming.flags);
793 if (key_event.type() == ui::ET_KEY_PRESSED) 764 if (key_event.type() == ui::ET_KEY_PRESSED)
(...skipping 19 matching lines...) Expand all
813 } 784 }
814 } 785 }
815 786
816 void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event, 787 void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event,
817 MutableKeyState* state) { 788 MutableKeyState* state) {
818 DCHECK(key_event.type() == ui::ET_KEY_PRESSED || 789 DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
819 key_event.type() == ui::ET_KEY_RELEASED); 790 key_event.type() == ui::ET_KEY_RELEASED);
820 static const struct NumPadRemapping { 791 static const struct NumPadRemapping {
821 ui::KeyboardCode input_key_code; 792 ui::KeyboardCode input_key_code;
822 EventRewriter::MutableKeyState result; 793 EventRewriter::MutableKeyState result;
823 } kNumPadRemappings[] = {{ui::VKEY_DELETE, 794 } kNumPadRemappings[] = {
824 {ui::EF_NONE, 795 {ui::VKEY_DELETE,
825 ui::DomCode::NONE, 796 {ui::EF_NONE, ui::DomCode::NONE, '.', ui::VKEY_DECIMAL}},
826 ui::DomKey::CHARACTER, 797 {ui::VKEY_INSERT,
827 '.', 798 {ui::EF_NONE, ui::DomCode::NONE, '0', ui::VKEY_NUMPAD0}},
828 ui::VKEY_DECIMAL}}, 799 {ui::VKEY_END, {ui::EF_NONE, ui::DomCode::NONE, '1', ui::VKEY_NUMPAD1}},
829 {ui::VKEY_INSERT, 800 {ui::VKEY_DOWN, {ui::EF_NONE, ui::DomCode::NONE, '2', ui::VKEY_NUMPAD2}},
830 {ui::EF_NONE, 801 {ui::VKEY_NEXT, {ui::EF_NONE, ui::DomCode::NONE, '3', ui::VKEY_NUMPAD3}},
831 ui::DomCode::NONE, 802 {ui::VKEY_LEFT, {ui::EF_NONE, ui::DomCode::NONE, '4', ui::VKEY_NUMPAD4}},
832 ui::DomKey::CHARACTER, 803 {ui::VKEY_CLEAR, {ui::EF_NONE, ui::DomCode::NONE, '5', ui::VKEY_NUMPAD5}},
833 '0', 804 {ui::VKEY_RIGHT, {ui::EF_NONE, ui::DomCode::NONE, '6', ui::VKEY_NUMPAD6}},
834 ui::VKEY_NUMPAD0}}, 805 {ui::VKEY_HOME, {ui::EF_NONE, ui::DomCode::NONE, '7', ui::VKEY_NUMPAD7}},
835 {ui::VKEY_END, 806 {ui::VKEY_UP, {ui::EF_NONE, ui::DomCode::NONE, '8', ui::VKEY_NUMPAD8}},
836 {ui::EF_NONE, 807 {ui::VKEY_PRIOR,
837 ui::DomCode::NONE, 808 {ui::EF_NONE, ui::DomCode::NONE, '9', ui::VKEY_NUMPAD9}}};
838 ui::DomKey::CHARACTER,
839 '1',
840 ui::VKEY_NUMPAD1}},
841 {ui::VKEY_DOWN,
842 {ui::EF_NONE,
843 ui::DomCode::NONE,
844 ui::DomKey::CHARACTER,
845 '2',
846 ui::VKEY_NUMPAD2}},
847 {ui::VKEY_NEXT,
848 {ui::EF_NONE,
849 ui::DomCode::NONE,
850 ui::DomKey::CHARACTER,
851 '3',
852 ui::VKEY_NUMPAD3}},
853 {ui::VKEY_LEFT,
854 {ui::EF_NONE,
855 ui::DomCode::NONE,
856 ui::DomKey::CHARACTER,
857 '4',
858 ui::VKEY_NUMPAD4}},
859 {ui::VKEY_CLEAR,
860 {ui::EF_NONE,
861 ui::DomCode::NONE,
862 ui::DomKey::CHARACTER,
863 '5',
864 ui::VKEY_NUMPAD5}},
865 {ui::VKEY_RIGHT,
866 {ui::EF_NONE,
867 ui::DomCode::NONE,
868 ui::DomKey::CHARACTER,
869 '6',
870 ui::VKEY_NUMPAD6}},
871 {ui::VKEY_HOME,
872 {ui::EF_NONE,
873 ui::DomCode::NONE,
874 ui::DomKey::CHARACTER,
875 '7',
876 ui::VKEY_NUMPAD7}},
877 {ui::VKEY_UP,
878 {ui::EF_NONE,
879 ui::DomCode::NONE,
880 ui::DomKey::CHARACTER,
881 '8',
882 ui::VKEY_NUMPAD8}},
883 {ui::VKEY_PRIOR,
884 {ui::EF_NONE,
885 ui::DomCode::NONE,
886 ui::DomKey::CHARACTER,
887 '9',
888 ui::VKEY_NUMPAD9}}};
889 for (const auto& map : kNumPadRemappings) { 809 for (const auto& map : kNumPadRemappings) {
890 if (state->key_code == map.input_key_code) { 810 if (state->key_code == map.input_key_code) {
891 if (ui::KeycodeConverter::DomCodeToLocation(state->code) == 811 if (ui::KeycodeConverter::DomCodeToLocation(state->code) ==
892 ui::DomKeyLocation::NUMPAD) { 812 ui::DomKeyLocation::NUMPAD) {
893 ApplyRemapping(map.result, state); 813 ApplyRemapping(map.result, state);
894 } 814 }
895 return; 815 return;
896 } 816 }
897 } 817 }
898 } 818 }
899 819
900 void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event, 820 void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
901 MutableKeyState* state) { 821 MutableKeyState* state) {
902 DCHECK(key_event.type() == ui::ET_KEY_PRESSED || 822 DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
903 key_event.type() == ui::ET_KEY_RELEASED); 823 key_event.type() == ui::ET_KEY_RELEASED);
904 MutableKeyState incoming = *state; 824 MutableKeyState incoming = *state;
905 825
906 if ((incoming.flags & (ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN)) == 826 if ((incoming.flags & (ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN)) ==
907 (ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN)) { 827 (ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN)) {
908 // Allow Search to avoid rewriting extended keys. 828 // Allow Search to avoid rewriting extended keys.
909 // For these, we only remove the EF_COMMAND_DOWN flag. 829 // For these, we only remove the EF_COMMAND_DOWN flag.
910 static const KeyboardRemapping::Condition kAvoidRemappings[] = { 830 static const KeyboardRemapping::Condition kAvoidRemappings[] = {
911 {// Alt+Backspace 831 {// Alt+Backspace
912 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, 832 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_BACK},
913 ui::VKEY_BACK},
914 {// Control+Alt+Up 833 {// Control+Alt+Up
915 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN, 834 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN,
916 ui::VKEY_UP}, 835 ui::VKEY_UP},
917 {// Alt+Up 836 {// Alt+Up
918 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, 837 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_UP},
919 ui::VKEY_UP},
920 {// Control+Alt+Down 838 {// Control+Alt+Down
921 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN, 839 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN,
922 ui::VKEY_DOWN}, 840 ui::VKEY_DOWN},
923 {// Alt+Down 841 {// Alt+Down
924 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, 842 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_DOWN}};
925 ui::VKEY_DOWN}};
926 for (const auto& condition : kAvoidRemappings) { 843 for (const auto& condition : kAvoidRemappings) {
927 if (MatchKeyboardRemapping(*state, condition)) { 844 if (MatchKeyboardRemapping(*state, condition)) {
928 state->flags = incoming.flags & ~ui::EF_COMMAND_DOWN; 845 state->flags = incoming.flags & ~ui::EF_COMMAND_DOWN;
929 return; 846 return;
930 } 847 }
931 } 848 }
932 } 849 }
933 850
934 if (incoming.flags & ui::EF_COMMAND_DOWN) { 851 if (incoming.flags & ui::EF_COMMAND_DOWN) {
935 static const KeyboardRemapping kSearchRemappings[] = { 852 static const KeyboardRemapping kSearchRemappings[] = {
936 {// Search+BackSpace -> Delete 853 {// Search+BackSpace -> Delete
937 {ui::EF_COMMAND_DOWN, ui::VKEY_BACK}, 854 {ui::EF_COMMAND_DOWN, ui::VKEY_BACK},
938 {ui::EF_NONE, 855 {ui::EF_NONE, ui::DomCode::DEL, ui::DomKey::DEL, ui::VKEY_DELETE}},
939 ui::DomCode::DEL,
940 ui::DomKey::DEL,
941 0x7F,
942 ui::VKEY_DELETE}},
943 {// Search+Left -> Home 856 {// Search+Left -> Home
944 {ui::EF_COMMAND_DOWN, ui::VKEY_LEFT}, 857 {ui::EF_COMMAND_DOWN, ui::VKEY_LEFT},
945 {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, 0, ui::VKEY_HOME}}, 858 {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, ui::VKEY_HOME}},
946 {// Search+Up -> Prior (aka PageUp) 859 {// Search+Up -> Prior (aka PageUp)
947 {ui::EF_COMMAND_DOWN, ui::VKEY_UP}, 860 {ui::EF_COMMAND_DOWN, ui::VKEY_UP},
948 {ui::EF_NONE, 861 {ui::EF_NONE, ui::DomCode::PAGE_UP, ui::DomKey::PAGE_UP,
949 ui::DomCode::PAGE_UP,
950 ui::DomKey::PAGE_UP,
951 0,
952 ui::VKEY_PRIOR}}, 862 ui::VKEY_PRIOR}},
953 {// Search+Right -> End 863 {// Search+Right -> End
954 {ui::EF_COMMAND_DOWN, ui::VKEY_RIGHT}, 864 {ui::EF_COMMAND_DOWN, ui::VKEY_RIGHT},
955 {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, 0, ui::VKEY_END}}, 865 {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, ui::VKEY_END}},
956 {// Search+Down -> Next (aka PageDown) 866 {// Search+Down -> Next (aka PageDown)
957 {ui::EF_COMMAND_DOWN, ui::VKEY_DOWN}, 867 {ui::EF_COMMAND_DOWN, ui::VKEY_DOWN},
958 {ui::EF_NONE, 868 {ui::EF_NONE, ui::DomCode::PAGE_DOWN, ui::DomKey::PAGE_DOWN,
959 ui::DomCode::PAGE_DOWN,
960 ui::DomKey::PAGE_DOWN,
961 0,
962 ui::VKEY_NEXT}}, 869 ui::VKEY_NEXT}},
963 {// Search+Period -> Insert 870 {// Search+Period -> Insert
964 {ui::EF_COMMAND_DOWN, ui::VKEY_OEM_PERIOD}, 871 {ui::EF_COMMAND_DOWN, ui::VKEY_OEM_PERIOD},
965 {ui::EF_NONE, 872 {ui::EF_NONE, ui::DomCode::INSERT, ui::DomKey::INSERT,
966 ui::DomCode::INSERT,
967 ui::DomKey::INSERT,
968 0,
969 ui::VKEY_INSERT}}}; 873 ui::VKEY_INSERT}}};
970 if (RewriteWithKeyboardRemappings( 874 if (RewriteWithKeyboardRemappings(
971 kSearchRemappings, arraysize(kSearchRemappings), incoming, state)) { 875 kSearchRemappings, arraysize(kSearchRemappings), incoming, state)) {
972 return; 876 return;
973 } 877 }
974 } 878 }
975 879
976 if (incoming.flags & ui::EF_ALT_DOWN) { 880 if (incoming.flags & ui::EF_ALT_DOWN) {
977 static const KeyboardRemapping kNonSearchRemappings[] = { 881 static const KeyboardRemapping kNonSearchRemappings[] = {
978 {// Alt+BackSpace -> Delete 882 {// Alt+BackSpace -> Delete
979 {ui::EF_ALT_DOWN, ui::VKEY_BACK}, 883 {ui::EF_ALT_DOWN, ui::VKEY_BACK},
980 {ui::EF_NONE, 884 {ui::EF_NONE, ui::DomCode::DEL, ui::DomKey::DEL, ui::VKEY_DELETE}},
981 ui::DomCode::DEL,
982 ui::DomKey::DEL,
983 0x7F,
984 ui::VKEY_DELETE}},
985 {// Control+Alt+Up -> Home 885 {// Control+Alt+Up -> Home
986 {ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_UP}, 886 {ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_UP},
987 {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, 0, ui::VKEY_HOME}}, 887 {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, ui::VKEY_HOME}},
988 {// Alt+Up -> Prior (aka PageUp) 888 {// Alt+Up -> Prior (aka PageUp)
989 {ui::EF_ALT_DOWN, ui::VKEY_UP}, 889 {ui::EF_ALT_DOWN, ui::VKEY_UP},
990 {ui::EF_NONE, 890 {ui::EF_NONE, ui::DomCode::PAGE_UP, ui::DomKey::PAGE_UP,
991 ui::DomCode::PAGE_UP,
992 ui::DomKey::PAGE_UP,
993 0,
994 ui::VKEY_PRIOR}}, 891 ui::VKEY_PRIOR}},
995 {// Control+Alt+Down -> End 892 {// Control+Alt+Down -> End
996 {ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DOWN}, 893 {ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DOWN},
997 {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, 0, ui::VKEY_END}}, 894 {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, ui::VKEY_END}},
998 {// Alt+Down -> Next (aka PageDown) 895 {// Alt+Down -> Next (aka PageDown)
999 {ui::EF_ALT_DOWN, ui::VKEY_DOWN}, 896 {ui::EF_ALT_DOWN, ui::VKEY_DOWN},
1000 {ui::EF_NONE, 897 {ui::EF_NONE, ui::DomCode::PAGE_DOWN, ui::DomKey::PAGE_DOWN,
1001 ui::DomCode::PAGE_DOWN,
1002 ui::DomKey::PAGE_DOWN,
1003 0,
1004 ui::VKEY_NEXT}}}; 898 ui::VKEY_NEXT}}};
1005 if (RewriteWithKeyboardRemappings(kNonSearchRemappings, 899 if (RewriteWithKeyboardRemappings(kNonSearchRemappings,
1006 arraysize(kNonSearchRemappings), incoming, 900 arraysize(kNonSearchRemappings), incoming,
1007 state)) { 901 state)) {
1008 return; 902 return;
1009 } 903 }
1010 } 904 }
1011 } 905 }
1012 906
1013 void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event, 907 void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
(...skipping 11 matching lines...) Expand all
1025 // Search? Top Row Result 919 // Search? Top Row Result
1026 // ------- -------- ------ 920 // ------- -------- ------
1027 // No Fn Unchanged 921 // No Fn Unchanged
1028 // No System Fn -> System 922 // No System Fn -> System
1029 // Yes Fn Fn -> System 923 // Yes Fn Fn -> System
1030 // Yes System Search+Fn -> Fn 924 // Yes System Search+Fn -> Fn
1031 if (top_row_keys_are_function_keys == search_is_pressed) { 925 if (top_row_keys_are_function_keys == search_is_pressed) {
1032 // Rewrite the F1-F12 keys on a Chromebook keyboard to system keys. 926 // Rewrite the F1-F12 keys on a Chromebook keyboard to system keys.
1033 static const KeyboardRemapping kFkeysToSystemKeys[] = { 927 static const KeyboardRemapping kFkeysToSystemKeys[] = {
1034 {{ui::EF_NONE, ui::VKEY_F1}, 928 {{ui::EF_NONE, ui::VKEY_F1},
1035 {ui::EF_NONE, 929 {ui::EF_NONE, ui::DomCode::BROWSER_BACK, ui::DomKey::BROWSER_BACK,
1036 ui::DomCode::BROWSER_BACK,
1037 ui::DomKey::BROWSER_BACK,
1038 0,
1039 ui::VKEY_BROWSER_BACK}}, 930 ui::VKEY_BROWSER_BACK}},
1040 {{ui::EF_NONE, ui::VKEY_F2}, 931 {{ui::EF_NONE, ui::VKEY_F2},
1041 {ui::EF_NONE, 932 {ui::EF_NONE, ui::DomCode::BROWSER_FORWARD,
1042 ui::DomCode::BROWSER_FORWARD, 933 ui::DomKey::BROWSER_FORWARD, ui::VKEY_BROWSER_FORWARD}},
1043 ui::DomKey::BROWSER_FORWARD,
1044 0,
1045 ui::VKEY_BROWSER_FORWARD}},
1046 {{ui::EF_NONE, ui::VKEY_F3}, 934 {{ui::EF_NONE, ui::VKEY_F3},
1047 {ui::EF_NONE, 935 {ui::EF_NONE, ui::DomCode::BROWSER_REFRESH,
1048 ui::DomCode::BROWSER_REFRESH, 936 ui::DomKey::BROWSER_REFRESH, ui::VKEY_BROWSER_REFRESH}},
1049 ui::DomKey::BROWSER_REFRESH,
1050 0,
1051 ui::VKEY_BROWSER_REFRESH}},
1052 {{ui::EF_NONE, ui::VKEY_F4}, 937 {{ui::EF_NONE, ui::VKEY_F4},
1053 {ui::EF_NONE, 938 {ui::EF_NONE, ui::DomCode::ZOOM_TOGGLE, ui::DomKey::ZOOM_TOGGLE,
1054 ui::DomCode::ZOOM_TOGGLE,
1055 ui::DomKey::ZOOM_TOGGLE,
1056 0,
1057 ui::VKEY_MEDIA_LAUNCH_APP2}}, 939 ui::VKEY_MEDIA_LAUNCH_APP2}},
1058 {{ui::EF_NONE, ui::VKEY_F5}, 940 {{ui::EF_NONE, ui::VKEY_F5},
1059 {ui::EF_NONE, 941 {ui::EF_NONE, ui::DomCode::SELECT_TASK,
1060 ui::DomCode::SELECT_TASK, 942 ui::DomKey::LAUNCH_MY_COMPUTER, ui::VKEY_MEDIA_LAUNCH_APP1}},
1061 ui::DomKey::LAUNCH_MY_COMPUTER,
1062 0,
1063 ui::VKEY_MEDIA_LAUNCH_APP1}},
1064 {{ui::EF_NONE, ui::VKEY_F6}, 943 {{ui::EF_NONE, ui::VKEY_F6},
1065 {ui::EF_NONE, 944 {ui::EF_NONE, ui::DomCode::BRIGHTNESS_DOWN,
1066 ui::DomCode::BRIGHTNESS_DOWN, 945 ui::DomKey::BRIGHTNESS_DOWN, ui::VKEY_BRIGHTNESS_DOWN}},
1067 ui::DomKey::BRIGHTNESS_DOWN,
1068 0,
1069 ui::VKEY_BRIGHTNESS_DOWN}},
1070 {{ui::EF_NONE, ui::VKEY_F7}, 946 {{ui::EF_NONE, ui::VKEY_F7},
1071 {ui::EF_NONE, 947 {ui::EF_NONE, ui::DomCode::BRIGHTNESS_UP, ui::DomKey::BRIGHTNESS_UP,
1072 ui::DomCode::BRIGHTNESS_UP,
1073 ui::DomKey::BRIGHTNESS_UP,
1074 0,
1075 ui::VKEY_BRIGHTNESS_UP}}, 948 ui::VKEY_BRIGHTNESS_UP}},
1076 {{ui::EF_NONE, ui::VKEY_F8}, 949 {{ui::EF_NONE, ui::VKEY_F8},
1077 {ui::EF_NONE, 950 {ui::EF_NONE, ui::DomCode::VOLUME_MUTE, ui::DomKey::VOLUME_MUTE,
1078 ui::DomCode::VOLUME_MUTE,
1079 ui::DomKey::VOLUME_MUTE,
1080 0,
1081 ui::VKEY_VOLUME_MUTE}}, 951 ui::VKEY_VOLUME_MUTE}},
1082 {{ui::EF_NONE, ui::VKEY_F9}, 952 {{ui::EF_NONE, ui::VKEY_F9},
1083 {ui::EF_NONE, 953 {ui::EF_NONE, ui::DomCode::VOLUME_DOWN, ui::DomKey::VOLUME_DOWN,
1084 ui::DomCode::VOLUME_DOWN,
1085 ui::DomKey::VOLUME_DOWN,
1086 0,
1087 ui::VKEY_VOLUME_DOWN}}, 954 ui::VKEY_VOLUME_DOWN}},
1088 {{ui::EF_NONE, ui::VKEY_F10}, 955 {{ui::EF_NONE, ui::VKEY_F10},
1089 {ui::EF_NONE, 956 {ui::EF_NONE, ui::DomCode::VOLUME_UP, ui::DomKey::VOLUME_UP,
1090 ui::DomCode::VOLUME_UP,
1091 ui::DomKey::VOLUME_UP,
1092 0,
1093 ui::VKEY_VOLUME_UP}}, 957 ui::VKEY_VOLUME_UP}},
1094 }; 958 };
1095 MutableKeyState incoming_without_command = *state; 959 MutableKeyState incoming_without_command = *state;
1096 incoming_without_command.flags &= ~ui::EF_COMMAND_DOWN; 960 incoming_without_command.flags &= ~ui::EF_COMMAND_DOWN;
1097 if (RewriteWithKeyboardRemappings(kFkeysToSystemKeys, 961 if (RewriteWithKeyboardRemappings(kFkeysToSystemKeys,
1098 arraysize(kFkeysToSystemKeys), 962 arraysize(kFkeysToSystemKeys),
1099 incoming_without_command, state)) { 963 incoming_without_command, state)) {
1100 return; 964 return;
1101 } 965 }
1102 } else if (search_is_pressed) { 966 } else if (search_is_pressed) {
1103 // Allow Search to avoid rewriting F1-F12. 967 // Allow Search to avoid rewriting F1-F12.
1104 state->flags &= ~ui::EF_COMMAND_DOWN; 968 state->flags &= ~ui::EF_COMMAND_DOWN;
1105 return; 969 return;
1106 } 970 }
1107 } 971 }
1108 972
1109 if (state->flags & ui::EF_COMMAND_DOWN) { 973 if (state->flags & ui::EF_COMMAND_DOWN) {
1110 // Remap Search+<number> to F<number>. 974 // Remap Search+<number> to F<number>.
1111 // We check the DOM3 |code| here instead of the VKEY, as these keys may 975 // We check the DOM3 |code| here instead of the VKEY, as these keys may
1112 // have different |KeyboardCode|s when modifiers are pressed, such as shift. 976 // have different |KeyboardCode|s when modifiers are pressed, such as shift.
1113 static const struct { 977 static const struct {
1114 ui::DomCode input_dom_code; 978 ui::DomCode input_dom_code;
1115 EventRewriter::MutableKeyState result; 979 EventRewriter::MutableKeyState result;
1116 } kNumberKeysToFkeys[] = { 980 } kNumberKeysToFkeys[] = {
1117 {ui::DomCode::DIGIT1, 981 {ui::DomCode::DIGIT1,
1118 {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, 0, ui::VKEY_F1}}, 982 {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}},
1119 {ui::DomCode::DIGIT2, 983 {ui::DomCode::DIGIT2,
1120 {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, 0, ui::VKEY_F2}}, 984 {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, ui::VKEY_F2}},
1121 {ui::DomCode::DIGIT3, 985 {ui::DomCode::DIGIT3,
1122 {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, 0, ui::VKEY_F3}}, 986 {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, ui::VKEY_F3}},
1123 {ui::DomCode::DIGIT4, 987 {ui::DomCode::DIGIT4,
1124 {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, 0, ui::VKEY_F4}}, 988 {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, ui::VKEY_F4}},
1125 {ui::DomCode::DIGIT5, 989 {ui::DomCode::DIGIT5,
1126 {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, 0, ui::VKEY_F5}}, 990 {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, ui::VKEY_F5}},
1127 {ui::DomCode::DIGIT6, 991 {ui::DomCode::DIGIT6,
1128 {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, 0, ui::VKEY_F6}}, 992 {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, ui::VKEY_F6}},
1129 {ui::DomCode::DIGIT7, 993 {ui::DomCode::DIGIT7,
1130 {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, 0, ui::VKEY_F7}}, 994 {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, ui::VKEY_F7}},
1131 {ui::DomCode::DIGIT8, 995 {ui::DomCode::DIGIT8,
1132 {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, 0, ui::VKEY_F8}}, 996 {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, ui::VKEY_F8}},
1133 {ui::DomCode::DIGIT9, 997 {ui::DomCode::DIGIT9,
1134 {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, 0, ui::VKEY_F9}}, 998 {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, ui::VKEY_F9}},
1135 {ui::DomCode::DIGIT0, 999 {ui::DomCode::DIGIT0,
1136 {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, 0, ui::VKEY_F10}}, 1000 {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, ui::VKEY_F10}},
1137 {ui::DomCode::MINUS, 1001 {ui::DomCode::MINUS,
1138 {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, 0, ui::VKEY_F11}}, 1002 {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, ui::VKEY_F11}},
1139 {ui::DomCode::EQUAL, 1003 {ui::DomCode::EQUAL,
1140 {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, 0, ui::VKEY_F12}}}; 1004 {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, ui::VKEY_F12}}};
1141 for (const auto& map : kNumberKeysToFkeys) { 1005 for (const auto& map : kNumberKeysToFkeys) {
1142 if (state->code == map.input_dom_code) { 1006 if (state->code == map.input_dom_code) {
1143 state->flags &= ~ui::EF_COMMAND_DOWN; 1007 state->flags &= ~ui::EF_COMMAND_DOWN;
1144 ApplyRemapping(map.result, state); 1008 ApplyRemapping(map.result, state);
1145 return; 1009 return;
1146 } 1010 }
1147 } 1011 }
1148 } 1012 }
1149 } 1013 }
1150 1014
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1206 for (const auto& keyboard : keyboards) { 1070 for (const auto& keyboard : keyboards) {
1207 if (keyboard.id == device_id) { 1071 if (keyboard.id == device_id) {
1208 return KeyboardDeviceAddedInternal( 1072 return KeyboardDeviceAddedInternal(
1209 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); 1073 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id);
1210 } 1074 }
1211 } 1075 }
1212 return kDeviceUnknown; 1076 return kDeviceUnknown;
1213 } 1077 }
1214 1078
1215 } // namespace chromeos 1079 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698