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

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

Issue 1135083004: Revert of Remove EF_FUNCTION_KEY and EF_NUMPAD_KEY. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « no previous file | chrome/browser/chromeos/events/event_rewriter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
11 #include "ash/wm/window_util.h" 11 #include "ash/wm/window_util.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/prefs/pref_service.h" 15 #include "base/prefs/pref_service.h"
16 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
17 #include "base/sys_info.h" 17 #include "base/sys_info.h"
18 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" 18 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
19 #include "chrome/browser/extensions/extension_commands_global_registry.h" 19 #include "chrome/browser/extensions/extension_commands_global_registry.h"
20 #include "chrome/browser/profiles/profile_manager.h" 20 #include "chrome/browser/profiles/profile_manager.h"
21 #include "chrome/common/pref_names.h" 21 #include "chrome/common/pref_names.h"
22 #include "chromeos/chromeos_switches.h" 22 #include "chromeos/chromeos_switches.h"
23 #include "components/user_manager/user_manager.h" 23 #include "components/user_manager/user_manager.h"
24 #include "ui/base/ime/chromeos/ime_keyboard.h" 24 #include "ui/base/ime/chromeos/ime_keyboard.h"
25 #include "ui/base/ime/chromeos/input_method_manager.h" 25 #include "ui/base/ime/chromeos/input_method_manager.h"
26 #include "ui/events/devices/device_data_manager.h" 26 #include "ui/events/devices/device_data_manager.h"
27 #include "ui/events/event.h" 27 #include "ui/events/event.h"
28 #include "ui/events/event_utils.h" 28 #include "ui/events/event_utils.h"
29 #include "ui/events/keycodes/dom3/dom_code.h"
30 #include "ui/events/keycodes/dom4/keycode_converter.h"
31 #include "ui/events/keycodes/keyboard_code_conversion.h" 29 #include "ui/events/keycodes/keyboard_code_conversion.h"
32 #include "ui/wm/core/window_util.h" 30 #include "ui/wm/core/window_util.h"
33 31
34 #if defined(USE_X11) 32 #if defined(USE_X11)
35 #include <X11/extensions/XInput2.h> 33 #include <X11/extensions/XInput2.h>
36 #include <X11/Xlib.h> 34 #include <X11/Xlib.h>
37 35
38 // Get rid of macros from Xlib.h that conflicts with other parts of the code. 36 // Get rid of macros from Xlib.h that conflicts with other parts of the code.
39 #undef RootWindow 37 #undef RootWindow
40 #undef Status 38 #undef Status
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 numpad_xevent.xkey = xkeyevent.xkey; 280 numpad_xevent.xkey = xkeyevent.xkey;
283 // Remove the shift state before getting key char. 281 // Remove the shift state before getting key char.
284 // Because X11/XKB sometimes returns unexpected key char for 282 // Because X11/XKB sometimes returns unexpected key char for
285 // Shift+NumpadKey. e.g. Shift+Numpad_4 returns 'D', etc. 283 // Shift+NumpadKey. e.g. Shift+Numpad_4 returns 'D', etc.
286 numpad_xevent.xkey.state &= ~ShiftMask; 284 numpad_xevent.xkey.state &= ~ShiftMask;
287 numpad_xevent.xkey.state |= Mod2Mask; // Always set NumLock mask. 285 numpad_xevent.xkey.state |= Mod2Mask; // Always set NumLock mask.
288 if (!(flags & ui::EF_SHIFT_DOWN)) 286 if (!(flags & ui::EF_SHIFT_DOWN))
289 numpad_xevent.xkey.keycode = original_x11_keycode; 287 numpad_xevent.xkey.keycode = original_x11_keycode;
290 rewritten_key_event->set_character( 288 rewritten_key_event->set_character(
291 ui::GetCharacterFromXEvent(&numpad_xevent)); 289 ui::GetCharacterFromXEvent(&numpad_xevent));
292 rewritten_key_event->native_event()->xkey.state |= Mod2Mask;
293 } 290 }
294 } 291 }
295 #endif 292 #endif
296 if (!rewritten_key_event) 293 if (!rewritten_key_event)
297 rewritten_key_event = new ui::KeyEvent(key_event); 294 rewritten_key_event = new ui::KeyEvent(key_event);
298 rewritten_key_event->set_flags(flags); 295 rewritten_key_event->set_flags(flags);
299 rewritten_key_event->set_key_code(key_code); 296 rewritten_key_event->set_key_code(key_code);
300 #if defined(USE_X11) 297 #if defined(USE_X11)
301 ui::UpdateX11EventForFlags(rewritten_key_event); 298 ui::UpdateX11EventForFlags(rewritten_key_event);
302 rewritten_key_event->NormalizeFlags(); 299 rewritten_key_event->NormalizeFlags();
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 : chromeos::input_method::InputMethodManager::Get() 700 : chromeos::input_method::InputMethodManager::Get()
704 ->GetImeKeyboard(); 701 ->GetImeKeyboard();
705 ime_keyboard->SetCapsLockEnabled(!ime_keyboard->CapsLockIsEnabled()); 702 ime_keyboard->SetCapsLockEnabled(!ime_keyboard->CapsLockIsEnabled());
706 } 703 }
707 } 704 }
708 705
709 void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event, 706 void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event,
710 MutableKeyState* state) { 707 MutableKeyState* state) {
711 DCHECK(key_event.type() == ui::ET_KEY_PRESSED || 708 DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
712 key_event.type() == ui::ET_KEY_RELEASED); 709 key_event.type() == ui::ET_KEY_RELEASED);
710 if (!(state->flags & ui::EF_NUMPAD_KEY))
711 return;
713 MutableKeyState incoming = *state; 712 MutableKeyState incoming = *state;
714 static const struct NumPadRemapping { 713
715 ui::DomCode input_dom_code; 714 static const KeyboardRemapping kNumPadRemappings[] = {
716 ui::KeyboardCode input_key_code; 715 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY},
717 ui::KeyboardCode output_key_code; 716 {ui::VKEY_DELETE, ui::EF_NUMPAD_KEY, ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY},
718 } kNumPadRemappings[] = { 717 {ui::VKEY_END, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY},
719 {ui::DomCode::NUMPAD_DECIMAL, ui::VKEY_DELETE, ui::VKEY_DECIMAL}, 718 {ui::VKEY_DOWN, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY},
720 {ui::DomCode::NUMPAD0, ui::VKEY_INSERT, ui::VKEY_NUMPAD0}, 719 {ui::VKEY_NEXT, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY},
721 {ui::DomCode::NUMPAD1, ui::VKEY_END, ui::VKEY_NUMPAD1}, 720 {ui::VKEY_LEFT, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY},
722 {ui::DomCode::NUMPAD2, ui::VKEY_DOWN, ui::VKEY_NUMPAD2}, 721 {ui::VKEY_CLEAR, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY},
723 {ui::DomCode::NUMPAD3, ui::VKEY_NEXT, ui::VKEY_NUMPAD3}, 722 {ui::VKEY_RIGHT, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY},
724 {ui::DomCode::NUMPAD4, ui::VKEY_LEFT, ui::VKEY_NUMPAD4}, 723 {ui::VKEY_HOME, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY},
725 {ui::DomCode::NUMPAD5, ui::VKEY_CLEAR, ui::VKEY_NUMPAD5}, 724 {ui::VKEY_UP, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY},
726 {ui::DomCode::NUMPAD6, ui::VKEY_RIGHT, ui::VKEY_NUMPAD6}, 725 {ui::VKEY_PRIOR, ui::EF_NUMPAD_KEY, ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY},
727 {ui::DomCode::NUMPAD7, ui::VKEY_HOME, ui::VKEY_NUMPAD7},
728 {ui::DomCode::NUMPAD8, ui::VKEY_UP, ui::VKEY_NUMPAD8},
729 {ui::DomCode::NUMPAD9, ui::VKEY_PRIOR, ui::VKEY_NUMPAD9},
730 }; 726 };
731 for (const auto& map : kNumPadRemappings) { 727
732 if ((incoming.key_code == map.input_key_code) && 728 RewriteWithKeyboardRemappingsByKeyCode(
733 (key_event.code() == map.input_dom_code)) { 729 kNumPadRemappings, arraysize(kNumPadRemappings), incoming, state);
734 state->key_code = map.output_key_code;
735 break;
736 }
737 }
738 } 730 }
739 731
740 void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event, 732 void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
741 MutableKeyState* state) { 733 MutableKeyState* state) {
742 DCHECK(key_event.type() == ui::ET_KEY_PRESSED || 734 DCHECK(key_event.type() == ui::ET_KEY_PRESSED ||
743 key_event.type() == ui::ET_KEY_RELEASED); 735 key_event.type() == ui::ET_KEY_RELEASED);
744 736
745 MutableKeyState incoming = *state; 737 MutableKeyState incoming = *state;
746 bool rewritten = false; 738 bool rewritten = false;
747 739
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 for (const auto& keyboard : keyboards) { 940 for (const auto& keyboard : keyboards) {
949 if (keyboard.id == device_id) { 941 if (keyboard.id == device_id) {
950 return KeyboardDeviceAddedInternal( 942 return KeyboardDeviceAddedInternal(
951 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id); 943 keyboard.id, keyboard.name, keyboard.vendor_id, keyboard.product_id);
952 } 944 }
953 } 945 }
954 return kDeviceUnknown; 946 return kDeviceUnknown;
955 } 947 }
956 948
957 } // namespace chromeos 949 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/events/event_rewriter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698