| Index: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| index 3e393dc8b63c28b6fc02bc6c8b6fb37351ba97b3..5307f73754a2200de17fa698c334b2fd6c5bc878 100644
|
| --- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| +++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
|
| @@ -19,7 +19,6 @@
|
| #include "ui/events/keycodes/dom/keycode_converter.h"
|
| #include "ui/events/keycodes/keyboard_code_conversion.h"
|
| #include "ui/events/keycodes/keyboard_code_conversion_xkb.h"
|
| -#include "ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h"
|
|
|
| namespace ui {
|
|
|
| @@ -716,9 +715,8 @@ bool XkbKeyboardLayoutEngine::UsesAltGr() const {
|
| bool XkbKeyboardLayoutEngine::Lookup(DomCode dom_code,
|
| int flags,
|
| DomKey* dom_key,
|
| - base::char16* character,
|
| KeyboardCode* key_code,
|
| - uint32* platform_keycode) const {
|
| + uint32_t* platform_keycode) const {
|
| if (dom_code == DomCode::NONE)
|
| return false;
|
| // Convert DOM physical key to XKB representation.
|
| @@ -732,30 +730,26 @@ bool XkbKeyboardLayoutEngine::Lookup(DomCode dom_code,
|
| xkb_mod_mask_t xkb_flags = EventFlagsToXkbFlags(flags);
|
| // Obtain keysym and character.
|
| xkb_keysym_t xkb_keysym;
|
| - if (!XkbLookup(xkb_keycode, xkb_flags, &xkb_keysym, character))
|
| + uint32_t character = 0;
|
| + if (!XkbLookup(xkb_keycode, xkb_flags, &xkb_keysym, &character))
|
| return false;
|
| *platform_keycode = xkb_keysym;
|
| // Classify the keysym and convert to DOM and VKEY representations.
|
| *dom_key = NonPrintableXKeySymToDomKey(xkb_keysym);
|
| if (*dom_key == DomKey::NONE) {
|
| - *dom_key = CharacterToDomKey(*character);
|
| - *key_code = AlphanumericKeyboardCode(*character);
|
| + *dom_key = DomKey::FromCharacter(character);
|
| + *key_code = AlphanumericKeyboardCode(character);
|
| if (*key_code == VKEY_UNKNOWN) {
|
| *key_code = DifficultKeyboardCode(dom_code, flags, xkb_keycode, xkb_flags,
|
| - xkb_keysym, *dom_key, *character);
|
| - if (*key_code == VKEY_UNKNOWN) {
|
| + xkb_keysym, character);
|
| + if (*key_code == VKEY_UNKNOWN)
|
| *key_code = LocatedToNonLocatedKeyboardCode(
|
| DomCodeToUsLayoutKeyboardCode(dom_code));
|
| - }
|
| }
|
| // If the Control key is down, only allow ASCII control characters to be
|
| // returned, regardless of the key layout. crbug.com/450849
|
| - if ((flags & EF_CONTROL_DOWN) && (*character >= 0x20))
|
| - *character = 0;
|
| - } else if (*dom_key == DomKey::DEAD) {
|
| - *character = DeadXkbKeySymToCombiningCharacter(xkb_keysym);
|
| - *key_code = LocatedToNonLocatedKeyboardCode(
|
| - DomCodeToUsLayoutKeyboardCode(dom_code));
|
| + if ((flags & EF_CONTROL_DOWN) && (character >= 0x20))
|
| + *dom_key = DomKey::UNIDENTIFIED;
|
| } else {
|
| *key_code = NonPrintableDomKeyToKeyboardCode(*dom_key);
|
| if (*key_code == VKEY_UNKNOWN) {
|
| @@ -815,7 +809,7 @@ xkb_mod_mask_t XkbKeyboardLayoutEngine::EventFlagsToXkbFlags(
|
| bool XkbKeyboardLayoutEngine::XkbLookup(xkb_keycode_t xkb_keycode,
|
| xkb_mod_mask_t xkb_flags,
|
| xkb_keysym_t* xkb_keysym,
|
| - base::char16* character) const {
|
| + uint32_t* character) const {
|
| if (!xkb_state_) {
|
| LOG(ERROR) << "No current XKB state";
|
| return false;
|
| @@ -824,9 +818,9 @@ bool XkbKeyboardLayoutEngine::XkbLookup(xkb_keycode_t xkb_keycode,
|
| *xkb_keysym = xkb_state_key_get_one_sym(xkb_state_.get(), xkb_keycode);
|
| if (*xkb_keysym == XKB_KEY_NoSymbol)
|
| return false;
|
| - uint32_t c = xkb_state_key_get_utf32(xkb_state_.get(), xkb_keycode);
|
| - DLOG_IF(ERROR, c != (c & 0xFFFF)) << "Non-BMP character:" << c;
|
| - *character = static_cast<base::char16>(c);
|
| + *character = xkb_state_key_get_utf32(xkb_state_.get(), xkb_keycode);
|
| + DLOG_IF(ERROR, *character != (*character & 0xFFFF))
|
| + << "Non-BMP character:" << *character;
|
| return true;
|
| }
|
|
|
| @@ -836,19 +830,18 @@ KeyboardCode XkbKeyboardLayoutEngine::DifficultKeyboardCode(
|
| xkb_keycode_t xkb_keycode,
|
| xkb_mod_mask_t xkb_flags,
|
| xkb_keysym_t xkb_keysym,
|
| - DomKey dom_key,
|
| base::char16 character) const {
|
| // Get the layout interpretation without modifiers, so that
|
| // e.g. Ctrl+D correctly generates VKEY_D.
|
| xkb_keysym_t plain_keysym;
|
| - base::char16 plain_character;
|
| + uint32_t plain_character;
|
| if (!XkbLookup(xkb_keycode, 0, &plain_keysym, &plain_character))
|
| return VKEY_UNKNOWN;
|
|
|
| // If the plain key is non-printable, that determines the VKEY.
|
| DomKey plain_key = NonPrintableXKeySymToDomKey(plain_keysym);
|
| if (plain_key != ui::DomKey::NONE)
|
| - return NonPrintableDomKeyToKeyboardCode(dom_key);
|
| + return NonPrintableDomKeyToKeyboardCode(plain_key);
|
|
|
| // Plain ASCII letters and digits map directly to VKEY values.
|
| KeyboardCode key_code = AlphanumericKeyboardCode(plain_character);
|
| @@ -911,7 +904,7 @@ base::char16 XkbKeyboardLayoutEngine::XkbSubCharacter(
|
| if (flags == base_flags)
|
| return base_character;
|
| xkb_keysym_t keysym;
|
| - base::char16 character = 0;
|
| + uint32_t character = 0;
|
| if (!XkbLookup(xkb_keycode, flags, &keysym, &character))
|
| character = kNone;
|
| return character;
|
|
|