| 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 |