OLD | NEW |
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 "ui/events/event.h" | 5 #include "ui/events/event.h" |
6 | 6 |
7 #if defined(USE_X11) | 7 #if defined(USE_X11) |
8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
9 #include <X11/keysym.h> | 9 #include <X11/keysym.h> |
10 #include <X11/Xlib.h> | 10 #include <X11/Xlib.h> |
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 if (is_char_) | 662 if (is_char_) |
663 character_ = native_event.wParam; | 663 character_ = native_event.wParam; |
664 #endif | 664 #endif |
665 } | 665 } |
666 | 666 |
667 KeyEvent::KeyEvent(EventType type, | 667 KeyEvent::KeyEvent(EventType type, |
668 KeyboardCode key_code, | 668 KeyboardCode key_code, |
669 int flags) | 669 int flags) |
670 : Event(type, EventTimeForNow(), flags), | 670 : Event(type, EventTimeForNow(), flags), |
671 key_code_(key_code), | 671 key_code_(key_code), |
672 code_(DomCode::NONE), | 672 code_(KeyboardCodeToDomCode(key_code)), |
673 is_char_(false), | 673 is_char_(false), |
674 platform_keycode_(0), | 674 platform_keycode_(0), |
675 key_(DomKey::NONE), | 675 key_(DomKey::NONE), |
676 character_() { | 676 character_() { |
677 } | 677 } |
678 | 678 |
679 KeyEvent::KeyEvent(EventType type, | 679 KeyEvent::KeyEvent(EventType type, |
680 KeyboardCode key_code, | 680 KeyboardCode key_code, |
681 DomCode code, | 681 DomCode code, |
682 int flags) | 682 int flags) |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
754 // Otherwise, set the dom key as unidentified. | 754 // Otherwise, set the dom key as unidentified. |
755 // Please refer to crbug.com/443889. | 755 // Please refer to crbug.com/443889. |
756 if (character_ != 0) { | 756 if (character_ != 0) { |
757 key_ = DomKey::UNIDENTIFIED; | 757 key_ = DomKey::UNIDENTIFIED; |
758 return; | 758 return; |
759 } | 759 } |
760 #if defined(OS_WIN) | 760 #if defined(OS_WIN) |
761 // Native Windows character events always have is_char_ == true, | 761 // Native Windows character events always have is_char_ == true, |
762 // so this is a synthetic or native keystroke event. | 762 // so this is a synthetic or native keystroke event. |
763 // Therefore, perform only the fallback action. | 763 // Therefore, perform only the fallback action. |
764 GetMeaningFromKeyCode(key_code_, flags(), &key_, &character_); | 764 KeyboardCode dummy_key_code; |
| 765 DomCodeToMeaning(code_, flags(), &key_, &character_, &dummy_key_code); |
765 #elif defined(USE_X11) | 766 #elif defined(USE_X11) |
766 // When a control key is held, prefer ASCII characters to non ASCII | 767 // When a control key is held, prefer ASCII characters to non ASCII |
767 // characters in order to use it for shortcut keys. GetCharacterFromKeyCode | 768 // characters in order to use it for shortcut keys. DomCodeToMeaning |
768 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11. | 769 // returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11. |
769 // GetCharacterFromXEvent returns 'à' in that case. | 770 // GetCharacterFromXEvent returns 'à' in that case. |
770 character_ = (IsControlDown() || !native_event()) ? | 771 if (IsControlDown() || !native_event()) { |
771 GetCharacterFromKeyCode(key_code_, flags()) : | 772 KeyboardCode dummy_key_code; |
772 GetCharacterFromXEvent(native_event()); | 773 DomCodeToMeaning(code_, flags(), &key_, &character_, &dummy_key_code); |
773 // TODO(kpschoedel): set key_ field for X11. | 774 } |
| 775 else { |
| 776 character_ = GetCharacterFromXEvent(native_event()); |
| 777 // TODO(kpschoedel): set key_ field for X11. |
| 778 } |
774 #elif defined(USE_OZONE) | 779 #elif defined(USE_OZONE) |
775 KeyboardCode key_code; | 780 KeyboardCode key_code; |
776 if (!KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup( | 781 if (!KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup( |
777 code_, flags(), &key_, &character_, &key_code, &platform_keycode_)) { | 782 code_, flags(), &key_, &character_, &key_code, &platform_keycode_)) { |
778 GetMeaningFromKeyCode(key_code_, flags(), &key_, &character_); | 783 DomCodeToMeaning(code_, flags(), &key_, &character_, &key_code); |
779 } | 784 } |
780 #else | 785 #else |
781 if (native_event()) { | 786 if (native_event()) { |
782 DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED || | 787 DCHECK(EventTypeFromNative(native_event()) == ET_KEY_PRESSED || |
783 EventTypeFromNative(native_event()) == ET_KEY_RELEASED); | 788 EventTypeFromNative(native_event()) == ET_KEY_RELEASED); |
784 } | 789 } |
785 // TODO(kpschoedel): revise to use DOM code_ instead of Windows key_code_ | 790 KeyboardCode dummy_key_code; |
786 GetMeaningFromKeyCode(key_code_, flags(), &key_, &character_); | 791 DomCodeToMeaning(code_, flags(), &key_, &character_, &dummy_key_code); |
787 #endif | 792 #endif |
788 } | 793 } |
789 | 794 |
790 DomKey KeyEvent::GetDomKey() const { | 795 DomKey KeyEvent::GetDomKey() const { |
791 // Determination of character_ and key_ may be done lazily. | 796 // Determination of character_ and key_ may be done lazily. |
792 if (key_ == DomKey::NONE) | 797 if (key_ == DomKey::NONE) |
793 ApplyLayout(); | 798 ApplyLayout(); |
794 return key_; | 799 return key_; |
795 } | 800 } |
796 | 801 |
797 base::char16 KeyEvent::GetCharacter() const { | 802 base::char16 KeyEvent::GetCharacter() const { |
798 // Determination of character_ and key_ may be done lazily. | 803 // Determination of character_ and key_ may be done lazily. |
799 if (key_ == DomKey::NONE) | 804 if (key_ == DomKey::NONE) |
800 ApplyLayout(); | 805 ApplyLayout(); |
801 return character_; | 806 return character_; |
802 } | 807 } |
803 | 808 |
804 base::char16 KeyEvent::GetText() const { | 809 base::char16 KeyEvent::GetText() const { |
805 if ((flags() & EF_CONTROL_DOWN) != 0) { | 810 if ((flags() & EF_CONTROL_DOWN) != 0) { |
806 // TODO(kpschoedel): revise to use DOM code_ instead of Windows key_code_ | 811 base::char16 character; |
807 return GetControlCharacterForKeycode(key_code_, | 812 ui::DomKey key; |
808 (flags() & EF_SHIFT_DOWN) != 0); | 813 ui::KeyboardCode key_code; |
| 814 if (DomCodeToControlCharacter(code_, flags(), &key, &character, |
| 815 &key_code)) |
| 816 return character; |
809 } | 817 } |
810 return GetUnmodifiedText(); | 818 return GetUnmodifiedText(); |
811 } | 819 } |
812 | 820 |
813 base::char16 KeyEvent::GetUnmodifiedText() const { | 821 base::char16 KeyEvent::GetUnmodifiedText() const { |
814 if (!is_char_ && (key_code_ == VKEY_RETURN)) | 822 if (!is_char_ && (key_code_ == VKEY_RETURN)) |
815 return '\r'; | 823 return '\r'; |
816 return GetCharacter(); | 824 return GetCharacter(); |
817 } | 825 } |
818 | 826 |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
964 gfx::PointF(x, y), | 972 gfx::PointF(x, y), |
965 time_stamp, | 973 time_stamp, |
966 flags | EF_FROM_TOUCH), | 974 flags | EF_FROM_TOUCH), |
967 details_(details) { | 975 details_(details) { |
968 } | 976 } |
969 | 977 |
970 GestureEvent::~GestureEvent() { | 978 GestureEvent::~GestureEvent() { |
971 } | 979 } |
972 | 980 |
973 } // namespace ui | 981 } // namespace ui |
OLD | NEW |