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

Side by Side Diff: chrome/browser/ui/ash/event_rewriter.cc

Issue 11417144: Use rewriting to make ChromeOS keyboard F<number> keys produce extended keycodes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Detect Chromebook keyboard Created 8 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/ui/ash/event_rewriter.h" 5 #include "chrome/browser/ui/ash/event_rewriter.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 break; 114 break;
115 } 115 }
116 return false; 116 return false;
117 } 117 }
118 118
119 bool HasChromeOSKeyboard() { 119 bool HasChromeOSKeyboard() {
120 return CommandLine::ForCurrentProcess()->HasSwitch( 120 return CommandLine::ForCurrentProcess()->HasSwitch(
121 switches::kHasChromeOSKeyboard); 121 switches::kHasChromeOSKeyboard);
122 } 122 }
123 123
124 bool EventSourceIsChromebookKeyboard(ui::KeyEvent* /* event */) {
125 // TODO(danakj): Determine if the event came from a Chromebook internal
126 // keyboard.
127 return true;
128 }
129
130 bool IsMod3UsedByCurrentInputMethod() { 124 bool IsMod3UsedByCurrentInputMethod() {
131 // Since both German Neo2 XKB layout and Caps Lock depend on Mod3Mask, 125 // Since both German Neo2 XKB layout and Caps Lock depend on Mod3Mask,
132 // it's not possible to make both features work. For now, we don't remap 126 // it's not possible to make both features work. For now, we don't remap
133 // Mod3Mask when Neo2 is in use. 127 // Mod3Mask when Neo2 is in use.
134 // TODO(yusukes): Remove the restriction. 128 // TODO(yusukes): Remove the restriction.
135 return InputMethodManager::GetInstance()->GetCurrentInputMethod().id() == 129 return InputMethodManager::GetInstance()->GetCurrentInputMethod().id() ==
136 kNeo2LayoutId; 130 kNeo2LayoutId;
137 } 131 }
138 #endif 132 #endif
139 133
140 const PrefService* GetPrefService() { 134 const PrefService* GetPrefService() {
141 Profile* profile = ProfileManager::GetDefaultProfile(); 135 Profile* profile = ProfileManager::GetDefaultProfile();
142 if (profile) 136 if (profile)
143 return profile->GetPrefs(); 137 return profile->GetPrefs();
144 return NULL; 138 return NULL;
145 } 139 }
146 140
147 } // namespace 141 } // namespace
148 142
149 EventRewriter::EventRewriter() 143 EventRewriter::EventRewriter()
150 : last_device_id_(kBadDeviceId), 144 : last_device_id_(kBadDeviceId),
151 #if defined(OS_CHROMEOS) 145 #if defined(OS_CHROMEOS)
146 force_external_keyboard_for_testing_(false),
152 xkeyboard_(NULL), 147 xkeyboard_(NULL),
153 #endif 148 #endif
154 pref_service_(NULL) { 149 pref_service_(NULL) {
155 // The ash shell isn't instantiated for our unit tests. 150 // The ash shell isn't instantiated for our unit tests.
156 if (ash::Shell::HasInstance()) 151 if (ash::Shell::HasInstance())
157 ash::Shell::GetPrimaryRootWindow()->AddRootWindowObserver(this); 152 ash::Shell::GetPrimaryRootWindow()->AddRootWindowObserver(this);
158 #if defined(OS_CHROMEOS) 153 #if defined(OS_CHROMEOS)
159 if (base::chromeos::IsRunningOnChromeOS()) { 154 if (base::chromeos::IsRunningOnChromeOS()) {
160 chromeos::XInputHierarchyChangedEventListener::GetInstance() 155 chromeos::XInputHierarchyChangedEventListener::GetInstance()
161 ->AddObserver(this); 156 ->AddObserver(this);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 bool found_keyboard = false; 188 bool found_keyboard = false;
194 for (size_t i = 0; i < tokens.size(); ++i) { 189 for (size_t i = 0; i < tokens.size(); ++i) {
195 if (!found_apple && LowerCaseEqualsASCII(tokens[i], "apple")) 190 if (!found_apple && LowerCaseEqualsASCII(tokens[i], "apple"))
196 found_apple = true; 191 found_apple = true;
197 if (!found_keyboard && LowerCaseEqualsASCII(tokens[i], "keyboard")) 192 if (!found_keyboard && LowerCaseEqualsASCII(tokens[i], "keyboard"))
198 found_keyboard = true; 193 found_keyboard = true;
199 if (found_apple && found_keyboard) 194 if (found_apple && found_keyboard)
200 return kDeviceAppleKeyboard; 195 return kDeviceAppleKeyboard;
201 } 196 }
202 197
198 // TODO(danakj): This could also impact laptops other than Chromebooks, and
199 // might belong behind a command-line flag to be used only on Chromebooks.
200 if (LowerCaseEqualsASCII(device_name, "at translated set 2 keyboard"))
Yusuke Sato 2012/11/28 20:39:17 can you also support Chrome USB keyboard for Stump
201 return kDeviceChromebookKeyboard;
202
203 return kDeviceUnknown; 203 return kDeviceUnknown;
204 } 204 }
205 205
206 void EventRewriter::RewriteForTesting(ui::KeyEvent* event) { 206 void EventRewriter::RewriteForTesting(ui::KeyEvent* event) {
207 Rewrite(event); 207 Rewrite(event);
208 } 208 }
209 209
210 ash::EventRewriterDelegate::Action EventRewriter::RewriteOrFilterKeyEvent( 210 ash::EventRewriterDelegate::Action EventRewriter::RewriteOrFilterKeyEvent(
211 ui::KeyEvent* event) { 211 ui::KeyEvent* event) {
212 if (event->HasNativeEvent()) 212 if (event->HasNativeEvent())
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1); 294 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1);
295 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2); 295 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2);
296 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3); 296 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3);
297 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4); 297 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4);
298 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5); 298 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5);
299 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6); 299 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6);
300 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7); 300 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7);
301 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8); 301 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8);
302 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9); 302 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9);
303 kp_decimal_xkeycode_ = XKeysymToKeycode(display, XK_KP_Decimal); 303 kp_decimal_xkeycode_ = XKeysymToKeycode(display, XK_KP_Decimal);
304 f1_xkeycode_ = XKeysymToKeycode(display, XK_F1);
305 f2_xkeycode_ = XKeysymToKeycode(display, XK_F2);
306 f3_xkeycode_ = XKeysymToKeycode(display, XK_F3);
307 f4_xkeycode_ = XKeysymToKeycode(display, XK_F4);
308 f5_xkeycode_ = XKeysymToKeycode(display, XK_F5);
309 f6_xkeycode_ = XKeysymToKeycode(display, XK_F6);
310 f7_xkeycode_ = XKeysymToKeycode(display, XK_F7);
311 f8_xkeycode_ = XKeysymToKeycode(display, XK_F8);
312 f9_xkeycode_ = XKeysymToKeycode(display, XK_F9);
313 f10_xkeycode_ = XKeysymToKeycode(display, XK_F10);
314 f11_xkeycode_ = XKeysymToKeycode(display, XK_F11);
315 f12_xkeycode_ = XKeysymToKeycode(display, XK_F12);
316 number1_xkeycode_ = XKeysymToKeycode(display, XK_1);
317 number2_xkeycode_ = XKeysymToKeycode(display, XK_2);
318 number3_xkeycode_ = XKeysymToKeycode(display, XK_3);
319 number4_xkeycode_ = XKeysymToKeycode(display, XK_4);
320 number5_xkeycode_ = XKeysymToKeycode(display, XK_5);
321 number6_xkeycode_ = XKeysymToKeycode(display, XK_6);
322 number7_xkeycode_ = XKeysymToKeycode(display, XK_7);
323 number8_xkeycode_ = XKeysymToKeycode(display, XK_8);
324 number9_xkeycode_ = XKeysymToKeycode(display, XK_9);
325 number0_xkeycode_ = XKeysymToKeycode(display, XK_0);
326 minus_xkeycode_ = XKeysymToKeycode(display, XK_minus);
327 equal_xkeycode_ = XKeysymToKeycode(display, XK_equal);
328 browser_back_xkeycode_ = XKeysymToKeycode(display, XF86XK_Back);
329 browser_forward_xkeycode_ = XKeysymToKeycode(display, XF86XK_Forward);
330 browser_refresh_xkeycode_ = XKeysymToKeycode(display, XF86XK_Reload);
331 media_launch_app1_xkeycode_ = XKeysymToKeycode(display, XF86XK_LaunchA);
332 media_launch_app2_xkeycode_ = XKeysymToKeycode(display, XF86XK_LaunchB);
333 brightness_down_xkeycode_ =
334 XKeysymToKeycode(display, XF86XK_MonBrightnessDown);
335 brightness_up_xkeycode_ = XKeysymToKeycode(display, XF86XK_MonBrightnessUp);
336 volume_mute_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioMute);
337 volume_down_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioLowerVolume);
338 volume_up_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioRaiseVolume);
339 power_xkeycode_ = XKeysymToKeycode(display, XF86XK_PowerOff);
304 } 340 }
305 341
306 KeyCode EventRewriter::NativeKeySymToNativeKeycode(KeySym keysym) { 342 KeyCode EventRewriter::NativeKeySymToNativeKeycode(KeySym keysym) {
307 switch (keysym) { 343 switch (keysym) {
308 case XK_Control_L: 344 case XK_Control_L:
309 return control_l_xkeycode_; 345 return control_l_xkeycode_;
310 case XK_Control_R: 346 case XK_Control_R:
311 return control_r_xkeycode_; 347 return control_r_xkeycode_;
312 case XK_Alt_L: 348 case XK_Alt_L:
313 return alt_l_xkeycode_; 349 return alt_l_xkeycode_;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return kp_8_xkeycode_; 389 return kp_8_xkeycode_;
354 case XK_KP_9: 390 case XK_KP_9:
355 return kp_9_xkeycode_; 391 return kp_9_xkeycode_;
356 case XK_KP_Decimal: 392 case XK_KP_Decimal:
357 return kp_decimal_xkeycode_; 393 return kp_decimal_xkeycode_;
358 default: 394 default:
359 break; 395 break;
360 } 396 }
361 return 0U; 397 return 0U;
362 } 398 }
399
400 bool EventRewriter::EventSourceIsChromebookKeyboard(ui::KeyEvent* /* event */) {
401 if (force_external_keyboard_for_testing_)
402 return false;
403
404 if (last_device_id_ == kBadDeviceId)
405 return false;
406
407 // Check which device generated |event|.
408 std::map<int, DeviceType>::const_iterator iter =
409 device_id_to_type_.find(last_device_id_);
410 if (iter == device_id_to_type_.end()) {
411 LOG(ERROR) << "Device ID " << last_device_id_ << " is unknown.";
412 return false;
413 }
414
415 const DeviceType type = iter->second;
416 return type == kDeviceChromebookKeyboard;
417 }
363 #endif 418 #endif
364 419
365 void EventRewriter::Rewrite(ui::KeyEvent* event) { 420 void EventRewriter::Rewrite(ui::KeyEvent* event) {
366 #if defined(OS_CHROMEOS) 421 #if defined(OS_CHROMEOS)
367 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See 422 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
368 // crbug.com/136465. 423 // crbug.com/136465.
369 if (event->native_event()->xkey.send_event) 424 if (event->native_event()->xkey.send_event)
370 return; 425 return;
371 #endif 426 #endif
372 RewriteModifiers(event); 427 RewriteModifiers(event);
373 RewriteNumPadKeys(event); 428 RewriteNumPadKeys(event);
374 RewriteBackspaceAndArrowKeys(event); 429 RewriteBackspaceAndArrowKeys(event);
375 // TODO(yusukes): Implement crosbug.com/27167 (allow sending function keys). 430 RewriteFunctionKeys(event);
376 } 431 }
377 432
378 bool EventRewriter::IsAppleKeyboard() const { 433 bool EventRewriter::IsAppleKeyboard() const {
379 if (last_device_id_ == kBadDeviceId) 434 if (last_device_id_ == kBadDeviceId)
380 return false; 435 return false;
381 436
382 // Check which device generated |event|. 437 // Check which device generated |event|.
383 std::map<int, DeviceType>::const_iterator iter = 438 std::map<int, DeviceType>::const_iterator iter =
384 device_id_to_type_.find(last_device_id_); 439 device_id_to_type_.find(last_device_id_);
385 if (iter == device_id_to_type_.end()) { 440 if (iter == device_id_to_type_.end()) {
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 ui::VKEY_NEXT, event->flags()); 779 ui::VKEY_NEXT, event->flags());
725 rewritten = true; 780 rewritten = true;
726 } 781 }
727 } 782 }
728 #else 783 #else
729 // TODO(yusukes): Support Ash on other platforms if needed. 784 // TODO(yusukes): Support Ash on other platforms if needed.
730 #endif 785 #endif
731 return rewritten; 786 return rewritten;
732 } 787 }
733 788
789 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) {
790 #if defined(OS_CHROMEOS)
791 XEvent* xev = event->native_event();
792 XKeyEvent* xkey = &(xev->xkey);
793 const KeySym keysym = XLookupKeysym(xkey, 0);
794
795 KeyCode remapped_native_keycode = 0;
796 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN;
797 unsigned int remapped_native_state = xkey->state;
798 int remapped_flags = event->flags();
799
800 // On a Chromebook keyboard, F<number> keys have special purposes. On other
801 // keyboards, they should act as usual.
802 if (!EventSourceIsChromebookKeyboard(event))
803 return false;
804
805 // Rewrite the actual F1-F12 keys on a Chromebook keyboard to special keys.
806 switch (keysym) {
807 case XK_F1:
808 // Remap F1 to BROWSER_BACK
809 remapped_native_keycode = browser_back_xkeycode_;
810 remapped_keycode = ui::VKEY_BROWSER_BACK;
811 break;
812 case XK_F2:
813 // Remap F2 to BROWSER_FORWARD
814 remapped_native_keycode = browser_forward_xkeycode_;
815 remapped_keycode = ui::VKEY_BROWSER_FORWARD;
816 break;
817 case XK_F3:
818 // Remap F3 to BROWSER_REFRESH
819 remapped_native_keycode = browser_refresh_xkeycode_;
820 remapped_keycode = ui::VKEY_BROWSER_REFRESH;
821 break;
822 case XK_F4:
823 // Remap F4 to MEDIA_LAUNCH_APP2
824 remapped_native_keycode = media_launch_app2_xkeycode_;
825 remapped_keycode = ui::VKEY_MEDIA_LAUNCH_APP2;
826 break;
827 case XK_F5:
828 // Remap F5 to MEDIA_LAUNCH_APP1
829 remapped_native_keycode = media_launch_app1_xkeycode_;
830 remapped_keycode = ui::VKEY_MEDIA_LAUNCH_APP1;
831 break;
832 case XK_F6:
833 // Remap F6 to BRIGHTNESS_DOWN
834 remapped_native_keycode = brightness_down_xkeycode_;
835 remapped_keycode = ui::VKEY_BRIGHTNESS_DOWN;
836 break;
837 case XK_F7:
838 // Remap F7 to BRIGHTNESS_UP
839 remapped_native_keycode = brightness_up_xkeycode_;
840 remapped_keycode = ui::VKEY_BRIGHTNESS_UP;
841 break;
842 case XK_F8:
843 // Remap F8 to VOLUME_MUTE
844 remapped_native_keycode = volume_mute_xkeycode_;
845 remapped_keycode = ui::VKEY_VOLUME_MUTE;
846 break;
847 case XK_F9:
848 // Remap F9 to VOLUME_DOWN
849 remapped_native_keycode = volume_down_xkeycode_;
850 remapped_keycode = ui::VKEY_VOLUME_DOWN;
851 break;
852 case XK_F10:
853 // Remap F10 to VOLUME_UP
854 remapped_native_keycode = volume_up_xkeycode_;
855 remapped_keycode = ui::VKEY_VOLUME_UP;
856 break;
857 case XK_F11:
858 // Remap F11 to POWER
859 remapped_native_keycode = power_xkeycode_;
860 remapped_keycode = ui::VKEY_POWER;
861 break;
862 default:
863 break;
864 }
865
866 const PrefService* pref_service =
867 pref_service_ ? pref_service_ : GetPrefService();
868 bool chromebook_function_key = CommandLine::ForCurrentProcess()->HasSwitch(
869 switches::kEnableChromebookFunctionKey);
870
871 bool search_as_function_key = chromebook_function_key && pref_service &&
872 pref_service->GetBoolean(prefs::kLanguageSearchKeyActsAsFunctionKey);
873
874 // When using Search as a Function key, remap Search+<number> to F<number>.
875 if (search_as_function_key && xkey->state & Mod4Mask) {
876 // We check the keycode here instead of the keysym, as these keys have
877 // different keysyms when modifiers are pressed, such as shift.
878
879 // TODO(danakj): On some i18n keyboards, these choices will be bad and we
880 // should make layout-specific choices here. For eg. on a french keyboard
881 // "-" and "6" are the same key, so F11 will not be accessible.
882 KeyCode xkeycode = xkey->keycode;
883 if (xkeycode == number1_xkeycode_) {
884 // Remap Search+1 to F1.
885 remapped_native_keycode = f1_xkeycode_;
886 remapped_keycode = ui::VKEY_F1;
887 remapped_native_state &= ~Mod4Mask;
888 } else if (xkeycode == number2_xkeycode_) {
889 // Remap Search+2 to F2.
890 remapped_native_keycode = f2_xkeycode_;
891 remapped_keycode = ui::VKEY_F2;
892 remapped_native_state &= ~Mod4Mask;
893 } else if (xkeycode == number3_xkeycode_) {
894 // Remap Search+3 to F3.
895 remapped_native_keycode = f3_xkeycode_;
896 remapped_keycode = ui::VKEY_F3;
897 remapped_native_state &= ~Mod4Mask;
898 } else if (xkeycode == number4_xkeycode_) {
899 // Remap Search+4 to F4.
900 remapped_native_keycode = f4_xkeycode_;
901 remapped_keycode = ui::VKEY_F4;
902 remapped_native_state &= ~Mod4Mask;
903 } else if (xkeycode == number5_xkeycode_) {
904 // Remap Search+5 to F5.
905 remapped_native_keycode = f5_xkeycode_;
906 remapped_keycode = ui::VKEY_F5;
907 remapped_native_state &= ~Mod4Mask;
908 } else if (xkeycode == number6_xkeycode_) {
909 // Remap Search+6 to F6.
910 remapped_native_keycode = f6_xkeycode_;
911 remapped_keycode = ui::VKEY_F6;
912 remapped_native_state &= ~Mod4Mask;
913 } else if (xkeycode == number7_xkeycode_) {
914 // Remap Search+7 to F7.
915 remapped_native_keycode = f7_xkeycode_;
916 remapped_keycode = ui::VKEY_F7;
917 remapped_native_state &= ~Mod4Mask;
918 } else if (xkeycode == number8_xkeycode_) {
919 // Remap Search+8 to F8.
920 remapped_native_keycode = f8_xkeycode_;
921 remapped_keycode = ui::VKEY_F8;
922 remapped_native_state &= ~Mod4Mask;
923 } else if (xkeycode == number9_xkeycode_) {
924 // Remap Search+9 to F9.
925 remapped_native_keycode = f9_xkeycode_;
926 remapped_keycode = ui::VKEY_F9;
927 remapped_native_state &= ~Mod4Mask;
928 } else if (xkeycode == number0_xkeycode_) {
929 // Remap Search+0 to F10.
930 remapped_native_keycode = f10_xkeycode_;
931 remapped_keycode = ui::VKEY_F10;
932 remapped_native_state &= ~Mod4Mask;
933 } else if (xkeycode == minus_xkeycode_) {
934 // Remap Search+- to F11.
935 remapped_native_keycode = f11_xkeycode_;
936 remapped_keycode = ui::VKEY_F11;
937 remapped_native_state &= ~Mod4Mask;
938 } else if (xkeycode == equal_xkeycode_) {
939 // Remap Search+= to F12.
940 remapped_native_keycode = f12_xkeycode_;
941 remapped_keycode = ui::VKEY_F12;
942 remapped_native_state &= ~Mod4Mask;
943 }
944 }
945
946 if (!remapped_native_keycode || remapped_keycode == ui::VKEY_UNKNOWN)
947 return false;
948
949 OverwriteEvent(event, remapped_native_keycode, remapped_native_state,
950 remapped_keycode, remapped_flags);
951 return true;
952 #else
953 // TODO(danakj): Support Ash on other platforms if needed.
954 return false;
955 #endif
956 }
957
734 void EventRewriter::RewriteLocatedEvent(ui::LocatedEvent* event) { 958 void EventRewriter::RewriteLocatedEvent(ui::LocatedEvent* event) {
735 #if defined(OS_CHROMEOS) 959 #if defined(OS_CHROMEOS)
736 if (event->flags() & ui::EF_IS_SYNTHESIZED) 960 if (event->flags() & ui::EF_IS_SYNTHESIZED)
737 return; 961 return;
738 962
739 XEvent* xevent = event->native_event(); 963 XEvent* xevent = event->native_event();
740 if (!xevent || xevent->type != GenericEvent) 964 if (!xevent || xevent->type != GenericEvent)
741 return; 965 return;
742 966
743 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data); 967 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 #endif 1017 #endif
794 } 1018 }
795 1019
796 EventRewriter::DeviceType EventRewriter::DeviceAddedInternal( 1020 EventRewriter::DeviceType EventRewriter::DeviceAddedInternal(
797 int device_id, 1021 int device_id,
798 const std::string& device_name) { 1022 const std::string& device_name) {
799 const DeviceType type = EventRewriter::GetDeviceType(device_name); 1023 const DeviceType type = EventRewriter::GetDeviceType(device_name);
800 if (type == kDeviceAppleKeyboard) { 1024 if (type == kDeviceAppleKeyboard) {
801 VLOG(1) << "Apple keyboard '" << device_name << "' connected: " 1025 VLOG(1) << "Apple keyboard '" << device_name << "' connected: "
802 << "id=" << device_id; 1026 << "id=" << device_id;
1027 } else if (type == kDeviceChromebookKeyboard) {
1028 VLOG(1) << "Chromebook keyboard '" << device_name << "' connected: "
1029 << "id=" << device_id;
803 } 1030 }
804 // Always overwrite the existing device_id since the X server may reuse a 1031 // Always overwrite the existing device_id since the X server may reuse a
805 // device id for an unattached device. 1032 // device id for an unattached device.
806 device_id_to_type_[device_id] = type; 1033 device_id_to_type_[device_id] = type;
807 return type; 1034 return type;
808 } 1035 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/ash/event_rewriter.h ('k') | chrome/browser/ui/ash/event_rewriter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698