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

Side by Side Diff: ui/events/event.cc

Issue 841263005: Use DOM- rather than Windows-based key code for non-layout cases. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months 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
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 "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
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
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
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
OLDNEW
« no previous file with comments | « no previous file | ui/events/event_unittest.cc » ('j') | ui/events/keycodes/keyboard_code_conversion.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698