OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |