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

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

Issue 11578044: Enable Search-key modifiers for extended key shortcuts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit 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 285 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 const KeyboardRemapping& map = remappings[i]; 296 const KeyboardRemapping& map = remappings[i];
297 297
298 if (keysym != map.input_keysym) 298 if (keysym != map.input_keysym)
299 continue; 299 continue;
300 unsigned int matched_mods = native_mods & map.input_native_mods; 300 unsigned int matched_mods = native_mods & map.input_native_mods;
301 if (matched_mods != map.input_native_mods) 301 if (matched_mods != map.input_native_mods)
302 continue; 302 continue;
303 303
304 *remapped_native_keysym = map.output_keysym; 304 *remapped_native_keysym = map.output_keysym;
305 *remapped_keycode = map.output_keycode; 305 *remapped_keycode = map.output_keycode;
306 *remapped_native_mods = native_mods & ~map.input_native_mods; 306 *remapped_native_mods = (native_mods & ~map.input_native_mods) |
307 *remapped_mods = mods & ~map.input_mods; 307 map.output_native_mods;
308 *remapped_mods = (mods & ~map.input_mods) | map.output_mods;
308 return true; 309 return true;
309 } 310 }
310 311
311 return false; 312 return false;
312 } 313 }
313 314
314 bool EventRewriter::RewriteWithKeyboardRemappingsByKeyCode( 315 bool EventRewriter::RewriteWithKeyboardRemappingsByKeyCode(
315 const KeyboardRemapping* remappings, 316 const KeyboardRemapping* remappings,
316 size_t num_remappings, 317 size_t num_remappings,
317 KeyCode keycode, 318 KeyCode keycode,
318 unsigned int native_mods, 319 unsigned int native_mods,
319 unsigned int mods, 320 unsigned int mods,
320 KeySym* remapped_native_keysym, 321 KeySym* remapped_native_keysym,
321 unsigned int* remapped_native_mods, 322 unsigned int* remapped_native_mods,
322 ui::KeyboardCode* remapped_keycode, 323 ui::KeyboardCode* remapped_keycode,
323 unsigned int* remapped_mods) { 324 unsigned int* remapped_mods) {
324 for (size_t i = 0; i < num_remappings; ++i) { 325 for (size_t i = 0; i < num_remappings; ++i) {
325 const KeyboardRemapping& map = remappings[i]; 326 const KeyboardRemapping& map = remappings[i];
326 327
327 KeyCode input_keycode = NativeKeySymToNativeKeycode(map.input_keysym); 328 KeyCode input_keycode = NativeKeySymToNativeKeycode(map.input_keysym);
328 if (keycode != input_keycode) 329 if (keycode != input_keycode)
329 continue; 330 continue;
330 unsigned int matched_mods = native_mods & map.input_native_mods; 331 unsigned int matched_mods = native_mods & map.input_native_mods;
331 if (matched_mods != map.input_native_mods) 332 if (matched_mods != map.input_native_mods)
332 continue; 333 continue;
333 334
334 *remapped_native_keysym = map.output_keysym; 335 *remapped_native_keysym = map.output_keysym;
335 *remapped_keycode = map.output_keycode; 336 *remapped_keycode = map.output_keycode;
336 *remapped_native_mods = native_mods & ~map.input_native_mods; 337 *remapped_native_mods = (native_mods & ~map.input_native_mods) |
337 *remapped_mods = mods & ~map.input_mods; 338 map.output_native_mods;
339 *remapped_mods = (mods & ~map.input_mods) | map.output_mods;
338 return true; 340 return true;
339 } 341 }
340 342
341 return false; 343 return false;
342 } 344 }
343 #endif 345 #endif
344 346
345 void EventRewriter::Rewrite(ui::KeyEvent* event) { 347 void EventRewriter::Rewrite(ui::KeyEvent* event) {
346 #if defined(OS_CHROMEOS) 348 #if defined(OS_CHROMEOS)
347 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See 349 // Do not rewrite an event sent by ui_controls::SendKeyPress(). See
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 break; 629 break;
628 } 630 }
629 #else 631 #else
630 // TODO(yusukes): Support Ash on other platforms if needed. 632 // TODO(yusukes): Support Ash on other platforms if needed.
631 #endif 633 #endif
632 return rewritten; 634 return rewritten;
633 } 635 }
634 636
635 bool EventRewriter::RewriteExtendedKeys(ui::KeyEvent* event) { 637 bool EventRewriter::RewriteExtendedKeys(ui::KeyEvent* event) {
636 #if defined(OS_CHROMEOS) 638 #if defined(OS_CHROMEOS)
637 const bool search_as_function_key =
638 CommandLine::ForCurrentProcess()->HasSwitch(
639 switches::kEnableChromebookFunctionKey);
640
641 XEvent* xev = event->native_event(); 639 XEvent* xev = event->native_event();
642 XKeyEvent* xkey = &(xev->xkey); 640 XKeyEvent* xkey = &(xev->xkey);
643 const KeySym keysym = XLookupKeysym(xkey, 0); 641 const KeySym keysym = XLookupKeysym(xkey, 0);
644 642
645 KeySym remapped_native_keysym = 0; 643 KeySym remapped_native_keysym = 0;
646 unsigned int remapped_native_mods = 0; 644 unsigned int remapped_native_mods = 0;
647 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN; 645 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN;
648 unsigned int remapped_mods = 0; 646 unsigned int remapped_mods = 0;
649 647
650 if (!search_as_function_key) { 648 if (xkey->state & Mod4Mask) {
651 static const KeyboardRemapping remappings[] = { 649 // Allow Search to avoid rewriting extended keys.
652 { // Alt+BackSpace -> Delete 650 static const KeyboardRemapping kAvoidRemappings[] = {
651 { // Alt+Backspace
653 XK_BackSpace, 652 XK_BackSpace,
653 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask,
654 XK_BackSpace, ui::VKEY_BACK,
654 ui::EF_ALT_DOWN, Mod1Mask, 655 ui::EF_ALT_DOWN, Mod1Mask,
655 XK_Delete, ui::VKEY_DELETE,
656 }, 656 },
657 { // Control+Alt+Up -> Home 657 { // Control+Alt+Up
658 XK_Up, 658 XK_Up,
659 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
660 Mod1Mask | ControlMask | Mod4Mask,
661 XK_Up, ui::VKEY_UP,
659 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, 662 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask,
660 XK_Home, ui::VKEY_HOME,
661 }, 663 },
662 { // Alt+Up -> Prior (aka PageUp) 664 { // Alt+Up
663 XK_Up, 665 XK_Up,
666 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask,
667 XK_Up, ui::VKEY_UP,
664 ui::EF_ALT_DOWN, Mod1Mask, 668 ui::EF_ALT_DOWN, Mod1Mask,
665 XK_Prior, ui::VKEY_PRIOR,
666 }, 669 },
667 { // Control+Alt+Down -> End 670 { // Control+Alt+Down
668 XK_Down, 671 XK_Down,
672 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
673 Mod1Mask | ControlMask | Mod4Mask,
674 XK_Down, ui::VKEY_DOWN,
669 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask, 675 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask,
670 XK_End, ui::VKEY_END,
671 }, 676 },
672 { // Alt+Down -> Next (aka PageDown) 677 { // Alt+Down
673 XK_Down, 678 XK_Down,
679 ui::EF_ALT_DOWN, Mod1Mask | Mod4Mask,
680 XK_Down, ui::VKEY_DOWN,
674 ui::EF_ALT_DOWN, Mod1Mask, 681 ui::EF_ALT_DOWN, Mod1Mask,
675 XK_Next, ui::VKEY_NEXT,
676 } 682 }
677 }; 683 };
678 684
679 RewriteWithKeyboardRemappingsByKeySym(remappings, 685 RewriteWithKeyboardRemappingsByKeySym(kAvoidRemappings,
680 arraysize(remappings), 686 arraysize(kAvoidRemappings),
681 keysym, 687 keysym,
682 xkey->state, 688 xkey->state,
683 event->flags(), 689 event->flags(),
684 &remapped_native_keysym, 690 &remapped_native_keysym,
685 &remapped_native_mods, 691 &remapped_native_mods,
686 &remapped_keycode, 692 &remapped_keycode,
687 &remapped_mods); 693 &remapped_mods);
688 } else { 694 }
689 static const KeyboardRemapping remappings[] = { 695
696 if (remapped_keycode == ui::VKEY_UNKNOWN) {
697 static const KeyboardRemapping kSearchRemappings[] = {
690 { // Search+BackSpace -> Delete 698 { // Search+BackSpace -> Delete
691 XK_BackSpace, 699 XK_BackSpace,
692 0, Mod4Mask, 700 0, Mod4Mask,
693 XK_Delete, ui::VKEY_DELETE, 701 XK_Delete, ui::VKEY_DELETE,
702 0, 0
694 }, 703 },
695 { // Search+Left -> Home 704 { // Search+Left -> Home
696 XK_Left, 705 XK_Left,
697 0, Mod4Mask, 706 0, Mod4Mask,
698 XK_Home, ui::VKEY_HOME, 707 XK_Home, ui::VKEY_HOME,
708 0, 0
699 }, 709 },
700 { // Search+Up -> Prior (aka PageUp) 710 { // Search+Up -> Prior (aka PageUp)
701 XK_Up, 711 XK_Up,
702 0, Mod4Mask, 712 0, Mod4Mask,
703 XK_Prior, ui::VKEY_PRIOR, 713 XK_Prior, ui::VKEY_PRIOR,
714 0, 0
704 }, 715 },
705 { // Search+Right -> End 716 { // Search+Right -> End
706 XK_Right, 717 XK_Right,
707 0, Mod4Mask, 718 0, Mod4Mask,
708 XK_End, ui::VKEY_END, 719 XK_End, ui::VKEY_END,
720 0, 0
709 }, 721 },
710 { // Search+Down -> Next (aka PageDown) 722 { // Search+Down -> Next (aka PageDown)
711 XK_Down, 723 XK_Down,
712 0, Mod4Mask, 724 0, Mod4Mask,
713 XK_Next, ui::VKEY_NEXT, 725 XK_Next, ui::VKEY_NEXT,
726 0, 0
714 }, 727 },
715 { // Search+Period -> Insert 728 { // Search+Period -> Insert
716 XK_period, 729 XK_period,
717 0, Mod4Mask, 730 0, Mod4Mask,
718 XK_Insert, ui::VKEY_INSERT, 731 XK_Insert, ui::VKEY_INSERT,
732 0, 0
719 } 733 }
720 }; 734 };
721 735
722 RewriteWithKeyboardRemappingsByKeySym(remappings, 736 RewriteWithKeyboardRemappingsByKeySym(kSearchRemappings,
723 arraysize(remappings), 737 arraysize(kSearchRemappings),
724 keysym, 738 keysym,
725 xkey->state, 739 xkey->state,
726 event->flags(), 740 event->flags(),
741 &remapped_native_keysym,
742 &remapped_native_mods,
743 &remapped_keycode,
744 &remapped_mods);
745 }
746
747 if (remapped_keycode == ui::VKEY_UNKNOWN) {
748 static const KeyboardRemapping kNonSearchRemappings[] = {
749 { // Alt+BackSpace -> Delete
750 XK_BackSpace,
751 ui::EF_ALT_DOWN, Mod1Mask,
752 XK_Delete, ui::VKEY_DELETE,
753 0, 0
754 },
755 { // Control+Alt+Up -> Home
756 XK_Up,
757 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask,
758 XK_Home, ui::VKEY_HOME,
759 0, 0
760 },
761 { // Alt+Up -> Prior (aka PageUp)
762 XK_Up,
763 ui::EF_ALT_DOWN, Mod1Mask,
764 XK_Prior, ui::VKEY_PRIOR,
765 0, 0
766 },
767 { // Control+Alt+Down -> End
768 XK_Down,
769 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, Mod1Mask | ControlMask,
770 XK_End, ui::VKEY_END,
771 0, 0
772 },
773 { // Alt+Down -> Next (aka PageDown)
774 XK_Down,
775 ui::EF_ALT_DOWN, Mod1Mask,
776 XK_Next, ui::VKEY_NEXT,
777 0, 0
778 }
779 };
780
781 RewriteWithKeyboardRemappingsByKeySym(kNonSearchRemappings,
782 arraysize(kNonSearchRemappings),
783 keysym,
784 xkey->state,
785 event->flags(),
727 &remapped_native_keysym, 786 &remapped_native_keysym,
728 &remapped_native_mods, 787 &remapped_native_mods,
729 &remapped_keycode, 788 &remapped_keycode,
730 &remapped_mods); 789 &remapped_mods);
731 } 790 }
732 791
733 if (!remapped_native_keysym || remapped_keycode == ui::VKEY_UNKNOWN) 792 if (remapped_keycode == ui::VKEY_UNKNOWN)
734 return false; 793 return false;
735 794
736 OverwriteEvent(event, 795 OverwriteEvent(event,
737 NativeKeySymToNativeKeycode(remapped_native_keysym), 796 NativeKeySymToNativeKeycode(remapped_native_keysym),
738 remapped_native_mods, 797 remapped_native_mods,
739 remapped_keycode, 798 remapped_keycode,
740 remapped_mods); 799 remapped_mods);
741 return true; 800 return true;
742 #else 801 #else
743 // TODO(yusukes): Support Ash on other platforms if needed. 802 // TODO(yusukes): Support Ash on other platforms if needed.
744 return false; 803 return false;
745 #endif 804 #endif
746 } 805 }
747 806
748 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) { 807 bool EventRewriter::RewriteFunctionKeys(ui::KeyEvent* event) {
749 #if defined(OS_CHROMEOS) 808 #if defined(OS_CHROMEOS)
750 const bool search_as_function_key =
751 CommandLine::ForCurrentProcess()->HasSwitch(
752 switches::kEnableChromebookFunctionKey);
753
754 XEvent* xev = event->native_event(); 809 XEvent* xev = event->native_event();
755 XKeyEvent* xkey = &(xev->xkey); 810 XKeyEvent* xkey = &(xev->xkey);
756 const KeySym keysym = XLookupKeysym(xkey, 0); 811 const KeySym keysym = XLookupKeysym(xkey, 0);
757 812
758 KeySym remapped_native_keysym = 0; 813 KeySym remapped_native_keysym = 0;
759 unsigned int remapped_native_mods = 0; 814 unsigned int remapped_native_mods = 0;
760 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN; 815 ui::KeyboardCode remapped_keycode = ui::VKEY_UNKNOWN;
761 unsigned int remapped_mods = 0; 816 unsigned int remapped_mods = 0;
762 817
763 bool remapped = false; 818 if (xkey->state & Mod4Mask) {
764
765 if (search_as_function_key && xkey->state & Mod4Mask) {
766 // Allow Search to avoid rewriting F1-F12. 819 // Allow Search to avoid rewriting F1-F12.
767 static const KeyboardRemapping kFkeysToFkeys[] = { 820 static const KeyboardRemapping kFkeysToFkeys[] = {
768 { XK_F1, 0, Mod4Mask, XK_F1, ui::VKEY_F1, }, 821 { XK_F1, 0, Mod4Mask, XK_F1, ui::VKEY_F1, },
769 { XK_F2, 0, Mod4Mask, XK_F2, ui::VKEY_F2, }, 822 { XK_F2, 0, Mod4Mask, XK_F2, ui::VKEY_F2, },
770 { XK_F3, 0, Mod4Mask, XK_F3, ui::VKEY_F3, }, 823 { XK_F3, 0, Mod4Mask, XK_F3, ui::VKEY_F3, },
771 { XK_F4, 0, Mod4Mask, XK_F4, ui::VKEY_F4, }, 824 { XK_F4, 0, Mod4Mask, XK_F4, ui::VKEY_F4, },
772 { XK_F5, 0, Mod4Mask, XK_F5, ui::VKEY_F5, }, 825 { XK_F5, 0, Mod4Mask, XK_F5, ui::VKEY_F5, },
773 { XK_F6, 0, Mod4Mask, XK_F6, ui::VKEY_F6, }, 826 { XK_F6, 0, Mod4Mask, XK_F6, ui::VKEY_F6, },
774 { XK_F7, 0, Mod4Mask, XK_F7, ui::VKEY_F7, }, 827 { XK_F7, 0, Mod4Mask, XK_F7, ui::VKEY_F7, },
775 { XK_F8, 0, Mod4Mask, XK_F8, ui::VKEY_F8, }, 828 { XK_F8, 0, Mod4Mask, XK_F8, ui::VKEY_F8, },
776 { XK_F9, 0, Mod4Mask, XK_F9, ui::VKEY_F9, }, 829 { XK_F9, 0, Mod4Mask, XK_F9, ui::VKEY_F9, },
777 { XK_F10, 0, Mod4Mask, XK_F10, ui::VKEY_F10, }, 830 { XK_F10, 0, Mod4Mask, XK_F10, ui::VKEY_F10, },
778 { XK_F11, 0, Mod4Mask, XK_F11, ui::VKEY_F11, }, 831 { XK_F11, 0, Mod4Mask, XK_F11, ui::VKEY_F11, },
779 { XK_F12, 0, Mod4Mask, XK_F12, ui::VKEY_F12, }, 832 { XK_F12, 0, Mod4Mask, XK_F12, ui::VKEY_F12, },
780 }; 833 };
781 834
782 remapped = 835 RewriteWithKeyboardRemappingsByKeySym(kFkeysToFkeys,
783 RewriteWithKeyboardRemappingsByKeySym(kFkeysToFkeys, 836 arraysize(kFkeysToFkeys),
784 arraysize(kFkeysToFkeys), 837 keysym,
785 keysym, 838 xkey->state,
786 xkey->state, 839 event->flags(),
787 event->flags(), 840 &remapped_native_keysym,
788 &remapped_native_keysym, 841 &remapped_native_mods,
789 &remapped_native_mods, 842 &remapped_keycode,
790 &remapped_keycode, 843 &remapped_mods);
791 &remapped_mods);
792 } 844 }
793 845
794 if (!remapped) { 846 if (remapped_keycode == ui::VKEY_UNKNOWN) {
795 // Rewrite the actual F1-F12 keys on a Chromebook keyboard to special keys. 847 // Rewrite the actual F1-F12 keys on a Chromebook keyboard to special keys.
796 static const KeyboardRemapping kFkeysToSpecialKeys[] = { 848 static const KeyboardRemapping kFkeysToSpecialKeys[] = {
797 { XK_F1, 0, 0, XF86XK_Back, ui::VKEY_BROWSER_BACK, }, 849 { XK_F1, 0, 0, XF86XK_Back, ui::VKEY_BROWSER_BACK, 0, 0 },
798 { XK_F2, 0, 0, XF86XK_Forward, ui::VKEY_BROWSER_FORWARD, }, 850 { XK_F2, 0, 0, XF86XK_Forward, ui::VKEY_BROWSER_FORWARD, 0, 0 },
799 { XK_F3, 0, 0, XF86XK_Reload, ui::VKEY_BROWSER_REFRESH, }, 851 { XK_F3, 0, 0, XF86XK_Reload, ui::VKEY_BROWSER_REFRESH, 0, 0 },
800 { XK_F4, 0, 0, XF86XK_LaunchB, ui::VKEY_MEDIA_LAUNCH_APP2, }, 852 { XK_F4, 0, 0, XF86XK_LaunchB, ui::VKEY_MEDIA_LAUNCH_APP2, 0, 0 },
801 { XK_F5, 0, 0, XF86XK_LaunchA, ui::VKEY_MEDIA_LAUNCH_APP1, }, 853 { XK_F5, 0, 0, XF86XK_LaunchA, ui::VKEY_MEDIA_LAUNCH_APP1, 0, 0 },
802 { XK_F6, 0, 0, XF86XK_MonBrightnessDown, ui::VKEY_BRIGHTNESS_DOWN, }, 854 { XK_F6, 0, 0, XF86XK_MonBrightnessDown, ui::VKEY_BRIGHTNESS_DOWN, 0, 0 },
803 { XK_F7, 0, 0, XF86XK_MonBrightnessUp, ui::VKEY_BRIGHTNESS_UP, }, 855 { XK_F7, 0, 0, XF86XK_MonBrightnessUp, ui::VKEY_BRIGHTNESS_UP, 0, 0 },
804 { XK_F8, 0, 0, XF86XK_AudioMute, ui::VKEY_VOLUME_MUTE, }, 856 { XK_F8, 0, 0, XF86XK_AudioMute, ui::VKEY_VOLUME_MUTE, 0, 0 },
805 { XK_F9, 0, 0, XF86XK_AudioLowerVolume, ui::VKEY_VOLUME_DOWN, }, 857 { XK_F9, 0, 0, XF86XK_AudioLowerVolume, ui::VKEY_VOLUME_DOWN, 0, 0 },
806 { XK_F10, 0, 0, XF86XK_AudioRaiseVolume, ui::VKEY_VOLUME_UP, }, 858 { XK_F10, 0, 0, XF86XK_AudioRaiseVolume, ui::VKEY_VOLUME_UP, 0, 0 },
807 }; 859 };
808 860
809 remapped = 861 RewriteWithKeyboardRemappingsByKeySym(kFkeysToSpecialKeys,
810 RewriteWithKeyboardRemappingsByKeySym(kFkeysToSpecialKeys, 862 arraysize(kFkeysToSpecialKeys),
811 arraysize(kFkeysToSpecialKeys), 863 keysym,
812 keysym, 864 xkey->state,
813 xkey->state, 865 event->flags(),
814 event->flags(), 866 &remapped_native_keysym,
815 &remapped_native_keysym, 867 &remapped_native_mods,
816 &remapped_native_mods, 868 &remapped_keycode,
817 &remapped_keycode, 869 &remapped_mods);
818 &remapped_mods);
819 } 870 }
820 871
821 if (!remapped) { 872 if (remapped_keycode == ui::VKEY_UNKNOWN && xkey->state & Mod4Mask) {
822 // When using Search as a Function key, remap Search+<number> to F<number>. 873 // Remap Search+<number> to F<number>.
823 if (search_as_function_key && xkey->state & Mod4Mask) { 874 // We check the keycode here instead of the keysym, as these keys have
824 // We check the keycode here instead of the keysym, as these keys have 875 // different keysyms when modifiers are pressed, such as shift.
825 // different keysyms when modifiers are pressed, such as shift.
826 876
827 // TODO(danakj): On some i18n keyboards, these choices will be bad and we 877 // TODO(danakj): On some i18n keyboards, these choices will be bad and we
828 // should make layout-specific choices here. For eg. on a french keyboard 878 // should make layout-specific choices here. For eg. on a french keyboard
829 // "-" and "6" are the same key, so F11 will not be accessible. 879 // "-" and "6" are the same key, so F11 will not be accessible.
830 static const KeyboardRemapping kNumberKeysToFkeys[] = { 880 static const KeyboardRemapping kNumberKeysToFkeys[] = {
831 { XK_1, 0, Mod4Mask, XK_F1, ui::VKEY_F1, }, 881 { XK_1, 0, Mod4Mask, XK_F1, ui::VKEY_F1, 0, 0 },
832 { XK_2, 0, Mod4Mask, XK_F2, ui::VKEY_F2, }, 882 { XK_2, 0, Mod4Mask, XK_F2, ui::VKEY_F2, 0, 0 },
833 { XK_3, 0, Mod4Mask, XK_F3, ui::VKEY_F3, }, 883 { XK_3, 0, Mod4Mask, XK_F3, ui::VKEY_F3, 0, 0 },
834 { XK_4, 0, Mod4Mask, XK_F4, ui::VKEY_F4, }, 884 { XK_4, 0, Mod4Mask, XK_F4, ui::VKEY_F4, 0, 0 },
835 { XK_5, 0, Mod4Mask, XK_F5, ui::VKEY_F5, }, 885 { XK_5, 0, Mod4Mask, XK_F5, ui::VKEY_F5, 0, 0 },
836 { XK_6, 0, Mod4Mask, XK_F6, ui::VKEY_F6, }, 886 { XK_6, 0, Mod4Mask, XK_F6, ui::VKEY_F6, 0, 0 },
837 { XK_7, 0, Mod4Mask, XK_F7, ui::VKEY_F7, }, 887 { XK_7, 0, Mod4Mask, XK_F7, ui::VKEY_F7, 0, 0 },
838 { XK_8, 0, Mod4Mask, XK_F8, ui::VKEY_F8, }, 888 { XK_8, 0, Mod4Mask, XK_F8, ui::VKEY_F8, 0, 0 },
839 { XK_9, 0, Mod4Mask, XK_F9, ui::VKEY_F9, }, 889 { XK_9, 0, Mod4Mask, XK_F9, ui::VKEY_F9, 0, 0 },
840 { XK_0, 0, Mod4Mask, XK_F10, ui::VKEY_F10, }, 890 { XK_0, 0, Mod4Mask, XK_F10, ui::VKEY_F10, 0, 0 },
841 { XK_minus, 0, Mod4Mask, XK_F11, ui::VKEY_F11, }, 891 { XK_minus, 0, Mod4Mask, XK_F11, ui::VKEY_F11, 0, 0 },
842 { XK_equal, 0, Mod4Mask, XK_F12, ui::VKEY_F12, } 892 { XK_equal, 0, Mod4Mask, XK_F12, ui::VKEY_F12, 0, 0 }
843 }; 893 };
844 894
845 RewriteWithKeyboardRemappingsByKeyCode(kNumberKeysToFkeys, 895 RewriteWithKeyboardRemappingsByKeyCode(kNumberKeysToFkeys,
846 arraysize(kNumberKeysToFkeys), 896 arraysize(kNumberKeysToFkeys),
847 xkey->keycode, 897 xkey->keycode,
848 xkey->state, 898 xkey->state,
849 event->flags(), 899 event->flags(),
850 &remapped_native_keysym, 900 &remapped_native_keysym,
851 &remapped_native_mods, 901 &remapped_native_mods,
852 &remapped_keycode, 902 &remapped_keycode,
853 &remapped_mods); 903 &remapped_mods);
854 }
855 } 904 }
856 905
857 if (!remapped_native_keysym || remapped_keycode == ui::VKEY_UNKNOWN) 906 if (remapped_keycode == ui::VKEY_UNKNOWN)
858 return false; 907 return false;
859 908
860 OverwriteEvent(event, 909 OverwriteEvent(event,
861 NativeKeySymToNativeKeycode(remapped_native_keysym), 910 NativeKeySymToNativeKeycode(remapped_native_keysym),
862 remapped_native_mods, 911 remapped_native_mods,
863 remapped_keycode, 912 remapped_keycode,
864 remapped_mods); 913 remapped_mods);
865 return true; 914 return true;
866 #else 915 #else
867 // TODO(danakj): Support Ash on other platforms if needed. 916 // TODO(danakj): Support Ash on other platforms if needed.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 const DeviceType type = EventRewriter::GetDeviceType(device_name); 986 const DeviceType type = EventRewriter::GetDeviceType(device_name);
938 if (type == kDeviceAppleKeyboard) { 987 if (type == kDeviceAppleKeyboard) {
939 VLOG(1) << "Apple keyboard '" << device_name << "' connected: " 988 VLOG(1) << "Apple keyboard '" << device_name << "' connected: "
940 << "id=" << device_id; 989 << "id=" << device_id;
941 } 990 }
942 // Always overwrite the existing device_id since the X server may reuse a 991 // Always overwrite the existing device_id since the X server may reuse a
943 // device id for an unattached device. 992 // device id for an unattached device.
944 device_id_to_type_[device_id] = type; 993 device_id_to_type_[device_id] = type;
945 return type; 994 return type;
946 } 995 }
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