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

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: chromeboxkeyboard 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 // The chromebook internal keyboard's name.
201 if (LowerCaseEqualsASCII(device_name, "at translated set 2 keyboard"))
202 return kDeviceChromebookKeyboard;
203 // The chromebox chrome-specific keyboard's name.
204 if (LowerCaseEqualsASCII(device_name, "samsung usb keyboard"))
205 return kDeviceChromebookKeyboard;
Daniel Erat 2012/11/28 22:23:03 it's possible that i misunderstood the conversatio
danakj 2012/11/29 01:50:54 Hm.. It should refer to ChromeOS keyboards that ha
206
203 return kDeviceUnknown; 207 return kDeviceUnknown;
204 } 208 }
205 209
206 void EventRewriter::RewriteForTesting(ui::KeyEvent* event) { 210 void EventRewriter::RewriteForTesting(ui::KeyEvent* event) {
207 Rewrite(event); 211 Rewrite(event);
208 } 212 }
209 213
210 ash::EventRewriterDelegate::Action EventRewriter::RewriteOrFilterKeyEvent( 214 ash::EventRewriterDelegate::Action EventRewriter::RewriteOrFilterKeyEvent(
211 ui::KeyEvent* event) { 215 ui::KeyEvent* event) {
212 if (event->HasNativeEvent()) 216 if (event->HasNativeEvent())
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1); 298 kp_1_xkeycode_ = XKeysymToKeycode(display, XK_KP_1);
295 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2); 299 kp_2_xkeycode_ = XKeysymToKeycode(display, XK_KP_2);
296 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3); 300 kp_3_xkeycode_ = XKeysymToKeycode(display, XK_KP_3);
297 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4); 301 kp_4_xkeycode_ = XKeysymToKeycode(display, XK_KP_4);
298 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5); 302 kp_5_xkeycode_ = XKeysymToKeycode(display, XK_KP_5);
299 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6); 303 kp_6_xkeycode_ = XKeysymToKeycode(display, XK_KP_6);
300 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7); 304 kp_7_xkeycode_ = XKeysymToKeycode(display, XK_KP_7);
301 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8); 305 kp_8_xkeycode_ = XKeysymToKeycode(display, XK_KP_8);
302 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9); 306 kp_9_xkeycode_ = XKeysymToKeycode(display, XK_KP_9);
303 kp_decimal_xkeycode_ = XKeysymToKeycode(display, XK_KP_Decimal); 307 kp_decimal_xkeycode_ = XKeysymToKeycode(display, XK_KP_Decimal);
308 f1_xkeycode_ = XKeysymToKeycode(display, XK_F1);
309 f2_xkeycode_ = XKeysymToKeycode(display, XK_F2);
310 f3_xkeycode_ = XKeysymToKeycode(display, XK_F3);
311 f4_xkeycode_ = XKeysymToKeycode(display, XK_F4);
312 f5_xkeycode_ = XKeysymToKeycode(display, XK_F5);
313 f6_xkeycode_ = XKeysymToKeycode(display, XK_F6);
314 f7_xkeycode_ = XKeysymToKeycode(display, XK_F7);
315 f8_xkeycode_ = XKeysymToKeycode(display, XK_F8);
316 f9_xkeycode_ = XKeysymToKeycode(display, XK_F9);
317 f10_xkeycode_ = XKeysymToKeycode(display, XK_F10);
318 f11_xkeycode_ = XKeysymToKeycode(display, XK_F11);
319 f12_xkeycode_ = XKeysymToKeycode(display, XK_F12);
320 number1_xkeycode_ = XKeysymToKeycode(display, XK_1);
321 number2_xkeycode_ = XKeysymToKeycode(display, XK_2);
322 number3_xkeycode_ = XKeysymToKeycode(display, XK_3);
323 number4_xkeycode_ = XKeysymToKeycode(display, XK_4);
324 number5_xkeycode_ = XKeysymToKeycode(display, XK_5);
325 number6_xkeycode_ = XKeysymToKeycode(display, XK_6);
326 number7_xkeycode_ = XKeysymToKeycode(display, XK_7);
327 number8_xkeycode_ = XKeysymToKeycode(display, XK_8);
328 number9_xkeycode_ = XKeysymToKeycode(display, XK_9);
329 number0_xkeycode_ = XKeysymToKeycode(display, XK_0);
330 minus_xkeycode_ = XKeysymToKeycode(display, XK_minus);
331 equal_xkeycode_ = XKeysymToKeycode(display, XK_equal);
332 browser_back_xkeycode_ = XKeysymToKeycode(display, XF86XK_Back);
333 browser_forward_xkeycode_ = XKeysymToKeycode(display, XF86XK_Forward);
334 browser_refresh_xkeycode_ = XKeysymToKeycode(display, XF86XK_Reload);
335 media_launch_app1_xkeycode_ = XKeysymToKeycode(display, XF86XK_LaunchA);
336 media_launch_app2_xkeycode_ = XKeysymToKeycode(display, XF86XK_LaunchB);
337 brightness_down_xkeycode_ =
338 XKeysymToKeycode(display, XF86XK_MonBrightnessDown);
339 brightness_up_xkeycode_ = XKeysymToKeycode(display, XF86XK_MonBrightnessUp);
340 volume_mute_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioMute);
341 volume_down_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioLowerVolume);
342 volume_up_xkeycode_ = XKeysymToKeycode(display, XF86XK_AudioRaiseVolume);
343 power_xkeycode_ = XKeysymToKeycode(display, XF86XK_PowerOff);
304 } 344 }
305 345
306 KeyCode EventRewriter::NativeKeySymToNativeKeycode(KeySym keysym) { 346 KeyCode EventRewriter::NativeKeySymToNativeKeycode(KeySym keysym) {
307 switch (keysym) { 347 switch (keysym) {
308 case XK_Control_L: 348 case XK_Control_L:
309 return control_l_xkeycode_; 349 return control_l_xkeycode_;
310 case XK_Control_R: 350 case XK_Control_R:
311 return control_r_xkeycode_; 351 return control_r_xkeycode_;
312 case XK_Alt_L: 352 case XK_Alt_L:
313 return alt_l_xkeycode_; 353 return alt_l_xkeycode_;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 return kp_8_xkeycode_; 393 return kp_8_xkeycode_;
354 case XK_KP_9: 394 case XK_KP_9:
355 return kp_9_xkeycode_; 395 return kp_9_xkeycode_;
356 case XK_KP_Decimal: 396 case XK_KP_Decimal:
357 return kp_decimal_xkeycode_; 397 return kp_decimal_xkeycode_;
358 default: 398 default:
359 break; 399 break;
360 } 400 }
361 return 0U; 401 return 0U;
362 } 402 }
403
404 bool EventRewriter::EventSourceIsChromebookKeyboard(ui::KeyEvent* /* event */) {
405 if (force_external_keyboard_for_testing_)
406 return false;
407
408 if (last_device_id_ == kBadDeviceId)
409 return false;
410
411 // Check which device generated |event|.
412 std::map<int, DeviceType>::const_iterator iter =
413 device_id_to_type_.find(last_device_id_);
414 if (iter == device_id_to_type_.end()) {
415 LOG(ERROR) << "Device ID " << last_device_id_ << " is unknown.";
416 return false;
417 }
418
419 const DeviceType type = iter->second;
420 return type == kDeviceChromebookKeyboard;
421 }
363 #endif 422 #endif
364 423
365 void EventRewriter::Rewrite(ui::KeyEvent* event) { 424 void EventRewriter::Rewrite(ui::KeyEvent* event) {
366 #if defined(OS_CHROMEOS) 425 #if defined(OS_CHROMEOS)
367 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See 426 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
368 // crbug.com/136465. 427 // crbug.com/136465.
369 if (event->native_event()->xkey.send_event) 428 if (event->native_event()->xkey.send_event)
370 return; 429 return;
371 #endif 430 #endif
372 RewriteModifiers(event); 431 RewriteModifiers(event);
373 RewriteNumPadKeys(event); 432 RewriteNumPadKeys(event);
374 RewriteBackspaceAndArrowKeys(event); 433 RewriteBackspaceAndArrowKeys(event);
375 // TODO(yusukes): Implement crosbug.com/27167 (allow sending function keys). 434 RewriteFunctionKeys(event);
376 } 435 }
377 436
378 bool EventRewriter::IsAppleKeyboard() const { 437 bool EventRewriter::IsAppleKeyboard() const {
379 if (last_device_id_ == kBadDeviceId) 438 if (last_device_id_ == kBadDeviceId)
380 return false; 439 return false;
381 440
382 // Check which device generated |event|. 441 // Check which device generated |event|.
383 std::map<int, DeviceType>::const_iterator iter = 442 std::map<int, DeviceType>::const_iterator iter =
384 device_id_to_type_.find(last_device_id_); 443 device_id_to_type_.find(last_device_id_);
385 if (iter == device_id_to_type_.end()) { 444 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()); 783 ui::VKEY_NEXT, event->flags());
725 rewritten = true; 784 rewritten = true;
726 } 785 }
727 } 786 }
728 #else 787 #else
729 // TODO(yusukes): Support Ash on other platforms if needed. 788 // TODO(yusukes): Support Ash on other platforms if needed.
730 #endif 789 #endif
731 return rewritten; 790 return rewritten;
732 } 791 }
733 792
793 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) {
794 #if defined(OS_CHROMEOS)
795 XEvent* xev = event->native_event();
796 XKeyEvent* xkey = &(xev->xkey);
797 const KeySym keysym = XLookupKeysym(xkey, 0);
798
799 KeyCode remapped_native_keycode = 0;
800 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN;
801 unsigned int remapped_native_state = xkey->state;
802 int remapped_flags = event->flags();
803
804 // On a Chromebook keyboard, F<number> keys have special purposes. On other
805 // keyboards, they should act as usual.
806 if (!EventSourceIsChromebookKeyboard(event))
807 return false;
808
809 // Rewrite the actual F1-F12 keys on a Chromebook keyboard to special keys.
810 switch (keysym) {
811 case XK_F1:
812 // Remap F1 to BROWSER_BACK
813 remapped_native_keycode = browser_back_xkeycode_;
814 remapped_keycode = ui::VKEY_BROWSER_BACK;
815 break;
816 case XK_F2:
817 // Remap F2 to BROWSER_FORWARD
818 remapped_native_keycode = browser_forward_xkeycode_;
819 remapped_keycode = ui::VKEY_BROWSER_FORWARD;
820 break;
821 case XK_F3:
822 // Remap F3 to BROWSER_REFRESH
823 remapped_native_keycode = browser_refresh_xkeycode_;
824 remapped_keycode = ui::VKEY_BROWSER_REFRESH;
825 break;
826 case XK_F4:
827 // Remap F4 to MEDIA_LAUNCH_APP2
828 remapped_native_keycode = media_launch_app2_xkeycode_;
829 remapped_keycode = ui::VKEY_MEDIA_LAUNCH_APP2;
830 break;
831 case XK_F5:
832 // Remap F5 to MEDIA_LAUNCH_APP1
833 remapped_native_keycode = media_launch_app1_xkeycode_;
834 remapped_keycode = ui::VKEY_MEDIA_LAUNCH_APP1;
835 break;
836 case XK_F6:
837 // Remap F6 to BRIGHTNESS_DOWN
838 remapped_native_keycode = brightness_down_xkeycode_;
839 remapped_keycode = ui::VKEY_BRIGHTNESS_DOWN;
840 break;
841 case XK_F7:
842 // Remap F7 to BRIGHTNESS_UP
843 remapped_native_keycode = brightness_up_xkeycode_;
844 remapped_keycode = ui::VKEY_BRIGHTNESS_UP;
845 break;
846 case XK_F8:
847 // Remap F8 to VOLUME_MUTE
848 remapped_native_keycode = volume_mute_xkeycode_;
849 remapped_keycode = ui::VKEY_VOLUME_MUTE;
850 break;
851 case XK_F9:
852 // Remap F9 to VOLUME_DOWN
853 remapped_native_keycode = volume_down_xkeycode_;
854 remapped_keycode = ui::VKEY_VOLUME_DOWN;
855 break;
856 case XK_F10:
857 // Remap F10 to VOLUME_UP
858 remapped_native_keycode = volume_up_xkeycode_;
859 remapped_keycode = ui::VKEY_VOLUME_UP;
860 break;
861 case XK_F11:
862 // Remap F11 to POWER
863 remapped_native_keycode = power_xkeycode_;
864 remapped_keycode = ui::VKEY_POWER;
865 break;
866 default:
867 break;
868 }
869
870 const PrefService* pref_service =
871 pref_service_ ? pref_service_ : GetPrefService();
872 bool chromebook_function_key = CommandLine::ForCurrentProcess()->HasSwitch(
873 switches::kEnableChromebookFunctionKey);
874
875 bool search_as_function_key = chromebook_function_key && pref_service &&
876 pref_service->GetBoolean(prefs::kLanguageSearchKeyActsAsFunctionKey);
877
878 // When using Search as a Function key, remap Search+<number> to F<number>.
879 if (search_as_function_key && xkey->state & Mod4Mask) {
880 // We check the keycode here instead of the keysym, as these keys have
881 // different keysyms when modifiers are pressed, such as shift.
882
883 // TODO(danakj): On some i18n keyboards, these choices will be bad and we
884 // should make layout-specific choices here. For eg. on a french keyboard
885 // "-" and "6" are the same key, so F11 will not be accessible.
886 KeyCode xkeycode = xkey->keycode;
887 if (xkeycode == number1_xkeycode_) {
888 // Remap Search+1 to F1.
889 remapped_native_keycode = f1_xkeycode_;
890 remapped_keycode = ui::VKEY_F1;
891 remapped_native_state &= ~Mod4Mask;
892 } else if (xkeycode == number2_xkeycode_) {
893 // Remap Search+2 to F2.
Daniel Erat 2012/11/28 22:23:03 i'd probably remove these repetitive comments in f
danakj 2012/11/29 01:50:54 Done.
894 remapped_native_keycode = f2_xkeycode_;
895 remapped_keycode = ui::VKEY_F2;
896 remapped_native_state &= ~Mod4Mask;
897 } else if (xkeycode == number3_xkeycode_) {
898 // Remap Search+3 to F3.
899 remapped_native_keycode = f3_xkeycode_;
900 remapped_keycode = ui::VKEY_F3;
901 remapped_native_state &= ~Mod4Mask;
902 } else if (xkeycode == number4_xkeycode_) {
903 // Remap Search+4 to F4.
904 remapped_native_keycode = f4_xkeycode_;
905 remapped_keycode = ui::VKEY_F4;
906 remapped_native_state &= ~Mod4Mask;
907 } else if (xkeycode == number5_xkeycode_) {
908 // Remap Search+5 to F5.
909 remapped_native_keycode = f5_xkeycode_;
910 remapped_keycode = ui::VKEY_F5;
911 remapped_native_state &= ~Mod4Mask;
912 } else if (xkeycode == number6_xkeycode_) {
913 // Remap Search+6 to F6.
914 remapped_native_keycode = f6_xkeycode_;
915 remapped_keycode = ui::VKEY_F6;
916 remapped_native_state &= ~Mod4Mask;
917 } else if (xkeycode == number7_xkeycode_) {
918 // Remap Search+7 to F7.
919 remapped_native_keycode = f7_xkeycode_;
920 remapped_keycode = ui::VKEY_F7;
921 remapped_native_state &= ~Mod4Mask;
922 } else if (xkeycode == number8_xkeycode_) {
923 // Remap Search+8 to F8.
924 remapped_native_keycode = f8_xkeycode_;
925 remapped_keycode = ui::VKEY_F8;
926 remapped_native_state &= ~Mod4Mask;
927 } else if (xkeycode == number9_xkeycode_) {
928 // Remap Search+9 to F9.
929 remapped_native_keycode = f9_xkeycode_;
930 remapped_keycode = ui::VKEY_F9;
931 remapped_native_state &= ~Mod4Mask;
932 } else if (xkeycode == number0_xkeycode_) {
933 // Remap Search+0 to F10.
934 remapped_native_keycode = f10_xkeycode_;
935 remapped_keycode = ui::VKEY_F10;
936 remapped_native_state &= ~Mod4Mask;
937 } else if (xkeycode == minus_xkeycode_) {
938 // Remap Search+- to F11.
939 remapped_native_keycode = f11_xkeycode_;
940 remapped_keycode = ui::VKEY_F11;
941 remapped_native_state &= ~Mod4Mask;
942 } else if (xkeycode == equal_xkeycode_) {
943 // Remap Search+= to F12.
944 remapped_native_keycode = f12_xkeycode_;
945 remapped_keycode = ui::VKEY_F12;
946 remapped_native_state &= ~Mod4Mask;
947 }
948 }
949
950 if (!remapped_native_keycode || remapped_keycode == ui::VKEY_UNKNOWN)
951 return false;
952
953 OverwriteEvent(event, remapped_native_keycode, remapped_native_state,
954 remapped_keycode, remapped_flags);
955 return true;
956 #else
957 // TODO(danakj): Support Ash on other platforms if needed.
958 return false;
959 #endif
960 }
961
734 void EventRewriter::RewriteLocatedEvent(ui::LocatedEvent* event) { 962 void EventRewriter::RewriteLocatedEvent(ui::LocatedEvent* event) {
735 #if defined(OS_CHROMEOS) 963 #if defined(OS_CHROMEOS)
736 if (event->flags() & ui::EF_IS_SYNTHESIZED) 964 if (event->flags() & ui::EF_IS_SYNTHESIZED)
737 return; 965 return;
738 966
739 XEvent* xevent = event->native_event(); 967 XEvent* xevent = event->native_event();
740 if (!xevent || xevent->type != GenericEvent) 968 if (!xevent || xevent->type != GenericEvent)
741 return; 969 return;
742 970
743 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data); 971 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 #endif 1021 #endif
794 } 1022 }
795 1023
796 EventRewriter::DeviceType EventRewriter::DeviceAddedInternal( 1024 EventRewriter::DeviceType EventRewriter::DeviceAddedInternal(
797 int device_id, 1025 int device_id,
798 const std::string& device_name) { 1026 const std::string& device_name) {
799 const DeviceType type = EventRewriter::GetDeviceType(device_name); 1027 const DeviceType type = EventRewriter::GetDeviceType(device_name);
800 if (type == kDeviceAppleKeyboard) { 1028 if (type == kDeviceAppleKeyboard) {
801 VLOG(1) << "Apple keyboard '" << device_name << "' connected: " 1029 VLOG(1) << "Apple keyboard '" << device_name << "' connected: "
802 << "id=" << device_id; 1030 << "id=" << device_id;
1031 } else if (type == kDeviceChromebookKeyboard) {
1032 VLOG(1) << "Chromebook keyboard '" << device_name << "' connected: "
1033 << "id=" << device_id;
803 } 1034 }
804 // Always overwrite the existing device_id since the X server may reuse a 1035 // Always overwrite the existing device_id since the X server may reuse a
805 // device id for an unattached device. 1036 // device id for an unattached device.
806 device_id_to_type_[device_id] = type; 1037 device_id_to_type_[device_id] = type;
807 return type; 1038 return type;
808 } 1039 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698