summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/chromeos/events/event_rewriter.cc296
-rw-r--r--chrome/browser/chromeos/events/event_rewriter.h5
-rw-r--r--chrome/browser/chromeos/events/event_rewriter_unittest.cc2291
-rw-r--r--chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc1
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine.cc10
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/test/chromedriver/BUILD.gn1
-rw-r--r--chrome/test/chromedriver/keycode_text_conversion_ozone.cc11
-rw-r--r--content/browser/renderer_host/web_input_event_aura_unittest.cc4
-rw-r--r--ui/base/ime/chromeos/character_composer.cc19
-rw-r--r--ui/base/ime/chromeos/character_composer.h11
-rw-r--r--ui/base/ime/chromeos/character_composer_unittest.cc5
-rw-r--r--ui/events/event.cc70
-rw-r--r--ui/events/event.h90
-rw-r--r--ui/events/keycodes/dom/dom_key.h145
-rw-r--r--ui/events/keycodes/dom/dom_key_data.inc40
-rw-r--r--ui/events/keycodes/dom/keycode_converter.cc52
-rw-r--r--ui/events/keycodes/dom/keycode_converter.h11
-rw-r--r--ui/events/keycodes/dom/keycode_converter_unittest.cc64
-rw-r--r--ui/events/keycodes/dom_us_layout_data.h23
-rw-r--r--ui/events/keycodes/keyboard_code_conversion.cc406
-rw-r--r--ui/events/keycodes/keyboard_code_conversion.h23
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_unittest.cc544
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_x.cc6
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_x.h6
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_xkb.cc80
-rw-r--r--ui/events/keycodes/keyboard_code_conversion_xkb.h3
-rw-r--r--ui/events/ozone/BUILD.gn2
-rw-r--r--ui/events/ozone/evdev/keyboard_evdev.cc5
-rw-r--r--ui/events/ozone/events_ozone.gyp2
-rw-r--r--ui/events/ozone/layout/keyboard_layout_engine.h3
-rw-r--r--ui/events/ozone/layout/layout_util.h3
-rw-r--r--ui/events/ozone/layout/no/no_keyboard_layout_engine.cc1
-rw-r--r--ui/events/ozone/layout/no/no_keyboard_layout_engine.h1
-rw-r--r--ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc4
-rw-r--r--ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h1
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.cc84
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h27
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc39
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h6
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc12
-rw-r--r--ui/keyboard/keyboard_util.cc20
42 files changed, 1778 insertions, 2650 deletions
diff --git a/chrome/browser/chromeos/events/event_rewriter.cc b/chrome/browser/chromeos/events/event_rewriter.cc
index 69c2cfc..7f6bf10 100644
--- a/chrome/browser/chromeos/events/event_rewriter.cc
+++ b/chrome/browser/chromeos/events/event_rewriter.cc
@@ -81,60 +81,40 @@ const struct ModifierRemapping {
ui::EF_CONTROL_DOWN,
input_method::kControlKey,
prefs::kLanguageRemapControlKeyTo,
- {ui::EF_CONTROL_DOWN,
- ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL,
- 0,
+ {ui::EF_CONTROL_DOWN, ui::DomCode::CONTROL_LEFT, ui::DomKey::CONTROL,
ui::VKEY_CONTROL}},
{// kModifierRemappingNeoMod3 references this entry by index.
ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN,
input_method::kNumModifierKeys,
nullptr,
- {ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN,
- ui::DomCode::CAPS_LOCK,
- ui::DomKey::ALT_GRAPH,
- 0,
- ui::VKEY_ALTGR}},
+ {ui::EF_MOD3_DOWN | ui::EF_ALTGR_DOWN, ui::DomCode::CAPS_LOCK,
+ ui::DomKey::ALT_GRAPH, ui::VKEY_ALTGR}},
{ui::EF_COMMAND_DOWN,
input_method::kSearchKey,
prefs::kLanguageRemapSearchKeyTo,
- {ui::EF_COMMAND_DOWN,
- ui::DomCode::OS_LEFT,
- ui::DomKey::OS,
- 0,
+ {ui::EF_COMMAND_DOWN, ui::DomCode::OS_LEFT, ui::DomKey::OS,
ui::VKEY_LWIN}},
{ui::EF_ALT_DOWN,
input_method::kAltKey,
prefs::kLanguageRemapAltKeyTo,
- {ui::EF_ALT_DOWN,
- ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT,
- 0,
- ui::VKEY_MENU}},
+ {ui::EF_ALT_DOWN, ui::DomCode::ALT_LEFT, ui::DomKey::ALT, ui::VKEY_MENU}},
{ui::EF_NONE,
input_method::kVoidKey,
nullptr,
- {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}},
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::NONE, ui::VKEY_UNKNOWN}},
{ui::EF_MOD3_DOWN,
input_method::kCapsLockKey,
prefs::kLanguageRemapCapsLockKeyTo,
- {ui::EF_MOD3_DOWN,
- ui::DomCode::CAPS_LOCK,
- ui::DomKey::CAPS_LOCK,
- 0,
+ {ui::EF_MOD3_DOWN, ui::DomCode::CAPS_LOCK, ui::DomKey::CAPS_LOCK,
ui::VKEY_CAPITAL}},
{ui::EF_NONE,
input_method::kEscapeKey,
nullptr,
- {ui::EF_NONE,
- ui::DomCode::ESCAPE,
- ui::DomKey::ESCAPE,
- 0,
- ui::VKEY_ESCAPE}},
+ {ui::EF_NONE, ui::DomCode::ESCAPE, ui::DomKey::ESCAPE, ui::VKEY_ESCAPE}},
{ui::EF_NONE,
input_method::kNumModifierKeys,
prefs::kLanguageRemapDiamondKeyTo,
- {ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, 0, ui::VKEY_F15}}};
+ {ui::EF_NONE, ui::DomCode::F15, ui::DomKey::F15, ui::VKEY_F15}}};
const ModifierRemapping* kModifierRemappingCtrl = &kModifierRemappings[0];
const ModifierRemapping* kModifierRemappingNeoMod3 = &kModifierRemappings[1];
@@ -250,10 +230,8 @@ void ApplyRemapping(const EventRewriter::MutableKeyState& changes,
state->flags |= changes.flags;
if (changes.code != ui::DomCode::NONE)
state->code = changes.code;
- if (changes.key != ui::DomKey::NONE) {
+ if (changes.key != ui::DomKey::NONE)
state->key = changes.key;
- state->character = changes.character;
- }
if (changes.key_code != ui::VKEY_UNKNOWN)
state->key_code = changes.key_code;
}
@@ -283,7 +261,6 @@ void SetMeaningForLayout(ui::EventType type,
// current physical state, and extracting the layout results.
ui::KeyEvent key(type, state->key_code, state->code, state->flags);
state->key = key.GetDomKey();
- state->character = key.GetCharacter();
}
ui::DomCode RelocateModifier(ui::DomCode code, ui::DomKeyLocation location) {
@@ -319,8 +296,7 @@ EventRewriter::EventRewriter(ash::StickyKeysController* sticky_keys_controller)
latched_modifier_latches_(ui::EF_NONE),
used_modifier_latches_(ui::EF_NONE) {}
-EventRewriter::~EventRewriter() {
-}
+EventRewriter::~EventRewriter() {}
EventRewriter::DeviceType EventRewriter::KeyboardDeviceAddedForTesting(
int device_id,
@@ -385,9 +361,9 @@ void EventRewriter::BuildRewrittenKeyEvent(
const ui::KeyEvent& key_event,
const MutableKeyState& state,
scoped_ptr<ui::Event>* rewritten_event) {
- ui::KeyEvent* rewritten_key_event = new ui::KeyEvent(
- key_event.type(), state.key_code, state.code, state.flags, state.key,
- state.character, key_event.time_stamp());
+ ui::KeyEvent* rewritten_key_event =
+ new ui::KeyEvent(key_event.type(), state.key_code, state.code,
+ state.flags, state.key, key_event.time_stamp());
rewritten_event->reset(rewritten_key_event);
}
@@ -516,11 +492,8 @@ ui::EventRewriteStatus EventRewriter::RewriteKeyEvent(
return ui::EVENT_REWRITE_DISCARD;
}
- MutableKeyState state = {key_event.flags(),
- key_event.code(),
- key_event.GetDomKey(),
- key_event.GetCharacter(),
- key_event.key_code()};
+ MutableKeyState state = {key_event.flags(), key_event.code(),
+ key_event.GetDomKey(), key_event.key_code()};
// Do not rewrite an event sent by ui_controls::SendKeyPress(). See
// crbug.com/136465.
@@ -808,7 +781,6 @@ bool EventRewriter::RewriteModifierKeys(const ui::KeyEvent& key_event,
state->key_code = remapped_key->result.key_code;
state->code = remapped_key->result.code;
state->key = remapped_key->result.key;
- state->character = remapped_key->result.character;
incoming.flags |= characteristic_flag;
characteristic_flag = remapped_key->flag;
state->code = RelocateModifier(
@@ -855,72 +827,40 @@ void EventRewriter::RewriteNumPadKeys(const ui::KeyEvent& key_event,
static const struct NumPadRemapping {
ui::KeyboardCode input_key_code;
EventRewriter::MutableKeyState result;
- } kNumPadRemappings[] = {{ui::VKEY_DELETE,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '.',
- ui::VKEY_DECIMAL}},
- {ui::VKEY_INSERT,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '0',
- ui::VKEY_NUMPAD0}},
- {ui::VKEY_END,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '1',
- ui::VKEY_NUMPAD1}},
- {ui::VKEY_DOWN,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '2',
- ui::VKEY_NUMPAD2}},
- {ui::VKEY_NEXT,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '3',
- ui::VKEY_NUMPAD3}},
- {ui::VKEY_LEFT,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '4',
- ui::VKEY_NUMPAD4}},
- {ui::VKEY_CLEAR,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '5',
- ui::VKEY_NUMPAD5}},
- {ui::VKEY_RIGHT,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '6',
- ui::VKEY_NUMPAD6}},
- {ui::VKEY_HOME,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '7',
- ui::VKEY_NUMPAD7}},
- {ui::VKEY_UP,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '8',
- ui::VKEY_NUMPAD8}},
- {ui::VKEY_PRIOR,
- {ui::EF_NONE,
- ui::DomCode::NONE,
- ui::DomKey::CHARACTER,
- '9',
- ui::VKEY_NUMPAD9}}};
+ } kNumPadRemappings[] = {
+ {ui::VKEY_DELETE,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'.'>::Character,
+ ui::VKEY_DECIMAL}},
+ {ui::VKEY_INSERT,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'0'>::Character,
+ ui::VKEY_NUMPAD0}},
+ {ui::VKEY_END,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'1'>::Character,
+ ui::VKEY_NUMPAD1}},
+ {ui::VKEY_DOWN,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'2'>::Character,
+ ui::VKEY_NUMPAD2}},
+ {ui::VKEY_NEXT,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'3'>::Character,
+ ui::VKEY_NUMPAD3}},
+ {ui::VKEY_LEFT,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'4'>::Character,
+ ui::VKEY_NUMPAD4}},
+ {ui::VKEY_CLEAR,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'5'>::Character,
+ ui::VKEY_NUMPAD5}},
+ {ui::VKEY_RIGHT,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'6'>::Character,
+ ui::VKEY_NUMPAD6}},
+ {ui::VKEY_HOME,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'7'>::Character,
+ ui::VKEY_NUMPAD7}},
+ {ui::VKEY_UP,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'8'>::Character,
+ ui::VKEY_NUMPAD8}},
+ {ui::VKEY_PRIOR,
+ {ui::EF_NONE, ui::DomCode::NONE, ui::DomKey::Constant<'9'>::Character,
+ ui::VKEY_NUMPAD9}}};
for (const auto& map : kNumPadRemappings) {
if (state->key_code == map.input_key_code) {
if (ui::KeycodeConverter::DomCodeToLocation(state->code) ==
@@ -944,20 +884,17 @@ void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
// For these, we only remove the EF_COMMAND_DOWN flag.
static const KeyboardRemapping::Condition kAvoidRemappings[] = {
{// Alt+Backspace
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::VKEY_BACK},
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_BACK},
{// Control+Alt+Up
ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN,
ui::VKEY_UP},
{// Alt+Up
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::VKEY_UP},
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_UP},
{// Control+Alt+Down
ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_COMMAND_DOWN,
ui::VKEY_DOWN},
{// Alt+Down
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::VKEY_DOWN}};
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::VKEY_DOWN}};
for (const auto& condition : kAvoidRemappings) {
if (MatchKeyboardRemapping(*state, condition)) {
state->flags = incoming.flags & ~ui::EF_COMMAND_DOWN;
@@ -970,37 +907,24 @@ void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
static const KeyboardRemapping kSearchRemappings[] = {
{// Search+BackSpace -> Delete
{ui::EF_COMMAND_DOWN, ui::VKEY_BACK},
- {ui::EF_NONE,
- ui::DomCode::DEL,
- ui::DomKey::DEL,
- 0x7F,
- ui::VKEY_DELETE}},
+ {ui::EF_NONE, ui::DomCode::DEL, ui::DomKey::DEL, ui::VKEY_DELETE}},
{// Search+Left -> Home
{ui::EF_COMMAND_DOWN, ui::VKEY_LEFT},
- {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, 0, ui::VKEY_HOME}},
+ {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, ui::VKEY_HOME}},
{// Search+Up -> Prior (aka PageUp)
{ui::EF_COMMAND_DOWN, ui::VKEY_UP},
- {ui::EF_NONE,
- ui::DomCode::PAGE_UP,
- ui::DomKey::PAGE_UP,
- 0,
+ {ui::EF_NONE, ui::DomCode::PAGE_UP, ui::DomKey::PAGE_UP,
ui::VKEY_PRIOR}},
{// Search+Right -> End
{ui::EF_COMMAND_DOWN, ui::VKEY_RIGHT},
- {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, 0, ui::VKEY_END}},
+ {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, ui::VKEY_END}},
{// Search+Down -> Next (aka PageDown)
{ui::EF_COMMAND_DOWN, ui::VKEY_DOWN},
- {ui::EF_NONE,
- ui::DomCode::PAGE_DOWN,
- ui::DomKey::PAGE_DOWN,
- 0,
+ {ui::EF_NONE, ui::DomCode::PAGE_DOWN, ui::DomKey::PAGE_DOWN,
ui::VKEY_NEXT}},
{// Search+Period -> Insert
{ui::EF_COMMAND_DOWN, ui::VKEY_OEM_PERIOD},
- {ui::EF_NONE,
- ui::DomCode::INSERT,
- ui::DomKey::INSERT,
- 0,
+ {ui::EF_NONE, ui::DomCode::INSERT, ui::DomKey::INSERT,
ui::VKEY_INSERT}}};
if (RewriteWithKeyboardRemappings(
kSearchRemappings, arraysize(kSearchRemappings), incoming, state)) {
@@ -1012,30 +936,20 @@ void EventRewriter::RewriteExtendedKeys(const ui::KeyEvent& key_event,
static const KeyboardRemapping kNonSearchRemappings[] = {
{// Alt+BackSpace -> Delete
{ui::EF_ALT_DOWN, ui::VKEY_BACK},
- {ui::EF_NONE,
- ui::DomCode::DEL,
- ui::DomKey::DEL,
- 0x7F,
- ui::VKEY_DELETE}},
+ {ui::EF_NONE, ui::DomCode::DEL, ui::DomKey::DEL, ui::VKEY_DELETE}},
{// Control+Alt+Up -> Home
{ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_UP},
- {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, 0, ui::VKEY_HOME}},
+ {ui::EF_NONE, ui::DomCode::HOME, ui::DomKey::HOME, ui::VKEY_HOME}},
{// Alt+Up -> Prior (aka PageUp)
{ui::EF_ALT_DOWN, ui::VKEY_UP},
- {ui::EF_NONE,
- ui::DomCode::PAGE_UP,
- ui::DomKey::PAGE_UP,
- 0,
+ {ui::EF_NONE, ui::DomCode::PAGE_UP, ui::DomKey::PAGE_UP,
ui::VKEY_PRIOR}},
{// Control+Alt+Down -> End
{ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DOWN},
- {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, 0, ui::VKEY_END}},
+ {ui::EF_NONE, ui::DomCode::END, ui::DomKey::END, ui::VKEY_END}},
{// Alt+Down -> Next (aka PageDown)
{ui::EF_ALT_DOWN, ui::VKEY_DOWN},
- {ui::EF_NONE,
- ui::DomCode::PAGE_DOWN,
- ui::DomKey::PAGE_DOWN,
- 0,
+ {ui::EF_NONE, ui::DomCode::PAGE_DOWN, ui::DomKey::PAGE_DOWN,
ui::VKEY_NEXT}}};
if (RewriteWithKeyboardRemappings(kNonSearchRemappings,
arraysize(kNonSearchRemappings), incoming,
@@ -1067,64 +981,34 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
// Rewrite the F1-F12 keys on a Chromebook keyboard to system keys.
static const KeyboardRemapping kFkeysToSystemKeys[] = {
{{ui::EF_NONE, ui::VKEY_F1},
- {ui::EF_NONE,
- ui::DomCode::BROWSER_BACK,
- ui::DomKey::BROWSER_BACK,
- 0,
+ {ui::EF_NONE, ui::DomCode::BROWSER_BACK, ui::DomKey::BROWSER_BACK,
ui::VKEY_BROWSER_BACK}},
{{ui::EF_NONE, ui::VKEY_F2},
- {ui::EF_NONE,
- ui::DomCode::BROWSER_FORWARD,
- ui::DomKey::BROWSER_FORWARD,
- 0,
- ui::VKEY_BROWSER_FORWARD}},
+ {ui::EF_NONE, ui::DomCode::BROWSER_FORWARD,
+ ui::DomKey::BROWSER_FORWARD, ui::VKEY_BROWSER_FORWARD}},
{{ui::EF_NONE, ui::VKEY_F3},
- {ui::EF_NONE,
- ui::DomCode::BROWSER_REFRESH,
- ui::DomKey::BROWSER_REFRESH,
- 0,
- ui::VKEY_BROWSER_REFRESH}},
+ {ui::EF_NONE, ui::DomCode::BROWSER_REFRESH,
+ ui::DomKey::BROWSER_REFRESH, ui::VKEY_BROWSER_REFRESH}},
{{ui::EF_NONE, ui::VKEY_F4},
- {ui::EF_NONE,
- ui::DomCode::ZOOM_TOGGLE,
- ui::DomKey::ZOOM_TOGGLE,
- 0,
+ {ui::EF_NONE, ui::DomCode::ZOOM_TOGGLE, ui::DomKey::ZOOM_TOGGLE,
ui::VKEY_MEDIA_LAUNCH_APP2}},
{{ui::EF_NONE, ui::VKEY_F5},
- {ui::EF_NONE,
- ui::DomCode::SELECT_TASK,
- ui::DomKey::LAUNCH_MY_COMPUTER,
- 0,
- ui::VKEY_MEDIA_LAUNCH_APP1}},
+ {ui::EF_NONE, ui::DomCode::SELECT_TASK,
+ ui::DomKey::LAUNCH_MY_COMPUTER, ui::VKEY_MEDIA_LAUNCH_APP1}},
{{ui::EF_NONE, ui::VKEY_F6},
- {ui::EF_NONE,
- ui::DomCode::BRIGHTNESS_DOWN,
- ui::DomKey::BRIGHTNESS_DOWN,
- 0,
- ui::VKEY_BRIGHTNESS_DOWN}},
+ {ui::EF_NONE, ui::DomCode::BRIGHTNESS_DOWN,
+ ui::DomKey::BRIGHTNESS_DOWN, ui::VKEY_BRIGHTNESS_DOWN}},
{{ui::EF_NONE, ui::VKEY_F7},
- {ui::EF_NONE,
- ui::DomCode::BRIGHTNESS_UP,
- ui::DomKey::BRIGHTNESS_UP,
- 0,
+ {ui::EF_NONE, ui::DomCode::BRIGHTNESS_UP, ui::DomKey::BRIGHTNESS_UP,
ui::VKEY_BRIGHTNESS_UP}},
{{ui::EF_NONE, ui::VKEY_F8},
- {ui::EF_NONE,
- ui::DomCode::VOLUME_MUTE,
- ui::DomKey::VOLUME_MUTE,
- 0,
+ {ui::EF_NONE, ui::DomCode::VOLUME_MUTE, ui::DomKey::VOLUME_MUTE,
ui::VKEY_VOLUME_MUTE}},
{{ui::EF_NONE, ui::VKEY_F9},
- {ui::EF_NONE,
- ui::DomCode::VOLUME_DOWN,
- ui::DomKey::VOLUME_DOWN,
- 0,
+ {ui::EF_NONE, ui::DomCode::VOLUME_DOWN, ui::DomKey::VOLUME_DOWN,
ui::VKEY_VOLUME_DOWN}},
{{ui::EF_NONE, ui::VKEY_F10},
- {ui::EF_NONE,
- ui::DomCode::VOLUME_UP,
- ui::DomKey::VOLUME_UP,
- 0,
+ {ui::EF_NONE, ui::DomCode::VOLUME_UP, ui::DomKey::VOLUME_UP,
ui::VKEY_VOLUME_UP}},
};
MutableKeyState incoming_without_command = *state;
@@ -1150,29 +1034,29 @@ void EventRewriter::RewriteFunctionKeys(const ui::KeyEvent& key_event,
EventRewriter::MutableKeyState result;
} kNumberKeysToFkeys[] = {
{ui::DomCode::DIGIT1,
- {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, 0, ui::VKEY_F1}},
+ {ui::EF_NONE, ui::DomCode::F1, ui::DomKey::F1, ui::VKEY_F1}},
{ui::DomCode::DIGIT2,
- {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, 0, ui::VKEY_F2}},
+ {ui::EF_NONE, ui::DomCode::F2, ui::DomKey::F2, ui::VKEY_F2}},
{ui::DomCode::DIGIT3,
- {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, 0, ui::VKEY_F3}},
+ {ui::EF_NONE, ui::DomCode::F3, ui::DomKey::F3, ui::VKEY_F3}},
{ui::DomCode::DIGIT4,
- {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, 0, ui::VKEY_F4}},
+ {ui::EF_NONE, ui::DomCode::F4, ui::DomKey::F4, ui::VKEY_F4}},
{ui::DomCode::DIGIT5,
- {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, 0, ui::VKEY_F5}},
+ {ui::EF_NONE, ui::DomCode::F5, ui::DomKey::F5, ui::VKEY_F5}},
{ui::DomCode::DIGIT6,
- {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, 0, ui::VKEY_F6}},
+ {ui::EF_NONE, ui::DomCode::F6, ui::DomKey::F6, ui::VKEY_F6}},
{ui::DomCode::DIGIT7,
- {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, 0, ui::VKEY_F7}},
+ {ui::EF_NONE, ui::DomCode::F7, ui::DomKey::F7, ui::VKEY_F7}},
{ui::DomCode::DIGIT8,
- {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, 0, ui::VKEY_F8}},
+ {ui::EF_NONE, ui::DomCode::F8, ui::DomKey::F8, ui::VKEY_F8}},
{ui::DomCode::DIGIT9,
- {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, 0, ui::VKEY_F9}},
+ {ui::EF_NONE, ui::DomCode::F9, ui::DomKey::F9, ui::VKEY_F9}},
{ui::DomCode::DIGIT0,
- {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, 0, ui::VKEY_F10}},
+ {ui::EF_NONE, ui::DomCode::F10, ui::DomKey::F10, ui::VKEY_F10}},
{ui::DomCode::MINUS,
- {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, 0, ui::VKEY_F11}},
+ {ui::EF_NONE, ui::DomCode::F11, ui::DomKey::F11, ui::VKEY_F11}},
{ui::DomCode::EQUAL,
- {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, 0, ui::VKEY_F12}}};
+ {ui::EF_NONE, ui::DomCode::F12, ui::DomKey::F12, ui::VKEY_F12}}};
for (const auto& map : kNumberKeysToFkeys) {
if (state->code == map.input_dom_code) {
state->flags &= ~ui::EF_COMMAND_DOWN;
diff --git a/chrome/browser/chromeos/events/event_rewriter.h b/chrome/browser/chromeos/events/event_rewriter.h
index 1c3f01a..8235279 100644
--- a/chrome/browser/chromeos/events/event_rewriter.h
+++ b/chrome/browser/chromeos/events/event_rewriter.h
@@ -14,6 +14,7 @@
#include "base/memory/scoped_ptr.h"
#include "ui/events/event.h"
#include "ui/events/event_rewriter.h"
+#include "ui/events/keycodes/dom/dom_key.h"
class PrefService;
@@ -23,7 +24,6 @@ class StickyKeysController;
namespace ui {
enum class DomCode;
-enum class DomKey;
};
namespace chromeos {
@@ -54,8 +54,7 @@ class EventRewriter : public ui::EventRewriter {
struct MutableKeyState {
int flags;
ui::DomCode code;
- ui::DomKey key;
- base::char16 character;
+ ui::DomKey::Base key;
ui::KeyboardCode key_code;
};
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 23e06aa..7b5b2b4 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -57,18 +57,17 @@ std::string GetExpectedResultAsString(ui::EventType ui_type,
ui::KeyboardCode ui_keycode,
ui::DomCode code,
int ui_flags, // ui::EventFlags
- ui::DomKey key,
- base::char16 character) {
+ ui::DomKey key) {
return base::StringPrintf(
- "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%03X c=0x%02X", ui_type,
+ "type=%d code=0x%06X flags=0x%X vk=0x%02X key=0x%08X", ui_type,
static_cast<unsigned int>(code), ui_flags & ~ui::EF_IS_REPEAT, ui_keycode,
- static_cast<unsigned int>(key), character);
+ static_cast<unsigned int>(key));
}
std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) {
- return GetExpectedResultAsString(
- keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(),
- keyevent.GetDomKey(), keyevent.GetCharacter());
+ return GetExpectedResultAsString(keyevent.type(), keyevent.key_code(),
+ keyevent.code(), keyevent.flags(),
+ keyevent.GetDomKey());
}
std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
@@ -76,9 +75,8 @@ std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
ui::KeyboardCode ui_keycode,
ui::DomCode code,
int ui_flags, // ui::EventFlags
- ui::DomKey key,
- base::char16 character) {
- const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character,
+ ui::DomKey key) {
+ const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key,
ui::EventTimeForNow());
scoped_ptr<ui::Event> new_event;
rewriter->RewriteEvent(event, &new_event);
@@ -95,15 +93,14 @@ struct KeyTestCase {
ui::KeyboardCode key_code;
ui::DomCode code;
int flags; // ui::EventFlags
- ui::DomKey key;
- base::char16 character;
+ ui::DomKey::Base key;
} input, expected;
};
std::string GetTestCaseAsString(ui::EventType ui_type,
const KeyTestCase::Event& test) {
return GetExpectedResultAsString(ui_type, test.key_code, test.code,
- test.flags, test.key, test.character);
+ test.flags, test.key);
}
// Tests a single stateless key rewrite operation.
@@ -111,10 +108,9 @@ void CheckKeyTestCase(chromeos::EventRewriter* rewriter,
const KeyTestCase& test) {
SCOPED_TRACE("\nSource: " + GetTestCaseAsString(test.type, test.input));
std::string expected = GetTestCaseAsString(test.type, test.expected);
- EXPECT_EQ(expected,
- GetRewrittenEventAsString(rewriter, test.type, test.input.key_code,
- test.input.code, test.input.flags,
- test.input.key, test.input.character));
+ EXPECT_EQ(expected, GetRewrittenEventAsString(
+ rewriter, test.type, test.input.key_code,
+ test.input.code, test.input.flags, test.input.key));
}
} // namespace
@@ -173,68 +169,38 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
KeyTestCase pc_keyboard_tests[] = {
// VKEY_A, Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::UNIDENTIFIED}},
// VKEY_A, Win modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED}},
// VKEY_A, Alt+Win modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED}},
// VKEY_LWIN (left Windows key), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}},
// VKEY_RWIN (right Windows key), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RWIN,
- ui::DomCode::OS_RIGHT,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_RWIN,
- ui::DomCode::OS_RIGHT,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS},
+ {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}},
};
for (const auto& test : pc_keyboard_tests) {
@@ -248,68 +214,38 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
KeyTestCase apple_keyboard_tests[] = {
// VKEY_A, Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::UNIDENTIFIED}},
// VKEY_A, Win modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
// VKEY_A, Alt+Win modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
// VKEY_LWIN (left Windows key), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
+ ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}},
// VKEY_RWIN (right Windows key), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RWIN,
- ui::DomCode::OS_RIGHT,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_RIGHT,
- ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT,
+ ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}},
};
for (const auto& test : apple_keyboard_tests) {
@@ -334,16 +270,10 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
KeyTestCase pc_keyboard_tests[] = {
// Control should be remapped to Alt.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
+ ui::DomKey::ALT}},
};
for (const auto& test : pc_keyboard_tests) {
@@ -358,30 +288,18 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
// VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
// key should never be re-remapped to Alt.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
+ ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}},
// VKEY_RWIN (right Command key) with Alt modifier. The remapped Command
// key should never be re-remapped to Alt.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RWIN,
- ui::DomCode::OS_RIGHT,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_RIGHT,
- ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_RWIN, ui::DomCode::OS_RIGHT,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_RIGHT,
+ ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, ui::DomKey::CONTROL}},
};
for (const auto& test : apple_keyboard_tests) {
@@ -399,307 +317,166 @@ void EventRewriterTest::TestRewriteNumPadKeys() {
KeyTestCase tests[] = {
// XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_INSERT,
- ui::DomCode::NUMPAD0,
- ui::EF_NONE,
- ui::DomKey::INSERT,
- 0},
- {ui::VKEY_NUMPAD0,
- ui::DomCode::NUMPAD0,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '0'}},
+ {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_NONE, ui::DomKey::INSERT},
+ {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE,
+ ui::DomKey::Constant<'0'>::Character}},
// XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_INSERT,
- ui::DomCode::NUMPAD0,
- ui::EF_ALT_DOWN,
- ui::DomKey::INSERT,
- 0},
- {ui::VKEY_NUMPAD0,
- ui::DomCode::NUMPAD0,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '0'}},
+ {ui::VKEY_INSERT, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN,
+ ui::DomKey::INSERT},
+ {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'0'>::Character}},
// XK_KP_Delete (= NumPad . without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DELETE,
- ui::DomCode::NUMPAD_DECIMAL,
- ui::EF_ALT_DOWN,
- ui::DomKey::DEL,
- 0x7F},
- {ui::VKEY_DECIMAL,
- ui::DomCode::NUMPAD_DECIMAL,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '.'}},
+ {ui::VKEY_DELETE, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN,
+ ui::DomKey::DEL},
+ {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'.'>::Character}},
// XK_KP_End (= NumPad 1 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_END,
- ui::DomCode::NUMPAD1,
- ui::EF_ALT_DOWN,
- ui::DomKey::END,
- 0},
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '1'}},
+ {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN, ui::DomKey::END},
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'1'>::Character}},
// XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::NUMPAD2,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_NUMPAD2,
- ui::DomCode::NUMPAD2,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '2'}},
+ {ui::VKEY_DOWN, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'2'>::Character}},
// XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NEXT,
- ui::DomCode::NUMPAD3,
- ui::EF_ALT_DOWN,
- ui::DomKey::PAGE_DOWN,
- 0},
- {ui::VKEY_NUMPAD3,
- ui::DomCode::NUMPAD3,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '3'}},
+ {ui::VKEY_NEXT, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN,
+ ui::DomKey::PAGE_DOWN},
+ {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'3'>::Character}},
// XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LEFT,
- ui::DomCode::NUMPAD4,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_LEFT,
- 0},
- {ui::VKEY_NUMPAD4,
- ui::DomCode::NUMPAD4,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '4'}},
+ {ui::VKEY_LEFT, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_LEFT},
+ {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'4'>::Character}},
// XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CLEAR,
- ui::DomCode::NUMPAD5,
- ui::EF_ALT_DOWN,
- ui::DomKey::CLEAR,
- 0},
- {ui::VKEY_NUMPAD5,
- ui::DomCode::NUMPAD5,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '5'}},
+ {ui::VKEY_CLEAR, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN,
+ ui::DomKey::CLEAR},
+ {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'5'>::Character}},
// XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RIGHT,
- ui::DomCode::NUMPAD6,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_RIGHT,
- 0},
- {ui::VKEY_NUMPAD6,
- ui::DomCode::NUMPAD6,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '6'}},
+ {ui::VKEY_RIGHT, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_RIGHT},
+ {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'6'>::Character}},
// XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_HOME,
- ui::DomCode::NUMPAD7,
- ui::EF_ALT_DOWN,
- ui::DomKey::HOME,
- 0},
- {ui::VKEY_NUMPAD7,
- ui::DomCode::NUMPAD7,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '7'}},
+ {ui::VKEY_HOME, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN, ui::DomKey::HOME},
+ {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'7'>::Character}},
// XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::NUMPAD8,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_NUMPAD8,
- ui::DomCode::NUMPAD8,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '8'}},
+ {ui::VKEY_UP, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_UP},
+ {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'8'>::Character}},
// XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_PRIOR,
- ui::DomCode::NUMPAD9,
- ui::EF_ALT_DOWN,
- ui::DomKey::PAGE_UP,
- 0},
- {ui::VKEY_NUMPAD9,
- ui::DomCode::NUMPAD9,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- '9'}},
+ {ui::VKEY_PRIOR, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN,
+ ui::DomKey::PAGE_UP},
+ {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'9'>::Character}},
// XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD0,
- ui::DomCode::NUMPAD0,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '0'},
- {ui::VKEY_NUMPAD0,
- ui::DomCode::NUMPAD0,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '0'}},
+ {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE,
+ ui::DomKey::Constant<'0'>::Character},
+ {ui::VKEY_NUMPAD0, ui::DomCode::NUMPAD0, ui::EF_NONE,
+ ui::DomKey::Constant<'0'>::Character}},
// XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DECIMAL,
- ui::DomCode::NUMPAD_DECIMAL,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '.'},
- {ui::VKEY_DECIMAL,
- ui::DomCode::NUMPAD_DECIMAL,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '.'}},
+ {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE,
+ ui::DomKey::Constant<'.'>::Character},
+ {ui::VKEY_DECIMAL, ui::DomCode::NUMPAD_DECIMAL, ui::EF_NONE,
+ ui::DomKey::Constant<'.'>::Character}},
// XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '1'},
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '1'}},
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE,
+ ui::DomKey::Constant<'1'>::Character},
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_NONE,
+ ui::DomKey::Constant<'1'>::Character}},
// XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD2,
- ui::DomCode::NUMPAD2,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '2'},
- {ui::VKEY_NUMPAD2,
- ui::DomCode::NUMPAD2,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '2'}},
+ {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE,
+ ui::DomKey::Constant<'2'>::Character},
+ {ui::VKEY_NUMPAD2, ui::DomCode::NUMPAD2, ui::EF_NONE,
+ ui::DomKey::Constant<'2'>::Character}},
// XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD3,
- ui::DomCode::NUMPAD3,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '3'},
- {ui::VKEY_NUMPAD3,
- ui::DomCode::NUMPAD3,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '3'}},
+ {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE,
+ ui::DomKey::Constant<'3'>::Character},
+ {ui::VKEY_NUMPAD3, ui::DomCode::NUMPAD3, ui::EF_NONE,
+ ui::DomKey::Constant<'3'>::Character}},
// XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD4,
- ui::DomCode::NUMPAD4,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '4'},
- {ui::VKEY_NUMPAD4,
- ui::DomCode::NUMPAD4,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '4'}},
+ {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE,
+ ui::DomKey::Constant<'4'>::Character},
+ {ui::VKEY_NUMPAD4, ui::DomCode::NUMPAD4, ui::EF_NONE,
+ ui::DomKey::Constant<'4'>::Character}},
// XK_KP_5 (= NumPad 5 with Num Lock), Num Lock
// modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD5,
- ui::DomCode::NUMPAD5,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '5'},
- {ui::VKEY_NUMPAD5,
- ui::DomCode::NUMPAD5,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '5'}},
+ {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE,
+ ui::DomKey::Constant<'5'>::Character},
+ {ui::VKEY_NUMPAD5, ui::DomCode::NUMPAD5, ui::EF_NONE,
+ ui::DomKey::Constant<'5'>::Character}},
// XK_KP_6 (= NumPad 6 with Num Lock), Num Lock
// modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD6,
- ui::DomCode::NUMPAD6,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '6'},
- {ui::VKEY_NUMPAD6,
- ui::DomCode::NUMPAD6,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '6'}},
+ {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE,
+ ui::DomKey::Constant<'6'>::Character},
+ {ui::VKEY_NUMPAD6, ui::DomCode::NUMPAD6, ui::EF_NONE,
+ ui::DomKey::Constant<'6'>::Character}},
// XK_KP_7 (= NumPad 7 with Num Lock), Num Lock
// modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD7,
- ui::DomCode::NUMPAD7,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '7'},
- {ui::VKEY_NUMPAD7,
- ui::DomCode::NUMPAD7,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '7'}},
+ {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE,
+ ui::DomKey::Constant<'7'>::Character},
+ {ui::VKEY_NUMPAD7, ui::DomCode::NUMPAD7, ui::EF_NONE,
+ ui::DomKey::Constant<'7'>::Character}},
// XK_KP_8 (= NumPad 8 with Num Lock), Num Lock
// modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD8,
- ui::DomCode::NUMPAD8,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '8'},
- {ui::VKEY_NUMPAD8,
- ui::DomCode::NUMPAD8,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '8'}},
+ {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE,
+ ui::DomKey::Constant<'8'>::Character},
+ {ui::VKEY_NUMPAD8, ui::DomCode::NUMPAD8, ui::EF_NONE,
+ ui::DomKey::Constant<'8'>::Character}},
// XK_KP_9 (= NumPad 9 with Num Lock), Num Lock
// modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD9,
- ui::DomCode::NUMPAD9,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '9'},
- {ui::VKEY_NUMPAD9,
- ui::DomCode::NUMPAD9,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '9'}},
+ {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE,
+ ui::DomKey::Constant<'9'>::Character},
+ {ui::VKEY_NUMPAD9, ui::DomCode::NUMPAD9, ui::EF_NONE,
+ ui::DomKey::Constant<'9'>::Character}},
};
for (const auto& test : tests) {
@@ -733,31 +510,19 @@ void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
// XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
// The result should be "Num Pad 1 with Control + Num Lock modifiers".
{ui::ET_KEY_PRESSED,
- {ui::VKEY_END,
- ui::DomCode::NUMPAD1,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::END,
- 0},
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_END, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN,
+ ui::DomKey::END},
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN,
+ ui::DomKey::UNIDENTIFIED}},
// XK_KP_1 (= NumPad 1 with Num Lock), Win modifier.
// The result should also be "Num Pad 1 with Control + Num Lock
// modifiers".
{ui::ET_KEY_PRESSED,
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '1'},
- {ui::VKEY_NUMPAD1,
- ui::DomCode::NUMPAD1,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}}};
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'1'>::Character},
+ {ui::VKEY_NUMPAD1, ui::DomCode::NUMPAD1, ui::EF_CONTROL_DOWN,
+ ui::DomKey::UNIDENTIFIED}}};
for (const auto& test : tests) {
CheckKeyTestCase(&rewriter, test);
@@ -788,70 +553,41 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
KeyTestCase tests[] = {
// Press Search. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::OS}},
// Press left Control. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press right Control. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press left Alt. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
+ ui::DomKey::ALT}},
// Press right Alt. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
+ ui::DomKey::ALT}},
// Test KeyRelease event, just in case.
// Release Search. Confirm the release event is not rewritten.
{ui::ET_KEY_RELEASED,
- {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
- {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS}},
};
for (const auto& test : tests) {
@@ -868,57 +604,35 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
KeyTestCase tests[] = {
// Press Alt with Shift. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
+ ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
+ ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}},
// Press Search with Caps Lock mask. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS}},
// Release Search with Caps Lock mask. Confirm the event is not rewritten.
{ui::ET_KEY_RELEASED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_CAPS_LOCK_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_CAPS_LOCK_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN,
+ ui::DomKey::OS},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CAPS_LOCK_DOWN,
+ ui::DomKey::OS}},
// Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
+ {ui::VKEY_B, ui::DomCode::KEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- 'B'},
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
+ ui::DomKey::Constant<'B'>::Character},
+ {ui::VKEY_B, ui::DomCode::KEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- 'B'}},
+ ui::DomKey::Constant<'B'>::Character}},
};
for (const auto& test : tests) {
@@ -945,80 +659,47 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
// Press Alt with Shift. This key press shouldn't be affected by the
// pref. Confirm the event is not rewritten.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
+ ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
+ ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ALT}},
// Press Search. Confirm the event is now VKEY_UNKNOWN.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0},
- {ui::VKEY_UNKNOWN,
- ui::DomCode::NONE,
- ui::EF_NONE,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS},
+ {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE,
+ ui::DomKey::UNIDENTIFIED}},
// Press Control. Confirm the event is now VKEY_UNKNOWN.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0},
- {ui::VKEY_UNKNOWN,
- ui::DomCode::NONE,
- ui::EF_NONE,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL},
+ {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE,
+ ui::DomKey::UNIDENTIFIED}},
// Press Control+Search. Confirm the event is now VKEY_UNKNOWN
// without any modifiers.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_UNKNOWN,
- ui::DomCode::NONE,
- ui::EF_NONE,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::OS},
+ {ui::VKEY_UNKNOWN, ui::DomCode::NONE, ui::EF_NONE,
+ ui::DomKey::UNIDENTIFIED}},
// Press Control+Search+a. Confirm the event is now VKEY_A without any
// modifiers.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- 'a'}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE,
+ ui::DomKey::Constant<'a'>::Character}},
// Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with
// the Alt modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- 'a'}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'a'>::Character}},
};
for (const auto& test : disabled_modifier_tests) {
@@ -1034,30 +715,17 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
// Press left Alt. Confirm the event is now VKEY_CONTROL
// even though the Control key itself is disabled.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press Alt+a. Confirm the event is now Control+a even though the Control
// key itself is disabled.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
};
for (const auto& test : tests) {
@@ -1080,16 +748,10 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
KeyTestCase s_tests[] = {
// Press Search. Confirm the event is now VKEY_CONTROL.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
};
for (const auto& test : s_tests) {
@@ -1104,72 +766,44 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
KeyTestCase sa_tests[] = {
// Press Alt. Confirm the event is now VKEY_CONTROL.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press Alt+Search. Confirm the event is now VKEY_CONTROL.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press Shift+Control+Alt+Search. Confirm the event is now Control with
// Shift and Control modifiers.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ ui::DomKey::OS},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
+ ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL}},
// Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift
// and Control modifiers.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
+ {ui::VKEY_B, ui::DomCode::KEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- 'B'},
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
- ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x02}},
+ ui::DomKey::Constant<'B'>::Character},
+ {ui::VKEY_B, ui::DomCode::KEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x02>::Character}},
};
for (const auto& test : sa_tests) {
@@ -1192,16 +826,9 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
KeyTestCase tests[] = {
// Press Search. Confirm the event is now VKEY_ESCAPE.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_ESCAPE,
- ui::DomCode::ESCAPE,
- ui::EF_NONE,
- ui::DomKey::ESCAPE,
- 0x1B}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::OS},
+ {ui::VKEY_ESCAPE, ui::DomCode::ESCAPE, ui::EF_NONE, ui::DomKey::ESCAPE}},
};
for (const auto& test : tests) {
@@ -1224,16 +851,10 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
KeyTestCase s2a_tests[] = {
// Press Search. Confirm the event is now VKEY_MENU.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0}},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::OS},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
+ ui::DomKey::ALT}},
};
for (const auto& test : s2a_tests) {
@@ -1248,42 +869,23 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
KeyTestCase a2c_tests[] = {
// Press left Alt. Confirm the event is now VKEY_CONTROL.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
- ui::EF_ALT_DOWN,
- ui::DomKey::ALT,
- 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, ui::DomKey::ALT},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
// Press Shift+comma. Verify that only the flags are changed.
// The X11 portion of the test addresses crbug.com/390263 by verifying
// that the X keycode remains that for ',<' and not for 105-key '<>'.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_COMMA,
- ui::DomCode::COMMA,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_OEM_COMMA,
- ui::DomCode::COMMA,
- ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA,
+ ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_OEM_COMMA, ui::DomCode::COMMA,
+ ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}},
// Press Shift+9. Verify that only the flags are changed.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_9,
- ui::DomCode::DIGIT9,
- ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0},
- {ui::VKEY_9,
- ui::DomCode::DIGIT9,
- ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::UNIDENTIFIED,
- 0}},
+ {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
+ ui::DomKey::UNIDENTIFIED},
+ {ui::VKEY_9, ui::DomCode::DIGIT9,
+ ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::UNIDENTIFIED}},
};
for (const auto& test : a2c_tests) {
@@ -1298,59 +900,41 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
KeyTestCase c2s_tests[] = {
// Press left Control. Confirm the event is now VKEY_LWIN.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0},
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0}},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL},
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::OS}},
// Then, press all of the three, Control+Alt+Search.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
+ ui::DomKey::OS},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::ALT,
- 0}},
+ ui::DomKey::ALT}},
// Press Shift+Control+Alt+Search.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LWIN,
- ui::DomCode::OS_LEFT,
+ {ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::OS,
- 0},
- {ui::VKEY_MENU,
- ui::DomCode::ALT_LEFT,
+ ui::DomKey::OS},
+ {ui::VKEY_MENU, ui::DomCode::ALT_LEFT,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::ALT,
- 0}},
+ ui::DomKey::ALT}},
// Press Shift+Control+Alt+Search+B
{ui::ET_KEY_PRESSED,
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
+ {ui::VKEY_B, ui::DomCode::KEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- 'B'},
- {ui::VKEY_B,
- ui::DomCode::KEY_B,
+ ui::DomKey::Constant<'B'>::Character},
+ {ui::VKEY_B, ui::DomCode::KEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- 'B'}},
+ ui::DomKey::Constant<'B'>::Character}},
};
for (const auto& test : c2s_tests) {
@@ -1376,20 +960,20 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
// Press Search.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK, ui::EF_MOD3_DOWN,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0));
+ ui::EF_COMMAND_DOWN, ui::DomKey::OS));
// Confirm that the Caps Lock status is changed.
EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
// Release Search.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK, ui::EF_NONE,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
- ui::EF_NONE, ui::DomKey::OS, 0));
+ ui::EF_NONE, ui::DomKey::OS));
// Confirm that the Caps Lock status is not changed.
EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
@@ -1397,20 +981,20 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
EXPECT_EQ(
GetExpectedResultAsString(
ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
- ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0),
+ ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(
&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
- ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0));
+ ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS));
// Confirm that the Caps Lock status is changed.
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
// Release Search.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK, ui::EF_NONE,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_LWIN, ui::DomCode::OS_LEFT,
- ui::EF_NONE, ui::DomKey::OS, 0));
+ ui::EF_NONE, ui::DomKey::OS));
// Confirm that the Caps Lock status is not changed.
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -1418,11 +1002,11 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK,
ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CAPS_LOCK, 0));
+ ui::DomKey::CAPS_LOCK));
#if defined(USE_X11)
// Confirm that calling RewriteForTesting() does not change the state of
@@ -1439,10 +1023,10 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
// Release Caps Lock (on an external keyboard).
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK, ui::EF_NONE,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK,
- ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0));
+ ui::EF_NONE, ui::DomKey::CAPS_LOCK));
#if defined(USE_X11)
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
#elif defined(USE_OZONE)
@@ -1465,10 +1049,10 @@ TEST_F(EventRewriterTest, TestRewriteCapsLock) {
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK,
ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F16, ui::DomCode::F16,
- ui::EF_MOD3_DOWN, ui::DomKey::F16, 0));
+ ui::EF_MOD3_DOWN, ui::DomKey::F16));
EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_);
}
@@ -1486,34 +1070,22 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
// F15 should work as Ctrl when --has-chromeos-diamond-key is not
// specified.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::CONTROL}},
{ui::ET_KEY_RELEASED,
- {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0},
- {ui::VKEY_CONTROL,
- ui::DomCode::CONTROL_LEFT,
- ui::EF_NONE,
- ui::DomKey::CONTROL,
- 0}},
+ {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15},
+ {ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, ui::EF_NONE,
+ ui::DomKey::CONTROL}},
// However, Mod2Mask should not be rewritten to CtrlMask when
// --has-chromeos-diamond-key is not specified.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- 'a'}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_NONE,
+ ui::DomKey::Constant<'a'>::Character}},
};
for (const auto& test : tests) {
@@ -1536,33 +1108,33 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
// By default, F15 should work as Control.
- EXPECT_EQ(GetExpectedResultAsString(
- ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0),
+ EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
+ ui::DomCode::CONTROL_LEFT,
+ ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Control is applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER, 0x01),
+ ui::DomKey::Constant<0x01>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
// Release F15
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL,
ui::DomCode::CONTROL_LEFT, ui::EF_NONE,
- ui::DomKey::CONTROL, 0),
+ ui::DomKey::CONTROL),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Control is no longer applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
IntegerPrefMember diamond;
diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs);
@@ -1570,109 +1142,109 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN,
ui::DomCode::NONE, ui::EF_NONE,
- ui::DomKey::UNIDENTIFIED, 0),
+ ui::DomKey::UNIDENTIFIED),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that no modifier is applied to another key.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
diamond.SetValue(chromeos::input_method::kControlKey);
- EXPECT_EQ(GetExpectedResultAsString(
- ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0),
+ EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
+ ui::DomCode::CONTROL_LEFT,
+ ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Control is applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER, 0x01),
+ ui::DomKey::Constant<0x01>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
// Release F15
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL,
ui::DomCode::CONTROL_LEFT, ui::EF_NONE,
- ui::DomKey::CONTROL, 0),
+ ui::DomKey::CONTROL),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Control is no longer applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
diamond.SetValue(chromeos::input_method::kAltKey);
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU,
ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN,
- ui::DomKey::ALT, 0),
+ ui::DomKey::ALT),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Alt is applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_ALT_DOWN,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
// Release F15
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU,
ui::DomCode::ALT_LEFT, ui::EF_NONE,
- ui::DomKey::ALT, 0),
+ ui::DomKey::ALT),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Alt is no longer applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
diamond.SetValue(chromeos::input_method::kCapsLockKey);
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK,
ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Caps is applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A,
ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CHARACTER, 'A'),
+ ui::DomKey::Constant<'A'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
// Release F15
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL,
ui::DomCode::CAPS_LOCK, ui::EF_NONE,
- ui::DomKey::CAPS_LOCK, 0),
+ ui::DomKey::CAPS_LOCK),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED,
ui::VKEY_F15, ui::DomCode::F15,
- ui::EF_NONE, ui::DomKey::F15, 0));
+ ui::EF_NONE, ui::DomKey::F15));
// Check that Control is no longer applied to a subsequent key press.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
*base::CommandLine::ForCurrentProcess() = original_cl;
}
@@ -1693,44 +1265,26 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
// Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
// On Chrome OS, CapsLock works as a Mod3 modifier.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_MOD3_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_MOD3_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
// Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to
// ControlMask
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
// Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to
// ControlMask.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN,
- ui::DomKey::CHARACTER,
- 'a'},
- {ui::VKEY_A,
- ui::DomCode::KEY_A,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- 0x01}},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN,
+ ui::DomKey::Constant<'a'>::Character},
+ {ui::VKEY_A, ui::DomCode::KEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
+ ui::DomKey::Constant<0x01>::Character}},
};
for (const auto& test : tests) {
@@ -1755,10 +1309,10 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
// when Mod3Mask is already in use by the current XKB layout.
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'),
+ ui::DomKey::Constant<'a'>::Character),
GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A,
ui::DomCode::KEY_A, ui::EF_NONE,
- ui::DomKey::CHARACTER, 'a'));
+ ui::DomKey::Constant<'a'>::Character));
input_method_manager_mock_->set_mod3_used(false);
}
@@ -1774,247 +1328,135 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
KeyTestCase tests[] = {
// Alt+Backspace -> Delete
{ui::ET_KEY_PRESSED,
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_ALT_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'},
- {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN,
+ ui::DomKey::BACKSPACE},
+ {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}},
// Control+Alt+Backspace -> Control+Delete
{ui::ET_KEY_PRESSED,
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'},
- {ui::VKEY_DELETE,
- ui::DomCode::DEL,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::DEL,
- 0x7F}},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE},
+ {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_CONTROL_DOWN,
+ ui::DomKey::DEL}},
// Search+Alt+Backspace -> Alt+Backspace
{ui::ET_KEY_PRESSED,
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'},
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_ALT_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'}},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::BACKSPACE},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_ALT_DOWN,
+ ui::DomKey::BACKSPACE}},
// Search+Control+Alt+Backspace -> Control+Alt+Backspace
{ui::ET_KEY_PRESSED,
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'},
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'}},
+ ui::DomKey::BACKSPACE},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::BACKSPACE}},
// Alt+Up -> Prior
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_PRIOR,
- ui::DomCode::PAGE_UP,
- ui::EF_NONE,
- ui::DomKey::PAGE_UP,
- 0}},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_UP},
+ {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE,
+ ui::DomKey::PAGE_UP}},
// Alt+Down -> Next
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_NEXT,
- ui::DomCode::PAGE_DOWN,
- ui::EF_NONE,
- ui::DomKey::PAGE_DOWN,
- 0}},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE,
+ ui::DomKey::PAGE_DOWN}},
// Ctrl+Alt+Up -> Home
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP},
+ {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}},
// Ctrl+Alt+Down -> End
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}},
// Search+Alt+Up -> Alt+Up
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_UP,
- 0}},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_UP},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_UP}},
// Search+Alt+Down -> Alt+Down
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_ALT_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0}},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
+ ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_ALT_DOWN,
+ ui::DomKey::ARROW_DOWN}},
// Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_UP,
- 0}},
+ ui::DomKey::ARROW_UP},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_UP}},
// Search+Ctrl+Alt+Down -> Ctrl+Alt+Down
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0}},
+ ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
+ ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_DOWN}},
// Period -> Period
{ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_PERIOD,
- ui::DomCode::PERIOD,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '.'},
- {ui::VKEY_OEM_PERIOD,
- ui::DomCode::PERIOD,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '.'}},
+ {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE,
+ ui::DomKey::Constant<'.'>::Character},
+ {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_NONE,
+ ui::DomKey::Constant<'.'>::Character}},
// Search+Backspace -> Delete
{ui::ET_KEY_PRESSED,
- {ui::VKEY_BACK,
- ui::DomCode::BACKSPACE,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::BACKSPACE,
- '\b'},
- {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0x7F}},
+ {ui::VKEY_BACK, ui::DomCode::BACKSPACE, ui::EF_COMMAND_DOWN,
+ ui::DomKey::BACKSPACE},
+ {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL}},
// Search+Up -> Prior
{ui::ET_KEY_PRESSED,
- {ui::VKEY_UP,
- ui::DomCode::ARROW_UP,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_UP,
- 0},
- {ui::VKEY_PRIOR,
- ui::DomCode::PAGE_UP,
- ui::EF_NONE,
- ui::DomKey::PAGE_UP,
- 0}},
+ {ui::VKEY_UP, ui::DomCode::ARROW_UP, ui::EF_COMMAND_DOWN,
+ ui::DomKey::ARROW_UP},
+ {ui::VKEY_PRIOR, ui::DomCode::PAGE_UP, ui::EF_NONE,
+ ui::DomKey::PAGE_UP}},
// Search+Down -> Next
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_NEXT,
- ui::DomCode::PAGE_DOWN,
- ui::EF_NONE,
- ui::DomKey::PAGE_DOWN,
- 0}},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN, ui::EF_COMMAND_DOWN,
+ ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_NEXT, ui::DomCode::PAGE_DOWN, ui::EF_NONE,
+ ui::DomKey::PAGE_DOWN}},
// Search+Left -> Home
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LEFT,
- ui::DomCode::ARROW_LEFT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_LEFT,
- 0},
- {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}},
+ {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::ARROW_LEFT},
+ {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME}},
// Control+Search+Left -> Home
{ui::ET_KEY_PRESSED,
- {ui::VKEY_LEFT,
- ui::DomCode::ARROW_LEFT,
- ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_LEFT,
- 0},
- {ui::VKEY_HOME,
- ui::DomCode::HOME,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::HOME,
- 0}},
+ {ui::VKEY_LEFT, ui::DomCode::ARROW_LEFT,
+ ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_LEFT},
+ {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_CONTROL_DOWN,
+ ui::DomKey::HOME}},
// Search+Right -> End
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RIGHT,
- ui::DomCode::ARROW_RIGHT,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_RIGHT,
- 0},
- {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
+ {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT, ui::EF_COMMAND_DOWN,
+ ui::DomKey::ARROW_RIGHT},
+ {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}},
// Control+Search+Right -> End
{ui::ET_KEY_PRESSED,
- {ui::VKEY_RIGHT,
- ui::DomCode::ARROW_RIGHT,
- ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::ARROW_RIGHT,
- 0},
- {ui::VKEY_END,
- ui::DomCode::END,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::END,
- 0}},
+ {ui::VKEY_RIGHT, ui::DomCode::ARROW_RIGHT,
+ ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, ui::DomKey::ARROW_RIGHT},
+ {ui::VKEY_END, ui::DomCode::END, ui::EF_CONTROL_DOWN, ui::DomKey::END}},
// Search+Period -> Insert
{ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_PERIOD,
- ui::DomCode::PERIOD,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '.'},
- {ui::VKEY_INSERT,
- ui::DomCode::INSERT,
- ui::EF_NONE,
- ui::DomKey::INSERT,
- 0}},
+ {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'.'>::Character},
+ {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_NONE, ui::DomKey::INSERT}},
// Control+Search+Period -> Control+Insert
{ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_PERIOD,
- ui::DomCode::PERIOD,
+ {ui::VKEY_OEM_PERIOD, ui::DomCode::PERIOD,
ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
- ui::DomKey::CHARACTER,
- '.'},
- {ui::VKEY_INSERT,
- ui::DomCode::INSERT,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::INSERT,
- 0}}};
+ ui::DomKey::Constant<'.'>::Character},
+ {ui::VKEY_INSERT, ui::DomCode::INSERT, ui::EF_CONTROL_DOWN,
+ ui::DomKey::INSERT}}};
for (const auto& test : tests) {
CheckKeyTestCase(&rewriter, test);
@@ -2031,535 +1473,305 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
KeyTestCase tests[] = {
// F1 -> Back
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0},
- {ui::VKEY_BROWSER_BACK,
- ui::DomCode::BROWSER_BACK,
- ui::EF_NONE,
- ui::DomKey::BROWSER_BACK,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0},
- {ui::VKEY_BROWSER_BACK,
- ui::DomCode::BROWSER_BACK,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::BROWSER_BACK,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0},
- {ui::VKEY_BROWSER_BACK,
- ui::DomCode::BROWSER_BACK,
- ui::EF_ALT_DOWN,
- ui::DomKey::BROWSER_BACK,
- 0}},
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1},
+ {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_NONE,
+ ui::DomKey::BROWSER_BACK}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1},
+ {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_CONTROL_DOWN,
+ ui::DomKey::BROWSER_BACK}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1},
+ {ui::VKEY_BROWSER_BACK, ui::DomCode::BROWSER_BACK, ui::EF_ALT_DOWN,
+ ui::DomKey::BROWSER_BACK}},
// F2 -> Forward
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0},
- {ui::VKEY_BROWSER_FORWARD,
- ui::DomCode::BROWSER_FORWARD,
- ui::EF_NONE,
- ui::DomKey::BROWSER_FORWARD,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0},
- {ui::VKEY_BROWSER_FORWARD,
- ui::DomCode::BROWSER_FORWARD,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::BROWSER_FORWARD,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0},
- {ui::VKEY_BROWSER_FORWARD,
- ui::DomCode::BROWSER_FORWARD,
- ui::EF_ALT_DOWN,
- ui::DomKey::BROWSER_FORWARD,
- 0}},
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2},
+ {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_NONE,
+ ui::DomKey::BROWSER_FORWARD}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2},
+ {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD,
+ ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_FORWARD}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2},
+ {ui::VKEY_BROWSER_FORWARD, ui::DomCode::BROWSER_FORWARD, ui::EF_ALT_DOWN,
+ ui::DomKey::BROWSER_FORWARD}},
// F3 -> Refresh
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0},
- {ui::VKEY_BROWSER_REFRESH,
- ui::DomCode::BROWSER_REFRESH,
- ui::EF_NONE,
- ui::DomKey::BROWSER_REFRESH,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0},
- {ui::VKEY_BROWSER_REFRESH,
- ui::DomCode::BROWSER_REFRESH,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::BROWSER_REFRESH,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0},
- {ui::VKEY_BROWSER_REFRESH,
- ui::DomCode::BROWSER_REFRESH,
- ui::EF_ALT_DOWN,
- ui::DomKey::BROWSER_REFRESH,
- 0}},
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3},
+ {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_NONE,
+ ui::DomKey::BROWSER_REFRESH}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3},
+ {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH,
+ ui::EF_CONTROL_DOWN, ui::DomKey::BROWSER_REFRESH}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3},
+ {ui::VKEY_BROWSER_REFRESH, ui::DomCode::BROWSER_REFRESH, ui::EF_ALT_DOWN,
+ ui::DomKey::BROWSER_REFRESH}},
// F4 -> Launch App 2
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP2,
- ui::DomCode::ZOOM_TOGGLE,
- ui::EF_NONE,
- ui::DomKey::ZOOM_TOGGLE,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP2,
- ui::DomCode::ZOOM_TOGGLE,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::ZOOM_TOGGLE,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP2,
- ui::DomCode::ZOOM_TOGGLE,
- ui::EF_ALT_DOWN,
- ui::DomKey::ZOOM_TOGGLE,
- 0}},
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4},
+ {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_NONE,
+ ui::DomKey::ZOOM_TOGGLE}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4},
+ {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE,
+ ui::EF_CONTROL_DOWN, ui::DomKey::ZOOM_TOGGLE}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4},
+ {ui::VKEY_MEDIA_LAUNCH_APP2, ui::DomCode::ZOOM_TOGGLE, ui::EF_ALT_DOWN,
+ ui::DomKey::ZOOM_TOGGLE}},
// F5 -> Launch App 1
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP1,
- ui::DomCode::SELECT_TASK,
- ui::EF_NONE,
- ui::DomKey::LAUNCH_MY_COMPUTER,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP1,
- ui::DomCode::SELECT_TASK,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::LAUNCH_MY_COMPUTER,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0},
- {ui::VKEY_MEDIA_LAUNCH_APP1,
- ui::DomCode::SELECT_TASK,
- ui::EF_ALT_DOWN,
- ui::DomKey::LAUNCH_MY_COMPUTER,
- 0}},
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5},
+ {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_NONE,
+ ui::DomKey::LAUNCH_MY_COMPUTER}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5},
+ {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK,
+ ui::EF_CONTROL_DOWN, ui::DomKey::LAUNCH_MY_COMPUTER}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5},
+ {ui::VKEY_MEDIA_LAUNCH_APP1, ui::DomCode::SELECT_TASK, ui::EF_ALT_DOWN,
+ ui::DomKey::LAUNCH_MY_COMPUTER}},
// F6 -> Brightness down
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0},
- {ui::VKEY_BRIGHTNESS_DOWN,
- ui::DomCode::BRIGHTNESS_DOWN,
- ui::EF_NONE,
- ui::DomKey::BRIGHTNESS_DOWN,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0},
- {ui::VKEY_BRIGHTNESS_DOWN,
- ui::DomCode::BRIGHTNESS_DOWN,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::BRIGHTNESS_DOWN,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0},
- {ui::VKEY_BRIGHTNESS_DOWN,
- ui::DomCode::BRIGHTNESS_DOWN,
- ui::EF_ALT_DOWN,
- ui::DomKey::BRIGHTNESS_DOWN,
- 0}},
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6},
+ {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_NONE,
+ ui::DomKey::BRIGHTNESS_DOWN}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6},
+ {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN,
+ ui::EF_CONTROL_DOWN, ui::DomKey::BRIGHTNESS_DOWN}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6},
+ {ui::VKEY_BRIGHTNESS_DOWN, ui::DomCode::BRIGHTNESS_DOWN, ui::EF_ALT_DOWN,
+ ui::DomKey::BRIGHTNESS_DOWN}},
// F7 -> Brightness up
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0},
- {ui::VKEY_BRIGHTNESS_UP,
- ui::DomCode::BRIGHTNESS_UP,
- ui::EF_NONE,
- ui::DomKey::BRIGHTNESS_UP,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0},
- {ui::VKEY_BRIGHTNESS_UP,
- ui::DomCode::BRIGHTNESS_UP,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::BRIGHTNESS_UP,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0},
- {ui::VKEY_BRIGHTNESS_UP,
- ui::DomCode::BRIGHTNESS_UP,
- ui::EF_ALT_DOWN,
- ui::DomKey::BRIGHTNESS_UP,
- 0}},
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7},
+ {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_NONE,
+ ui::DomKey::BRIGHTNESS_UP}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7},
+ {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_CONTROL_DOWN,
+ ui::DomKey::BRIGHTNESS_UP}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7},
+ {ui::VKEY_BRIGHTNESS_UP, ui::DomCode::BRIGHTNESS_UP, ui::EF_ALT_DOWN,
+ ui::DomKey::BRIGHTNESS_UP}},
// F8 -> Volume Mute
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0},
- {ui::VKEY_VOLUME_MUTE,
- ui::DomCode::VOLUME_MUTE,
- ui::EF_NONE,
- ui::DomKey::VOLUME_MUTE,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0},
- {ui::VKEY_VOLUME_MUTE,
- ui::DomCode::VOLUME_MUTE,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::VOLUME_MUTE,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0},
- {ui::VKEY_VOLUME_MUTE,
- ui::DomCode::VOLUME_MUTE,
- ui::EF_ALT_DOWN,
- ui::DomKey::VOLUME_MUTE,
- 0}},
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8},
+ {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_NONE,
+ ui::DomKey::VOLUME_MUTE}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8},
+ {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_CONTROL_DOWN,
+ ui::DomKey::VOLUME_MUTE}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8},
+ {ui::VKEY_VOLUME_MUTE, ui::DomCode::VOLUME_MUTE, ui::EF_ALT_DOWN,
+ ui::DomKey::VOLUME_MUTE}},
// F9 -> Volume Down
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0},
- {ui::VKEY_VOLUME_DOWN,
- ui::DomCode::VOLUME_DOWN,
- ui::EF_NONE,
- ui::DomKey::VOLUME_DOWN,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0},
- {ui::VKEY_VOLUME_DOWN,
- ui::DomCode::VOLUME_DOWN,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::VOLUME_DOWN,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0},
- {ui::VKEY_VOLUME_DOWN,
- ui::DomCode::VOLUME_DOWN,
- ui::EF_ALT_DOWN,
- ui::DomKey::VOLUME_DOWN,
- 0}},
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9},
+ {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_NONE,
+ ui::DomKey::VOLUME_DOWN}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9},
+ {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_CONTROL_DOWN,
+ ui::DomKey::VOLUME_DOWN}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9},
+ {ui::VKEY_VOLUME_DOWN, ui::DomCode::VOLUME_DOWN, ui::EF_ALT_DOWN,
+ ui::DomKey::VOLUME_DOWN}},
// F10 -> Volume Up
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0},
- {ui::VKEY_VOLUME_UP,
- ui::DomCode::VOLUME_UP,
- ui::EF_NONE,
- ui::DomKey::VOLUME_UP,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F10,
- ui::DomCode::F10,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::F10,
- 0},
- {ui::VKEY_VOLUME_UP,
- ui::DomCode::VOLUME_UP,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::VOLUME_UP,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0},
- {ui::VKEY_VOLUME_UP,
- ui::DomCode::VOLUME_UP,
- ui::EF_ALT_DOWN,
- ui::DomKey::VOLUME_UP,
- 0}},
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10},
+ {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_NONE,
+ ui::DomKey::VOLUME_UP}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_CONTROL_DOWN, ui::DomKey::F10},
+ {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_CONTROL_DOWN,
+ ui::DomKey::VOLUME_UP}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10},
+ {ui::VKEY_VOLUME_UP, ui::DomCode::VOLUME_UP, ui::EF_ALT_DOWN,
+ ui::DomKey::VOLUME_UP}},
// F11 -> F11
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0},
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F11,
- ui::DomCode::F11,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::F11,
- 0},
- {ui::VKEY_F11,
- ui::DomCode::F11,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::F11,
- 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0},
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_CONTROL_DOWN, ui::DomKey::F11}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11}},
// F12 -> F12
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0},
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F12,
- ui::DomCode::F12,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::F12,
- 0},
- {ui::VKEY_F12,
- ui::DomCode::F12,
- ui::EF_CONTROL_DOWN,
- ui::DomKey::F12,
- 0}},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_CONTROL_DOWN, ui::DomKey::F12}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0},
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12}},
// The number row should not be rewritten without Search key.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_1,
- ui::DomCode::DIGIT1,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '1'},
- {ui::VKEY_1,
- ui::DomCode::DIGIT1,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '1'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_2,
- ui::DomCode::DIGIT2,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '2'},
- {ui::VKEY_2,
- ui::DomCode::DIGIT2,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '2'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_3,
- ui::DomCode::DIGIT3,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '3'},
- {ui::VKEY_3,
- ui::DomCode::DIGIT3,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '3'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_4,
- ui::DomCode::DIGIT4,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '4'},
- {ui::VKEY_4,
- ui::DomCode::DIGIT4,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '4'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_5,
- ui::DomCode::DIGIT5,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '5'},
- {ui::VKEY_5,
- ui::DomCode::DIGIT5,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '5'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_6,
- ui::DomCode::DIGIT6,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '6'},
- {ui::VKEY_6,
- ui::DomCode::DIGIT6,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '6'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_7,
- ui::DomCode::DIGIT7,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '7'},
- {ui::VKEY_7,
- ui::DomCode::DIGIT7,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '7'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_8,
- ui::DomCode::DIGIT8,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '8'},
- {ui::VKEY_8,
- ui::DomCode::DIGIT8,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '8'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_9,
- ui::DomCode::DIGIT9,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '9'},
- {ui::VKEY_9,
- ui::DomCode::DIGIT9,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '9'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_0,
- ui::DomCode::DIGIT0,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '0'},
- {ui::VKEY_0,
- ui::DomCode::DIGIT0,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '0'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_MINUS,
- ui::DomCode::MINUS,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '-'},
- {ui::VKEY_OEM_MINUS,
- ui::DomCode::MINUS,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '-'}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_PLUS,
- ui::DomCode::EQUAL,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '='},
- {ui::VKEY_OEM_PLUS,
- ui::DomCode::EQUAL,
- ui::EF_NONE,
- ui::DomKey::CHARACTER,
- '='}},
+ {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE,
+ ui::DomKey::Constant<'1'>::Character},
+ {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_NONE,
+ ui::DomKey::Constant<'1'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE,
+ ui::DomKey::Constant<'2'>::Character},
+ {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_NONE,
+ ui::DomKey::Constant<'2'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE,
+ ui::DomKey::Constant<'3'>::Character},
+ {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_NONE,
+ ui::DomKey::Constant<'3'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE,
+ ui::DomKey::Constant<'4'>::Character},
+ {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_NONE,
+ ui::DomKey::Constant<'4'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE,
+ ui::DomKey::Constant<'5'>::Character},
+ {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_NONE,
+ ui::DomKey::Constant<'5'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE,
+ ui::DomKey::Constant<'6'>::Character},
+ {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_NONE,
+ ui::DomKey::Constant<'6'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE,
+ ui::DomKey::Constant<'7'>::Character},
+ {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_NONE,
+ ui::DomKey::Constant<'7'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE,
+ ui::DomKey::Constant<'8'>::Character},
+ {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_NONE,
+ ui::DomKey::Constant<'8'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE,
+ ui::DomKey::Constant<'9'>::Character},
+ {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_NONE,
+ ui::DomKey::Constant<'9'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE,
+ ui::DomKey::Constant<'0'>::Character},
+ {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_NONE,
+ ui::DomKey::Constant<'0'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE,
+ ui::DomKey::Constant<'-'>::Character},
+ {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_NONE,
+ ui::DomKey::Constant<'-'>::Character}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE,
+ ui::DomKey::Constant<'='>::Character},
+ {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_NONE,
+ ui::DomKey::Constant<'='>::Character}},
// The number row should be rewritten as the F<number> row with Search
// key.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_1,
- ui::DomCode::DIGIT1,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '1'},
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_2,
- ui::DomCode::DIGIT2,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '2'},
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_3,
- ui::DomCode::DIGIT3,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '3'},
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_4,
- ui::DomCode::DIGIT4,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '4'},
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_5,
- ui::DomCode::DIGIT5,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '5'},
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_6,
- ui::DomCode::DIGIT6,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '6'},
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_7,
- ui::DomCode::DIGIT7,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '7'},
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_8,
- ui::DomCode::DIGIT8,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '8'},
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_9,
- ui::DomCode::DIGIT9,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '9'},
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_0,
- ui::DomCode::DIGIT0,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '0'},
- {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_MINUS,
- ui::DomCode::MINUS,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '-'},
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
- {ui::ET_KEY_PRESSED,
- {ui::VKEY_OEM_PLUS,
- ui::DomCode::EQUAL,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::CHARACTER,
- '='},
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}},
+ {ui::VKEY_1, ui::DomCode::DIGIT1, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'1'>::Character},
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_2, ui::DomCode::DIGIT2, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'2'>::Character},
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_3, ui::DomCode::DIGIT3, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'3'>::Character},
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_4, ui::DomCode::DIGIT4, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'4'>::Character},
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_5, ui::DomCode::DIGIT5, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'5'>::Character},
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_6, ui::DomCode::DIGIT6, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'6'>::Character},
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_7, ui::DomCode::DIGIT7, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'7'>::Character},
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_8, ui::DomCode::DIGIT8, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'8'>::Character},
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_9, ui::DomCode::DIGIT9, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'9'>::Character},
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_0, ui::DomCode::DIGIT0, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'0'>::Character},
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_OEM_MINUS, ui::DomCode::MINUS, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'-'>::Character},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}},
+ {ui::ET_KEY_PRESSED,
+ {ui::VKEY_OEM_PLUS, ui::DomCode::EQUAL, ui::EF_COMMAND_DOWN,
+ ui::DomKey::Constant<'='>::Character},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}},
// The function keys should not be rewritten with Search key pressed.
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0},
- {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}},
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1},
+ {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0},
- {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}},
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2},
+ {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0},
- {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}},
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3},
+ {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0},
- {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}},
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4},
+ {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0},
- {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}},
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5},
+ {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0},
- {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}},
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6},
+ {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0},
- {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}},
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7},
+ {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0},
- {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}},
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8},
+ {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0},
- {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}},
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9},
+ {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F10,
- ui::DomCode::F10,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::F10,
- 0},
- {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}},
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_COMMAND_DOWN, ui::DomKey::F10},
+ {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F11,
- ui::DomCode::F11,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::F11,
- 0},
- {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_COMMAND_DOWN, ui::DomKey::F11},
+ {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11}},
{ui::ET_KEY_PRESSED,
- {ui::VKEY_F12,
- ui::DomCode::F12,
- ui::EF_COMMAND_DOWN,
- ui::DomKey::F12,
- 0},
- {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}};
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_COMMAND_DOWN, ui::DomKey::F12},
+ {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12}}};
for (const auto& test : tests) {
CheckKeyTestCase(&rewriter, test);
@@ -2581,21 +1793,16 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
KeyTestCase tests[] = {
// Alt+Search+Down -> End
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
- ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}},
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
+ ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END}},
// Shift+Alt+Search+Down -> Shift+End
{ui::ET_KEY_PRESSED,
- {ui::VKEY_DOWN,
- ui::DomCode::ARROW_DOWN,
+ {ui::VKEY_DOWN, ui::DomCode::ARROW_DOWN,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
- ui::DomKey::ARROW_DOWN,
- 0},
- {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}},
+ ui::DomKey::ARROW_DOWN},
+ {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END}},
};
for (const auto& test : tests) {
@@ -2619,7 +1826,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
{
ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
ui::DomCode::CONTROL_LEFT, ui::EF_FINAL,
- ui::DomKey::CONTROL, 0, ui::EventTimeForNow());
+ ui::DomKey::CONTROL, ui::EventTimeForNow());
scoped_ptr<ui::Event> new_event;
// Control should NOT be remapped to Alt if EF_FINAL is set.
EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE,
@@ -2740,9 +1947,8 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
void SendKeyEvent(ui::EventType type,
ui::KeyboardCode key_code,
ui::DomCode code,
- ui::DomKey key,
- base::char16 character) {
- ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character,
+ ui::DomKey key) {
+ ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key,
ui::EventTimeForNow());
ui::EventDispatchDetails details = Send(&press);
CHECK(!details.dispatcher_destroyed);
@@ -2750,10 +1956,9 @@ class EventRewriterAshTest : public ash::test::AshTestBase {
void SendActivateStickyKeyPattern(ui::KeyboardCode key_code,
ui::DomCode code,
- ui::DomKey key,
- base::char16 character) {
- SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character);
- SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character);
+ ui::DomKey key) {
+ SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key);
+ SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key);
}
protected:
@@ -2804,7 +2009,7 @@ TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
// Create a simulated keypress of F1 targetted at the window.
ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1,
- ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow());
+ ui::EF_NONE, ui::DomKey::F1, ui::EventTimeForNow());
// Simulate an apps v2 window that has requested top row keys as function
// keys. The event should not be rewritten.
@@ -2813,10 +2018,10 @@ TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
ASSERT_FALSE(details.dispatcher_destroyed);
PopEvents(&events);
EXPECT_EQ(1u, events.size());
- EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
- ui::DomCode::F1, ui::EF_NONE,
- ui::DomKey::F1, 0),
- GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
+ EXPECT_EQ(
+ GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
+ ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1),
+ GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
// The event should also not be rewritten if the send-function-keys pref is
// additionally set, for both apps v2 and regular windows.
@@ -2828,10 +2033,10 @@ TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
ASSERT_FALSE(details.dispatcher_destroyed);
PopEvents(&events);
EXPECT_EQ(1u, events.size());
- EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
- ui::DomCode::F1, ui::EF_NONE,
- ui::DomKey::F1, 0),
- GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
+ EXPECT_EQ(
+ GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1,
+ ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1),
+ GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
// If the pref isn't set when an event is sent to a regular window, F1 is
// rewritten to the back key.
@@ -2842,7 +2047,7 @@ TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) {
EXPECT_EQ(1u, events.size());
EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK,
ui::DomCode::BROWSER_BACK, ui::EF_NONE,
- ui::DomKey::BROWSER_BACK, 0),
+ ui::DomKey::BROWSER_BACK),
GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0])));
}
@@ -3093,7 +2298,7 @@ TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
ScopedVector<ui::Event> events;
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
PopEvents(&events);
EXPECT_EQ(1u, events.size());
EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type());
@@ -3103,7 +2308,7 @@ TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
// Test key press event is correctly modified and modifier release
// event is sent.
ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C,
- ui::EF_NONE, ui::DomKey::CHARACTER, 'c',
+ ui::EF_NONE, ui::DomKey::Constant<'c'>::Character,
ui::EventTimeForNow());
ui::EventDispatchDetails details = Send(&press);
PopEvents(&events);
@@ -3117,7 +2322,7 @@ TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) {
// Test key release event is not modified.
ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C,
- ui::EF_NONE, ui::DomKey::CHARACTER, 'c',
+ ui::EF_NONE, ui::DomKey::Constant<'c'>::Character,
ui::EventTimeForNow());
details = Send(&release);
ASSERT_FALSE(details.dispatcher_destroyed);
@@ -3132,7 +2337,7 @@ TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) {
ScopedVector<ui::Event> events;
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
PopEvents(&events);
// Test mouse press event is correctly modified.
@@ -3169,7 +2374,7 @@ TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
// Test positive mouse wheel event is correctly modified and modifier release
// event is sent.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
PopEvents(&events);
gfx::Point location(0, 0);
ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location,
@@ -3189,7 +2394,7 @@ TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) {
// Test negative mouse wheel event is correctly modified and modifier release
// event is sent.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
PopEvents(&events);
ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta);
details = Send(&negative);
@@ -3225,14 +2430,14 @@ TEST_F(StickyKeysOverlayTest, OneModifierEnabled) {
// Pressing modifier key should show overlay.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
// Pressing a normal key should hide overlay.
SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T,
- ui::DomKey::CHARACTER, 't');
+ ui::DomKey::Constant<'t'>::Character);
EXPECT_FALSE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
@@ -3247,9 +2452,9 @@ TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
// Pressing two modifiers should show overlay.
SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
- ui::DomKey::SHIFT, 0);
+ ui::DomKey::SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN));
@@ -3258,7 +2463,7 @@ TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) {
// Pressing a normal key should hide overlay.
SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N,
- ui::DomKey::CHARACTER, 'n');
+ ui::DomKey::Constant<'n'>::Character);
EXPECT_FALSE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
@@ -3273,16 +2478,16 @@ TEST_F(StickyKeysOverlayTest, LockedModifier) {
// Pressing a modifier key twice should lock modifier and show overlay.
SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT, 0);
+ ui::DomKey::ALT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT, 0);
+ ui::DomKey::ALT);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
// Pressing a normal key should not hide overlay.
SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D,
- ui::DomKey::CHARACTER, 'd');
+ ui::DomKey::Constant<'d'>::Character);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
overlay_->GetModifierKeyState(ui::EF_ALT_DOWN));
@@ -3297,16 +2502,16 @@ TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
// Pressing a modifier key twice should lock modifier and show overlay.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
// Pressing another modifier key should still show overlay.
SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
- ui::DomKey::SHIFT, 0);
+ ui::DomKey::SHIFT);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
@@ -3315,7 +2520,7 @@ TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) {
// Pressing a normal key should not hide overlay but disable normal modifier.
SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D,
- ui::DomKey::CHARACTER, 'd');
+ ui::DomKey::Constant<'d'>::Character);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED,
overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN));
@@ -3336,17 +2541,17 @@ TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
// Enable modifiers.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
- ui::DomKey::SHIFT, 0);
+ ui::DomKey::SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
- ui::DomKey::SHIFT, 0);
+ ui::DomKey::SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT, 0);
+ ui::DomKey::ALT);
SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
- ui::DomKey::OS, 0);
+ ui::DomKey::OS);
SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
- ui::DomKey::OS, 0);
+ ui::DomKey::OS);
EXPECT_TRUE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED,
@@ -3360,17 +2565,17 @@ TEST_F(StickyKeysOverlayTest, ModifiersDisabled) {
// Disable modifiers and overlay should be hidden.
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT,
- ui::DomKey::CONTROL, 0);
+ ui::DomKey::CONTROL);
SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT,
- ui::DomKey::SHIFT, 0);
+ ui::DomKey::SHIFT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT, 0);
+ ui::DomKey::ALT);
SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT,
- ui::DomKey::ALT, 0);
+ ui::DomKey::ALT);
SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT,
- ui::DomKey::OS, 0);
+ ui::DomKey::OS);
EXPECT_FALSE(overlay_->is_visible());
EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED,
diff --git a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc b/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
index a2cf5bf..9a10aa7 100644
--- a/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
+++ b/chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc
@@ -81,7 +81,6 @@ ui::EventRewriteStatus KeyboardDrivenEventRewriter::Rewrite(
flags & ~(ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN),
key_event.code(),
key_event.GetDomKey(),
- key_event.GetCharacter(),
key_event.key_code()};
chromeos::EventRewriter::BuildRewrittenKeyEvent(key_event, state,
diff --git a/chrome/browser/chromeos/input_method/input_method_engine.cc b/chrome/browser/chromeos/input_method/input_method_engine.cc
index 8d85220..4fc93b2 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine.cc
@@ -309,18 +309,10 @@ bool InputMethodEngine::SendKeyEvents(
flags |= event.shift_key ? ui::EF_SHIFT_DOWN : ui::EF_NONE;
flags |= event.caps_lock ? ui::EF_CAPS_LOCK_DOWN : ui::EF_NONE;
- base::char16 ch = 0;
- // 4-bytes UTF-8 string is at least 2-characters UTF-16 string.
- // And Key char can only be single UTF-16 character.
- if (!event.key.empty() && event.key.size() < 4) {
- base::string16 key_char = base::UTF8ToUTF16(event.key);
- if (key_char.size() == 1)
- ch = key_char[0];
- }
ui::KeyEvent ui_event(
type, key_code,
ui::KeycodeConverter::CodeStringToDomCode(event.code.c_str()), flags,
- ui::KeycodeConverter::KeyStringToDomKey(event.key.c_str()), ch,
+ ui::KeycodeConverter::KeyStringToDomKey(event.key.c_str()),
ui::EventTimeForNow());
base::AutoReset<const ui::KeyEvent*> reset_sent_key(&sent_key_event_,
&ui_event);
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 5be1e02..111b414 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1904,6 +1904,7 @@
'../net/net.gyp:net',
'../third_party/zlib/google/zip.gyp:zip',
'../ui/base/ui_base.gyp:ui_base',
+ '../ui/events/events.gyp:dom_keycode_converter',
'../ui/events/events.gyp:events_base',
'../ui/events/ozone/events_ozone.gyp:events_ozone_layout',
'../ui/gfx/gfx.gyp:gfx',
diff --git a/chrome/test/chromedriver/BUILD.gn b/chrome/test/chromedriver/BUILD.gn
index 42ca016..20a1d82 100644
--- a/chrome/test/chromedriver/BUILD.gn
+++ b/chrome/test/chromedriver/BUILD.gn
@@ -162,6 +162,7 @@ source_set("lib") {
"//net:http_server",
"//third_party/zlib",
"//ui/base",
+ "//ui/events:dom_keycode_converter",
"//ui/events:events_base",
"//ui/gfx",
"//ui/gfx/geometry",
diff --git a/chrome/test/chromedriver/keycode_text_conversion_ozone.cc b/chrome/test/chromedriver/keycode_text_conversion_ozone.cc
index 0f15a1f..15217e8 100644
--- a/chrome/test/chromedriver/keycode_text_conversion_ozone.cc
+++ b/chrome/test/chromedriver/keycode_text_conversion_ozone.cc
@@ -10,6 +10,7 @@
#include "chrome/test/chromedriver/keycode_text_conversion.h"
#include "ui/events/event_constants.h"
#include "ui/events/keycodes/dom/dom_code.h"
+#include "ui/events/keycodes/dom/keycode_converter.h"
#include "ui/events/keycodes/keyboard_code_conversion.h"
#include "ui/events/ozone/layout/keyboard_layout_engine.h"
#include "ui/events/ozone/layout/keyboard_layout_engine_manager.h"
@@ -32,13 +33,12 @@ bool ConvertKeyCodeToText(ui::KeyboardCode key_code,
if (modifiers & kShiftKeyModifierMask)
event_flags |= ui::EF_SHIFT_DOWN;
- ui::DomKey dom_key_ignored;
- base::char16 str[2] = {'\0'};
+ ui::DomKey dom_key;
ui::KeyboardCode key_code_ignored;
uint32 platform_keycode_ignored;
- if (!keyboard_layout_engine->Lookup(dom_code, event_flags, &dom_key_ignored,
- &str[0], &key_code_ignored,
+ if (!keyboard_layout_engine->Lookup(dom_code, event_flags, &dom_key,
+ &key_code_ignored,
&platform_keycode_ignored)) {
// Key codes like ui::VKEY_UNKNOWN need to be mapped to the empty string, so
// even if the lookup fails we still need to return true here.
@@ -46,13 +46,14 @@ bool ConvertKeyCodeToText(ui::KeyboardCode key_code,
return true;
}
- if (!base::UTF16ToUTF8(str, base::c16len(str), text)) {
+ if (!dom_key.IsCharacter()) {
*error_msg = base::StringPrintf(
"unicode conversion failed for keycode %d with modifiers 0x%x",
key_code, modifiers);
return false;
}
+ *text = ui::KeycodeConverter::DomKeyToKeyString(dom_key);
return true;
}
diff --git a/content/browser/renderer_host/web_input_event_aura_unittest.cc b/content/browser/renderer_host/web_input_event_aura_unittest.cc
index 88cc6e1..12e178d 100644
--- a/content/browser/renderer_host/web_input_event_aura_unittest.cc
+++ b/content/browser/renderer_host/web_input_event_aura_unittest.cc
@@ -135,7 +135,7 @@ TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) {
// Press left Ctrl.
ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL, 0, ui::EventTimeForNow());
+ ui::DomKey::CONTROL, ui::EventTimeForNow());
blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event);
// ui::VKEY_LCONTROL, instead of ui::VKEY_CONTROL, should be filled.
EXPECT_EQ(ui::VKEY_LCONTROL, webkit_event.windowsKeyCode);
@@ -144,7 +144,7 @@ TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) {
// Press right Ctrl.
ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL,
ui::DomCode::CONTROL_RIGHT, ui::EF_CONTROL_DOWN,
- ui::DomKey::CONTROL, 0, ui::EventTimeForNow());
+ ui::DomKey::CONTROL, ui::EventTimeForNow());
blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event);
// ui::VKEY_RCONTROL, instead of ui::VKEY_CONTROL, should be filled.
EXPECT_EQ(ui::VKEY_RCONTROL, webkit_event.windowsKeyCode);
diff --git a/ui/base/ime/chromeos/character_composer.cc b/ui/base/ime/chromeos/character_composer.cc
index 20b27ef..cfb208e 100644
--- a/ui/base/ime/chromeos/character_composer.cc
+++ b/ui/base/ime/chromeos/character_composer.cc
@@ -110,8 +110,7 @@ bool CharacterComposer::FilterKeyPress(const ui::KeyEvent& event) {
bool CharacterComposer::FilterKeyPressSequenceMode(const KeyEvent& event) {
DCHECK(composition_mode_ == KEY_SEQUENCE_MODE);
- compose_buffer_.push_back(
- KeystrokeMeaning(event.GetDomKey(), event.GetCharacter()));
+ compose_buffer_.push_back(event.GetDomKey());
// Check compose table.
uint32 composed_character_utf32 = 0;
@@ -214,17 +213,22 @@ ComposeChecker::CheckSequenceResult TreeComposeChecker::CheckSequence(
DCHECK(tree_index < data_.tree_entries);
// If we are looking up a dead key, skip over the character tables.
- if (keystroke.key == ui::DomKey::DEAD) {
+ int32_t character = -1;
+ if (keystroke.IsDeadKey()) {
tree_index += 2 * data_.tree[tree_index] + 1; // internal unicode table
tree_index += 2 * data_.tree[tree_index] + 1; // leaf unicode table
- } else if (keystroke.key != ui::DomKey::CHARACTER) {
- return CheckSequenceResult::NO_MATCH;
+ character = keystroke.ToDeadKeyCombiningCharacter();
+ } else if (keystroke.IsCharacter()) {
+ character = keystroke.ToCharacter();
}
+ if (character < 0 || character > 0xFFFF)
+ return CheckSequenceResult::NO_MATCH;
// Check the internal subtree table.
uint16_t result = 0;
uint16_t entries = data_.tree[tree_index++];
- if (entries && Find(tree_index, entries, keystroke.character, &result)) {
+ if (entries &&
+ Find(tree_index, entries, static_cast<uint16_t>(character), &result)) {
tree_index = result;
continue;
}
@@ -232,7 +236,8 @@ ComposeChecker::CheckSequenceResult TreeComposeChecker::CheckSequence(
// Skip over the internal subtree table and check the leaf table.
tree_index += 2 * entries;
entries = data_.tree[tree_index++];
- if (entries && Find(tree_index, entries, keystroke.character, &result)) {
+ if (entries &&
+ Find(tree_index, entries, static_cast<uint16_t>(character), &result)) {
*composed_character = result;
return CheckSequenceResult::FULL_MATCH;
}
diff --git a/ui/base/ime/chromeos/character_composer.h b/ui/base/ime/chromeos/character_composer.h
index bcb4db9..78fae69 100644
--- a/ui/base/ime/chromeos/character_composer.h
+++ b/ui/base/ime/chromeos/character_composer.h
@@ -9,21 +9,16 @@
#include "base/strings/string_util.h"
#include "ui/base/ime/ui_base_ime_export.h"
+#include "ui/events/keycodes/dom/dom_key.h"
namespace ui {
class KeyEvent;
-enum class DomKey;
// A class to recognize compose and dead key sequence.
// Outputs composed character.
class UI_BASE_IME_EXPORT CharacterComposer {
public:
- struct KeystrokeMeaning {
- KeystrokeMeaning(DomKey k, base::char16 c) : key(k), character(c) {}
- DomKey key;
- base::char16 character;
- };
- using ComposeBuffer = std::vector<KeystrokeMeaning>;
+ using ComposeBuffer = std::vector<DomKey>;
CharacterComposer();
~CharacterComposer();
@@ -68,7 +63,7 @@ class UI_BASE_IME_EXPORT CharacterComposer {
void UpdatePreeditStringHexMode();
// Remembers keypresses previously filtered.
- std::vector<KeystrokeMeaning> compose_buffer_;
+ std::vector<DomKey> compose_buffer_;
// Records hexadecimal digits previously filtered.
std::vector<unsigned int> hex_buffer_;
diff --git a/ui/base/ime/chromeos/character_composer_unittest.cc b/ui/base/ime/chromeos/character_composer_unittest.cc
index 1e305c7..51b585f 100644
--- a/ui/base/ime/chromeos/character_composer_unittest.cc
+++ b/ui/base/ime/chromeos/character_composer_unittest.cc
@@ -34,7 +34,8 @@ class CharacterComposerTest : public testing::Test {
KeyEvent* DeadKeyPress(base::char16 combining_character) const {
KeyEvent* event =
new KeyEvent(ET_KEY_PRESSED, VKEY_UNKNOWN, DomCode::NONE, EF_NONE,
- DomKey::DEAD, combining_character, EventTimeForNow());
+ DomKey::DeadKeyFromCombiningCharacter(combining_character),
+ EventTimeForNow());
return event;
}
@@ -59,7 +60,7 @@ class CharacterComposerTest : public testing::Test {
int flags,
base::char16 character) const {
KeyEvent* event = new KeyEvent(ET_KEY_PRESSED, vkey, code, flags,
- CharacterToDomKey(character), character,
+ DomKey::FromCharacter(character),
EventTimeForNow());
return event;
}
diff --git a/ui/events/event.cc b/ui/events/event.cc
index 8b5b47d..383e373 100644
--- a/ui/events/event.cc
+++ b/ui/events/event.cc
@@ -673,9 +673,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event)
key_code_(KeyboardCodeFromNative(native_event)),
code_(CodeFromNative(native_event)),
is_char_(IsCharFromNative(native_event)),
- platform_keycode_(PlatformKeycodeFromNative(native_event)),
- key_(DomKey::NONE),
- character_(0) {
+ platform_keycode_(PlatformKeycodeFromNative(native_event)) {
if (IsRepeated(*this))
set_flags(flags() | ui::EF_IS_REPEAT);
@@ -685,7 +683,7 @@ KeyEvent::KeyEvent(const base::NativeEvent& native_event)
#if defined(OS_WIN)
// Only Windows has native character events.
if (is_char_)
- character_ = native_event.wParam;
+ key_ = DomKey::FromCharacter(native_event.wParam);
#endif
}
@@ -694,11 +692,7 @@ KeyEvent::KeyEvent(EventType type,
int flags)
: Event(type, EventTimeForNow(), flags),
key_code_(key_code),
- code_(UsLayoutKeyboardCodeToDomCode(key_code)),
- is_char_(false),
- platform_keycode_(0),
- key_(DomKey::NONE),
- character_() {
+ code_(UsLayoutKeyboardCodeToDomCode(key_code)) {
}
KeyEvent::KeyEvent(EventType type,
@@ -707,11 +701,7 @@ KeyEvent::KeyEvent(EventType type,
int flags)
: Event(type, EventTimeForNow(), flags),
key_code_(key_code),
- code_(code),
- is_char_(false),
- platform_keycode_(0),
- key_(DomKey::NONE),
- character_(0) {
+ code_(code) {
}
KeyEvent::KeyEvent(EventType type,
@@ -719,15 +709,11 @@ KeyEvent::KeyEvent(EventType type,
DomCode code,
int flags,
DomKey key,
- base::char16 character,
base::TimeDelta time_stamp)
: Event(type, time_stamp, flags),
key_code_(key_code),
code_(code),
- is_char_(false),
- platform_keycode_(0),
- key_(key),
- character_(character) {
+ key_(key) {
}
KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags)
@@ -735,9 +721,7 @@ KeyEvent::KeyEvent(base::char16 character, KeyboardCode key_code, int flags)
key_code_(key_code),
code_(DomCode::NONE),
is_char_(true),
- platform_keycode_(0),
- key_(DomKey::CHARACTER),
- character_(character) {
+ key_(DomKey::FromCharacter(character)) {
}
KeyEvent::KeyEvent(const KeyEvent& rhs)
@@ -746,8 +730,7 @@ KeyEvent::KeyEvent(const KeyEvent& rhs)
code_(rhs.code_),
is_char_(rhs.is_char_),
platform_keycode_(rhs.platform_keycode_),
- key_(rhs.key_),
- character_(rhs.character_) {
+ key_(rhs.key_) {
if (rhs.extended_key_event_data_)
extended_key_event_data_.reset(rhs.extended_key_event_data_->Clone());
}
@@ -760,7 +743,6 @@ KeyEvent& KeyEvent::operator=(const KeyEvent& rhs) {
key_ = rhs.key_;
is_char_ = rhs.is_char_;
platform_keycode_ = rhs.platform_keycode_;
- character_ = rhs.character_;
if (rhs.extended_key_event_data_)
extended_key_event_data_.reset(rhs.extended_key_event_data_->Clone());
@@ -775,14 +757,6 @@ void KeyEvent::SetExtendedKeyEventData(scoped_ptr<ExtendedKeyEventData> data) {
}
void KeyEvent::ApplyLayout() const {
- // If the client has set the character (e.g. faked key events from virtual
- // keyboard), it's client's responsibility to set the dom key correctly.
- // Otherwise, set the dom key as unidentified.
- // Please refer to crbug.com/443889.
- if (character_ != 0) {
- key_ = DomKey::UNIDENTIFIED;
- return;
- }
ui::DomCode code = code_;
if (code == DomCode::NONE) {
// Catch old code that tries to do layout without a physical key, and try
@@ -806,13 +780,12 @@ void KeyEvent::ApplyLayout() const {
// returns 'a' for VKEY_A even if the key is actually bound to 'à' in X11.
// GetCharacterFromXEvent returns 'à' in that case.
if (!IsControlDown() && native_event()) {
- GetMeaningFromXEvent(native_event(), &key_, &character_);
+ key_ = GetDomKeyFromXEvent(native_event());
return;
}
#elif defined(USE_OZONE)
if (KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup(
- code, flags(), &key_, &character_, &dummy_key_code,
- &platform_keycode_)) {
+ code, flags(), &key_, &dummy_key_code, &platform_keycode_)) {
return;
}
#else
@@ -821,33 +794,38 @@ void KeyEvent::ApplyLayout() const {
EventTypeFromNative(native_event()) == ET_KEY_RELEASED);
}
#endif
- if (!DomCodeToUsLayoutMeaning(code, flags(), &key_, &character_,
- &dummy_key_code)) {
+ if (!DomCodeToUsLayoutDomKey(code, flags(), &key_, &dummy_key_code))
key_ = DomKey::UNIDENTIFIED;
- }
}
DomKey KeyEvent::GetDomKey() const {
- // Determination of character_ and key_ may be done lazily.
+ // Determination of key_ may be done lazily.
if (key_ == DomKey::NONE)
ApplyLayout();
return key_;
}
base::char16 KeyEvent::GetCharacter() const {
- // Determination of character_ and key_ may be done lazily.
+ // Determination of key_ may be done lazily.
if (key_ == DomKey::NONE)
ApplyLayout();
- return character_;
+ if (key_.IsCharacter()) {
+ // Historically ui::KeyEvent has held only BMP characters.
+ // Until this explicitly changes, require |key_| to hold a BMP character.
+ DomKey::Base utf32_character = key_.ToCharacter();
+ base::char16 ucs2_character = static_cast<base::char16>(utf32_character);
+ DCHECK(static_cast<DomKey::Base>(ucs2_character) == utf32_character);
+ return ucs2_character;
+ }
+ return 0;
}
base::char16 KeyEvent::GetText() const {
if ((flags() & EF_CONTROL_DOWN) != 0) {
- base::char16 character;
ui::DomKey key;
ui::KeyboardCode key_code;
- if (DomCodeToControlCharacter(code_, flags(), &key, &character, &key_code))
- return character;
+ if (DomCodeToControlCharacter(code_, flags(), &key, &key_code))
+ return key.ToCharacter();
}
return GetUnmodifiedText();
}
@@ -908,7 +886,7 @@ KeyboardCode KeyEvent::GetLocatedWindowsKeyboardCode() const {
uint16 KeyEvent::GetConflatedWindowsKeyCode() const {
if (is_char_)
- return character_;
+ return key_.ToCharacter();
return key_code_;
}
diff --git a/ui/events/event.h b/ui/events/event.h
index 0667824..d06a181 100644
--- a/ui/events/event.h
+++ b/ui/events/event.h
@@ -15,6 +15,7 @@
#include "ui/events/event_constants.h"
#include "ui/events/gesture_event_details.h"
#include "ui/events/gestures/gesture_types.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/latency_info.h"
#include "ui/gfx/geometry/point.h"
@@ -27,7 +28,6 @@ class Transform;
namespace ui {
class EventTarget;
enum class DomCode;
-enum class DomKey;
class EVENTS_EXPORT Event {
public:
@@ -659,40 +659,38 @@ class EVENTS_EXPORT ExtendedKeyEventData {
// or a character event (is_char_ == true).
//
// For a keystroke event,
-// -- is_char_ is false.
-// -- Event::type() can be any one of ET_KEY_PRESSED, ET_KEY_RELEASED.
-// -- code_ and Event::flags() represent the physical key event.
+// -- |bool is_char_| is false.
+// -- |EventType Event::type()| can be ET_KEY_PRESSED or ET_KEY_RELEASED.
+// -- |DomCode code_| and |int Event::flags()| represent the physical key event.
// - code_ is a platform-independent representation of the physical key,
-// based on DOM KeyboardEvent |code| values. It does not vary depending
-// on key layout.
+// based on DOM UI Events KeyboardEvent |code| values. It does not
+// vary depending on key layout.
+// http://www.w3.org/TR/DOM-Level-3-Events-code/
// - Event::flags() provides the active modifiers for the physical key
// press. Its value reflects the state after the event; that is, for
// a modifier key, a press includes the corresponding flag and a release
// does not.
-// -- key_ and character_ provide the meaning of the key event, in the context
-// of the active layout and modifiers. Together they correspond to DOM
-// KeyboardEvent |key| values.
-// - key_ is an enumeration of non-Unicode meanings, plus sentinels
-// (specifically DomKey::CHARACTER for Unicode meanings).
-// - character_ is the code point for Unicode meanings.
-// -- key_code_ is a KeyboardCode value associated with the key. This supports
-// the legacy web event |keyCode| field, and the VKEY_ values are chosen
-// to match Windows/IE for compatibility. For printable characters, this
-// may or may not be a layout-mapped value, imitating MS Windows:
-// if the mapped key generates a character that has an associated VKEY_
-// code, then key_code_ is that code; if not, then key_code_ is the unmapped
-// VKEY_ code. For example, US, Greek, Cyrillic, Japanese, etc. all use
-// VKEY_Q for the key beside Tab, while French uses VKEY_A. The stored
-// key_code_ is non-located (e.g. VKEY_SHIFT rather than VKEY_LSHIFT,
-// VKEY_1 rather than VKEY_NUMPAD1).
+// -- |DomKey key_| provides the meaning (character or action) of the key
+// event, in the context of the active layout and modifiers. It corresponds
+// to DOM UI Events KeyboardEvent |key| values.
+// http://www.w3.org/TR/DOM-Level-3-Events-key/
+// -- |KeyboardCode key_code_| supports the legacy web event |keyCode| field,
+// and its VKEY_ values are chosen to match Windows/IE for compatibility.
+// For printable characters, this may or may not be a layout-mapped value,
+// imitating MS Windows: if the mapped key generates a character that has
+// an associated VKEY_ code, then key_code_ is that code; if not, then
+// key_code_ is the unmapped VKEY_ code. For example, US, Greek, Cyrillic,
+// Japanese, etc. all use VKEY_Q for the key beside Tab, while French uses
+// VKEY_A. The stored key_code_ is non-located (e.g. VKEY_SHIFT rather than
+// VKEY_LSHIFT, VKEY_1 rather than VKEY_NUMPAD1).
//
// For a character event,
-// -- is_char_ is true.
-// -- type() is ET_KEY_PRESSED.
-// -- code_ is DomCode::NONE.
-// -- key_ is DomKey::CHARACTER and character_ is a UTF-16 code point.
-// -- key_code_ is conflated with character_ by some code, because both
-// arrive in the wParam field of a Windows event.
+// -- |bool is_char_| is true.
+// -- |EventType Event::type()| is ET_KEY_PRESSED.
+// -- |DomCode code_| is DomCode::NONE.
+// -- |DomKey key_| is a UTF-16 code point.
+// -- |KeyboardCode key_code_| is conflated with the character-valued key_
+// by some code, because both arrive in the wParam field of a Windows event.
//
class EVENTS_EXPORT KeyEvent : public Event {
public:
@@ -701,7 +699,8 @@ class EVENTS_EXPORT KeyEvent : public Event {
// (WM_CHAR). Other systems have only keystroke events.
explicit KeyEvent(const base::NativeEvent& native_event);
- // Create a keystroke event.
+ // Create a keystroke event from a legacy KeyboardCode.
+ // This should not be used in new code.
KeyEvent(EventType type, KeyboardCode key_code, int flags);
// Create a fully defined keystroke event.
@@ -710,7 +709,6 @@ class EVENTS_EXPORT KeyEvent : public Event {
DomCode code,
int flags,
DomKey key,
- base::char16 character,
base::TimeDelta time_stamp);
// Create a character event.
@@ -744,7 +742,9 @@ class EVENTS_EXPORT KeyEvent : public Event {
// which allows an I18N virtual keyboard to fabricate a keyboard event that
// does not have a corresponding KeyboardCode (example: U+00E1 Latin small
// letter A with acute, U+0410 Cyrillic capital letter A).
- void set_character(base::char16 character) { character_ = character; }
+ void set_character(base::char16 character) {
+ key_ = DomKey::FromCharacter(character);
+ }
// Gets the character generated by this key event. It only supports Unicode
// BMP characters.
@@ -760,6 +760,7 @@ class EVENTS_EXPORT KeyEvent : public Event {
base::char16 GetText() const;
// Gets the platform key code. For XKB, this is the xksym value.
+ // This should not be used in new code.
void set_platform_keycode(uint32 keycode) { platform_keycode_ = keycode; }
uint32 platform_keycode() const { return platform_keycode_; }
@@ -810,7 +811,7 @@ class EVENTS_EXPORT KeyEvent : public Event {
void set_is_char(bool is_char) { is_char_ = is_char; }
private:
- // Determine key_ and character_ on a keystroke event from code_ and flags().
+ // Determine key_ on a keystroke event from code_ and flags().
void ApplyLayout() const;
KeyboardCode key_code_;
@@ -823,13 +824,13 @@ class EVENTS_EXPORT KeyEvent : public Event {
DomCode code_;
// True if this is a character event, false if this is a keystroke event.
- bool is_char_;
+ bool is_char_ = false;
// The platform related keycode value. For XKB, it's keysym value.
// For now, this is used for CharacterComposer in ChromeOS.
- mutable uint32 platform_keycode_;
+ mutable uint32 platform_keycode_ = 0;
- // TODO(kpschoedel): refactor so that key_ and character_ are not mutable.
+ // TODO(kpschoedel): refactor so that key_ is not mutable.
// This requires defining the KeyEvent completely at construction rather
// than lazily under GetCharacter(), which likely also means removing
// the two 'incomplete' constructors. crbug.com/444045
@@ -837,20 +838,11 @@ class EVENTS_EXPORT KeyEvent : public Event {
// DOM KeyboardEvent |key|
// http://www.w3.org/TR/DOM-Level-3-Events-key/
//
- // This value, together with character_, represents the meaning of a key.
- // The value is DomKey::CHARACTER when the interpretation is a character.
- // This, along with character_, is not necessarily initialized when the
- // event is constructed; it may be set only if and when GetCharacter()
- // or GetDomKey() is called.
- mutable DomKey key_;
-
- // String of 'key' defined in DOM KeyboardEvent (e.g. 'a', 'â')
- // http://www.w3.org/TR/uievents/#keyboard-key-codes.
- //
- // This value represents the text that the key event will insert to input
- // field. For key with modifier key, it may have specifial text.
- // e.g. CTRL+A has '\x01'.
- mutable base::char16 character_;
+ // This value represents the meaning of a key, which is either a Unicode
+ // character, or a named DomKey:: value.
+ // This is not necessarily initialized when the event is constructed;
+ // it may be set only if and when GetCharacter() or GetDomKey() is called.
+ mutable DomKey key_ = DomKey::NONE;
// Parts of our event handling require raw native events (see both the
// windows and linux implementations of web_input_event in content/). Because
diff --git a/ui/events/keycodes/dom/dom_key.h b/ui/events/keycodes/dom/dom_key.h
index 25ea092..9c88478 100644
--- a/ui/events/keycodes/dom/dom_key.h
+++ b/ui/events/keycodes/dom/dom_key.h
@@ -5,13 +5,154 @@
#ifndef UI_EVENTS_KEYCODES_DOM3_DOM_KEY_H_
#define UI_EVENTS_KEYCODES_DOM3_DOM_KEY_H_
+#include <stdint.h>
+
+#include "base/logging.h"
+
namespace ui {
+// Integer representation of UI Events KeyboardEvent.key value.
+//
+// The semantics follow the web string form[1]: the value is either a
+// Unicode character or one of a defined set of additional values[2].
+// There is one notable difference from the UI Events string key: for
+// the 'Dead' key, this type provides a whole range of values that also
+// encode the associated combining character. (They are not quite the
+// same thing: a dead key is a non-printing operator that modifies a
+// subsequent printing character, whereas a Unicode combining character
+// is a printable character in its own right that attaches to a preceding
+// character in a string.) This allows the interpretation of any keystroke
+// to be carried as a single integer value.
+//
+// DomKey::NONE is a sentinel used to indicate an error or undefined value.
+// It is not the same as Unicode code point 0 (ASCII NUL) or the valid DOM
+// key 'Unidentified'.
+//
+// References:
+// [1] http://www.w3.org/TR/uievents/#widl-KeyboardEvent-key
+// [2] http://www.w3.org/TR/DOM-Level-3-Events-key/
+//
+class DomKey {
+ public:
+ using Base = int32_t;
+
+ private:
+ // Integer representation of DomKey. This is arranged so that DomKey encoded
+ // values are distinct from Unicode code points, so that we can dynamically
+ // verify that they are not accidentally conflated.
+ //
+ // 31 24 16 8 0
+ // | | | | | | | | |
+ // | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ // | z |c|s| v |
+ //
+ // From low to high:
+ // - |v| is a value whose interpretation depends on the kind of key:
+ // - for a Unicode value, it is the code point (0 <= v <= 0x10FFFF);
+ // - for a dead key, the code point of the associated combining character;
+ // - for others, an arbitrary distinct value.
+ // - |s| is set for a valid symbolic key (i.e. not a Unicode character).
+ // - |c| is set if |v| holds a code point (for either a Unicode character
+ // directly, or a dead-key combining character).
+ // - |z| is reserved and always zero.
+ //
+ // As consequences of this representation,
+ // - all valid DomKey encodings have at least one of |c| or |s| set, so
+ // they can't be confused with raw Unicode characters (where both are 0).
+ // - integer 0 is not a valid encoding, and can be used for DomKey::NONE.
+ //
+ enum { VALUE_BITS = 21 };
+ enum Type : Base {
+ VALUE_MASK = (1L << VALUE_BITS) - 1,
+ TF_SYMBOLIC = (1L << VALUE_BITS),
+ TF_CODEPOINT = (1L << (VALUE_BITS + 1)),
+ TYPE_MASK = TF_CODEPOINT | TF_SYMBOLIC,
+ TYPE_UNICODE = TF_CODEPOINT,
+ TYPE_NON_UNICODE = TF_SYMBOLIC,
+ TYPE_DEAD = TF_CODEPOINT | TF_SYMBOLIC,
+ };
+ static_assert(TYPE_UNICODE != 0 && TYPE_NON_UNICODE != 0 && TYPE_DEAD != 0,
+ "suspicious representation change");
+
+ public:
+ enum InvalidKey : Base { NONE = 0 };
+// |dom_key_data.inc| describes the non-printable DomKey values, and is
+// included here to create constants for them in the DomKey:: scope.
+#define DOM_KEY_MAP_DECLARATION enum Key : Base
+#define DOM_KEY_UNI(key, id, value) id = (TYPE_UNICODE | (value))
+#define DOM_KEY_MAP_BEGIN FIRST_NON_UNICODE = TYPE_NON_UNICODE,
#define DOM_KEY_MAP(key, id) id
-#define DOM_KEY_MAP_DECLARATION enum class DomKey
+#define DOM_KEY_MAP_END LAST_NON_UNICODE
#include "ui/events/keycodes/dom/dom_key_data.inc"
-#undef DOM_KEY_MAP
#undef DOM_KEY_MAP_DECLARATION
+#undef DOM_KEY_MAP_BEGIN
+#undef DOM_KEY_MAP
+#undef DOM_KEY_MAP_END
+#undef DOM_KEY_UNI
+
+ // Create a DomKey, with the undefined-value sentinel DomKey::NONE.
+ DomKey() : value_(NONE) {}
+
+ // Create a DomKey from an encoded integer value. This is implicit so
+ // that DomKey::NAME constants don't need to be explicitly converted
+ // to DomKey.
+ DomKey(Base value) : value_(value) {
+ DCHECK(value == 0 || IsValid()) << value;
+ }
+
+ // Obtain the encoded integer representation of the DomKey.
+ operator Base() const { return value_; }
+
+ // True if the value is a valid DomKey (which excludes DomKey::NONE and
+ // integers not following the DomKey format).
+ bool IsValid() const { return (value_ & TYPE_MASK) != 0; }
+
+ // True if the value is a Unicode code point.
+ bool IsCharacter() const { return (value_ & TYPE_MASK) == TYPE_UNICODE; }
+
+ // True if the value is a dead key.
+ bool IsDeadKey() const { return (value_ & TYPE_MASK) == TYPE_DEAD; }
+
+ // Returns the Unicode code point for a Unicode key.
+ // It is incorrect to call this for other kinds of key.
+ int32_t ToCharacter() const {
+ DCHECK(IsCharacter()) << value_;
+ return value_ & VALUE_MASK;
+ }
+
+ // Returns the associated combining code point for a dead key.
+ // It is incorrect to call this for other kinds of key.
+ int32_t ToDeadKeyCombiningCharacter() const {
+ DCHECK(IsDeadKey()) << value_;
+ return value_ & VALUE_MASK;
+ }
+
+ // Returns a DomKey for the given Unicode character.
+ static DomKey FromCharacter(int32_t character) {
+ DCHECK(character >= 0 && character <= 0x10FFFF);
+ return DomKey(TYPE_UNICODE | character);
+ }
+
+ // Returns a dead-key DomKey for the given combining character.
+ static DomKey DeadKeyFromCombiningCharacter(int32_t combining_character) {
+ DCHECK(combining_character >= 0 && combining_character <= 0x10FFFF);
+ return DomKey(TYPE_DEAD | combining_character);
+ }
+
+ // Provide means to generate constant DomKey::Base values, primarily to
+ // allow conversion tables to be constant, without startup construction.
+ // In the future (cue the theremin) this can be replaced with constexpr
+ // functions.
+ template<Base C> struct Constant {
+ enum : Base {
+ Character = TYPE_UNICODE | C,
+ Dead = TYPE_DEAD | C,
+ };
+ };
+
+ private:
+ Base value_;
+};
} // namespace ui
diff --git a/ui/events/keycodes/dom/dom_key_data.inc b/ui/events/keycodes/dom/dom_key_data.inc
index a035ecb..c4a8450 100644
--- a/ui/events/keycodes/dom/dom_key_data.inc
+++ b/ui/events/keycodes/dom/dom_key_data.inc
@@ -21,17 +21,20 @@
DOM_KEY_MAP_DECLARATION {
- // The first entry, whose enum value will be zero, is reserved to mean
- // no value; there is no corresponding DOM string. (This is not the same
- // as the valid DOM .key value 'Unidentified'.)
-
- // Key Enum
- DOM_KEY_MAP(nullptr, NONE), // No value
-
- // A value of DomKey::CHARACTER indicates that the KeyboardEvent |key|
- // string is determined by the Unicode character interpretation and is
- // not one of the fixed string values.
- DOM_KEY_MAP(nullptr, CHARACTER),
+ // To avoid ambiguities, a small number of .key values that do have
+ // standard names are encoded identical to corresponding Unicode characters;
+ // for example, DomKey('\t') == DomKey::TAB.
+ //
+ // Key Enum Unicode code point
+ DOM_KEY_UNI("Backspace", BACKSPACE, 0x0008),
+ DOM_KEY_UNI("Tab", TAB, 0x0009),
+ DOM_KEY_UNI("Enter", ENTER, 0x000D),
+ DOM_KEY_UNI("Escape", ESCAPE, 0x001B),
+ // The enum constant for 'Delete' (Forward Delete) is named DEL because
+ // DELETE conflicts with an unscoped declaration in Windows' <windows.h>.
+ DOM_KEY_UNI("Delete", DEL, 0x007F),
+
+ DOM_KEY_MAP_BEGIN
// =========================================================
// Special Key Values
@@ -84,9 +87,9 @@ DOM_KEY_MAP_DECLARATION {
// ============================================================
// Key Enum
- DOM_KEY_MAP("Enter", ENTER), // Enter, Return
+ // "Enter" is encoded in the Unicode space (at the end of this list).
DOM_KEY_MAP("Separator", SEPARATOR),
- DOM_KEY_MAP("Tab", TAB),
+ // "Tab" is encoded in the Unicode space.
// ============================================================
// Navigation Keys
@@ -109,13 +112,12 @@ DOM_KEY_MAP_DECLARATION {
// =========================================================
// Key Enum
- DOM_KEY_MAP("Backspace", BACKSPACE),
+ // "Backspace" is encoded in the Unicode space.
DOM_KEY_MAP("Clear", CLEAR),
DOM_KEY_MAP("Copy", COPY),
DOM_KEY_MAP("CrSel", CR_SEL), // Cursor Select
DOM_KEY_MAP("Cut", CUT),
- // Delete (Forward Delete) named DEL because DELETE conflicts with <windows.h>
- DOM_KEY_MAP("Delete", DEL),
+ // "Delete" is encoded in the Unicode space.
DOM_KEY_MAP("EraseEof", ERASE_EOF), // Erase to End of Field
DOM_KEY_MAP("ExSel", EX_SEL), // Extend Selection
DOM_KEY_MAP("Insert", INSERT),
@@ -134,7 +136,7 @@ DOM_KEY_MAP_DECLARATION {
DOM_KEY_MAP("Attn", ATTN), // Attention
DOM_KEY_MAP("Cancel", CANCEL),
DOM_KEY_MAP("ContextMenu", CONTEXT_MENU),
- DOM_KEY_MAP("Escape", ESCAPE),
+ // "Escape" is encoded in the Unicode space.
DOM_KEY_MAP("Execute", EXECUTE),
DOM_KEY_MAP("Find", FIND),
DOM_KEY_MAP("Help", HELP),
@@ -174,7 +176,7 @@ DOM_KEY_MAP_DECLARATION {
DOM_KEY_MAP("CodeInput", CODE_INPUT),
DOM_KEY_MAP("Compose", COMPOSE),
DOM_KEY_MAP("Convert", CONVERT),
- DOM_KEY_MAP("Dead", DEAD),
+ // "Dead" is represented as a flag plus combining character.
DOM_KEY_MAP("FinalMode", FINAL_MODE),
DOM_KEY_MAP("GroupFirst", GROUP_FIRST),
DOM_KEY_MAP("GroupLast", GROUP_LAST),
@@ -387,4 +389,6 @@ DOM_KEY_MAP_DECLARATION {
DOM_KEY_MAP("VideoModeNext", VIDEO_MODE_NEXT),
DOM_KEY_MAP("Wink", WINK),
DOM_KEY_MAP("ZoomToggle", ZOOM_TOGGLE),
+
+ DOM_KEY_MAP_END
};
diff --git a/ui/events/keycodes/dom/keycode_converter.cc b/ui/events/keycodes/dom/keycode_converter.cc
index 9aef53f..0ce3452 100644
--- a/ui/events/keycodes/dom/keycode_converter.cc
+++ b/ui/events/keycodes/dom/keycode_converter.cc
@@ -5,6 +5,7 @@
#include "ui/events/keycodes/dom/keycode_converter.h"
#include "base/logging.h"
+#include "base/strings/utf_string_conversion_utils.h"
#include "ui/events/keycodes/dom/dom_code.h"
#include "ui/events/keycodes/dom/dom_key.h"
@@ -36,11 +37,17 @@ struct DomKeyMapEntry {
const char* string;
};
-#define DOM_KEY_MAP(key, id) {DomKey::id, key}
#define DOM_KEY_MAP_DECLARATION const DomKeyMapEntry dom_key_map[] =
+#define DOM_KEY_UNI(key, id, value) {DomKey::id, key}
+#define DOM_KEY_MAP_BEGIN
+#define DOM_KEY_MAP(key, id) {DomKey::id, key}
+#define DOM_KEY_MAP_END
#include "ui/events/keycodes/dom/dom_key_data.inc"
-#undef DOM_KEY_MAP
#undef DOM_KEY_MAP_DECLARATION
+#undef DOM_KEY_MAP_BEGIN
+#undef DOM_KEY_MAP
+#undef DOM_KEY_MAP_END
+#undef DOM_KEY_UNI
const size_t kDomKeyMapEntries = arraysize(dom_key_map);
@@ -166,22 +173,51 @@ DomKeyLocation KeycodeConverter::DomCodeToLocation(DomCode dom_code) {
DomKey KeycodeConverter::KeyStringToDomKey(const char* key) {
if (!key || !*key)
return DomKey::NONE;
+ // Check for standard key names.
for (size_t i = 0; i < kDomKeyMapEntries; ++i) {
- if (dom_key_map[i].string &&
- strcmp(dom_key_map[i].string, key) == 0) {
+ if (dom_key_map[i].string && strcmp(dom_key_map[i].string, key) == 0) {
return dom_key_map[i].dom_key;
}
}
+ if (strcmp(key, "Dead") == 0) {
+ // The web KeyboardEvent string does not encode the combining character,
+ // so we just set it to the Unicode designated non-character 0xFFFF.
+ // This will round-trip convert back to 'Dead' but take no part in
+ // character composition.
+ return DomKey::DeadKeyFromCombiningCharacter(0xFFFF);
+ }
+ // Otherwise, if the string contains a single Unicode character,
+ // the key value is that character.
+ int32_t char_index = 0;
+ uint32_t character;
+ if (base::ReadUnicodeCharacter(key, static_cast<int32_t>(strlen(key)),
+ &char_index, &character) &&
+ key[++char_index] == 0) {
+ return DomKey::FromCharacter(character);
+ }
return DomKey::NONE;
}
// static
-const char* KeycodeConverter::DomKeyToKeyString(DomKey dom_key) {
+std::string KeycodeConverter::DomKeyToKeyString(DomKey dom_key) {
+ if (dom_key.IsDeadKey()) {
+ // All dead-key combining codes collapse to 'Dead', as UI Events
+ // KeyboardEvent represents the combining character separately.
+ return "Dead";
+ }
for (size_t i = 0; i < kDomKeyMapEntries; ++i) {
- if (dom_key_map[i].dom_key == dom_key)
- return dom_key_map[i].string;
+ if (dom_key_map[i].dom_key == dom_key) {
+ if (dom_key_map[i].string)
+ return dom_key_map[i].string;
+ break;
+ }
}
- return "";
+ if (dom_key.IsCharacter()) {
+ std::string s;
+ base::WriteUnicodeCharacter(dom_key.ToCharacter(), &s);
+ return s;
+ }
+ return std::string();
}
// static
diff --git a/ui/events/keycodes/dom/keycode_converter.h b/ui/events/keycodes/dom/keycode_converter.h
index 71c3fd3..6a2547c 100644
--- a/ui/events/keycodes/dom/keycode_converter.h
+++ b/ui/events/keycodes/dom/keycode_converter.h
@@ -6,7 +6,10 @@
#define UI_EVENTS_KEYCODES_DOM4_KEYCODE_CONVERTER_H_
#include <stdint.h>
+#include <string>
+
#include "base/basictypes.h"
+#include "ui/events/keycodes/dom/dom_key.h"
// For reference, the W3C UI Event spec is located at:
// http://www.w3.org/TR/uievents/
@@ -14,7 +17,6 @@
namespace ui {
enum class DomCode;
-enum class DomKey;
enum class DomKeyLocation { STANDARD, LEFT, RIGHT, NUMPAD };
@@ -64,10 +66,15 @@ class KeycodeConverter {
static DomKeyLocation DomCodeToLocation(DomCode dom_code);
// Convert a UI Events |key| string value into a DomKey.
+ // Accepts a character string containing either
+ // - a key name from http://www.w3.org/TR/DOM-Level-3-Events-key/, or
+ // - a single Unicode character (represented in UTF-8).
+ // Returns DomKey::NONE for other inputs, including |nullptr|.
static DomKey KeyStringToDomKey(const char* key);
// Convert a DomKey into a UI Events |key| string value.
- static const char* DomKeyToKeyString(DomKey dom_key);
+ // For an invalid DomKey, returns an empty string.
+ static std::string DomKeyToKeyString(DomKey dom_key);
// Returns true if the DomKey is a modifier.
static bool IsDomKeyForModifier(DomKey dom_key);
diff --git a/ui/events/keycodes/dom/keycode_converter_unittest.cc b/ui/events/keycodes/dom/keycode_converter_unittest.cc
index f5da9a0..09dc5af 100644
--- a/ui/events/keycodes/dom/keycode_converter_unittest.cc
+++ b/ui/events/keycodes/dom/keycode_converter_unittest.cc
@@ -131,18 +131,68 @@ TEST(KeycodeConverter, DomCode) {
}
TEST(KeycodeConverter, DomKey) {
- // Test invalid and unknown arguments to KeyStringToDomKey()
- EXPECT_EQ(ui::DomKey::NONE, ui::KeycodeConverter::KeyStringToDomKey(nullptr));
- EXPECT_EQ(ui::DomKey::NONE, ui::KeycodeConverter::KeyStringToDomKey("-"));
- // Round-trip test DOM Level 3 .key strings.
+ const struct {
+ ui::DomKey::Base key;
+ bool is_character;
+ bool is_dead;
+ bool test_to_string;
+ const char* const string;
+ } test_cases[] = {
+ // Invalid arguments to KeyStringToDomKey().
+ {ui::DomKey::NONE, false, false, false, nullptr},
+ {ui::DomKey::NONE, false, false, true, ""},
+ {ui::DomKey::NONE, false, false, false, "?!?"},
+ {ui::DomKey::NONE, false, false, false, "\x61\xCC\x81"},
+ // Some single Unicode characters.
+ {ui::DomKey::Constant<'-'>::Character, true, false, true, "-"},
+ {ui::DomKey::Constant<'A'>::Character, true, false, true, "A"},
+ {ui::DomKey::Constant<0xE1>::Character, true, false, true, "\xC3\xA1"},
+ {ui::DomKey::Constant<0x1F648>::Character, true, false, true,
+ "\xF0\x9F\x99\x88"},
+ // Unicode-equivalent named values.
+ {ui::DomKey::BACKSPACE, true, false, true, "Backspace"},
+ {ui::DomKey::TAB, true, false, true, "Tab"},
+ {ui::DomKey::ENTER, true, false, true, "Enter"},
+ {ui::DomKey::ESCAPE, true, false, true, "Escape"},
+ {ui::DomKey::DEL, true, false, true, "Delete"},
+ {ui::DomKey::BACKSPACE, true, false, false, "\b"},
+ {ui::DomKey::TAB, true, false, false, "\t"},
+ {ui::DomKey::ENTER, true, false, false, "\r"},
+ {ui::DomKey::ESCAPE, true, false, false, "\x1B"},
+ {ui::DomKey::DEL, true, false, false, "\x7F"},
+ {ui::DomKey::Constant<'\b'>::Character, true, false, true, "Backspace"},
+ {ui::DomKey::Constant<'\t'>::Character, true, false, true, "Tab"},
+ {ui::DomKey::Constant<'\r'>::Character, true, false, true, "Enter"},
+ {ui::DomKey::Constant<0x1B>::Character, true, false, true, "Escape"},
+ {ui::DomKey::Constant<0x7F>::Character, true, false, true, "Delete"},
+ // 'Dead' key.
+ {ui::DomKey::Constant<0xFFFF>::Dead, false, true, true, "Dead"},
+ // Sample non-Unicode key names.
+ {ui::DomKey::SHIFT, false, false, true, "Shift"},
+ {ui::DomKey::F16, false, false, true, "F16"},
+ {ui::DomKey::ZOOM_IN, false, false, true, "ZoomIn"},
+ {ui::DomKey::UNIDENTIFIED, false, false, true, "Unidentified"},
+ };
+ for (const auto& test : test_cases) {
+ // Check KeyStringToDomKey().
+ ui::DomKey key = ui::KeycodeConverter::KeyStringToDomKey(test.string);
+ EXPECT_EQ(test.is_character, key.IsCharacter());
+ EXPECT_EQ(test.is_dead, key.IsDeadKey());
+ EXPECT_EQ(test.key, key);
+ // Check |DomKeyToKeyString()|.
+ if (test.test_to_string) {
+ std::string s(ui::KeycodeConverter::DomKeyToKeyString(test.key));
+ EXPECT_STREQ(test.string, s.c_str());
+ }
+ }
+ // Round-trip test all UI Events KeyboardEvent.key strings.
const char* s = nullptr;
for (size_t i = 0;
- (s = ui::KeycodeConverter::DomKeyStringForTest(i)) != nullptr;
- ++i) {
+ (s = ui::KeycodeConverter::DomKeyStringForTest(i)) != nullptr; ++i) {
SCOPED_TRACE(i);
ui::DomKey key = ui::KeycodeConverter::KeyStringToDomKey(s);
if (s) {
- EXPECT_STREQ(s, ui::KeycodeConverter::DomKeyToKeyString(key));
+ EXPECT_STREQ(s, ui::KeycodeConverter::DomKeyToKeyString(key).c_str());
} else {
EXPECT_EQ(ui::DomKey::NONE, key);
}
diff --git a/ui/events/keycodes/dom_us_layout_data.h b/ui/events/keycodes/dom_us_layout_data.h
index f520dc7..d3fe962 100644
--- a/ui/events/keycodes/dom_us_layout_data.h
+++ b/ui/events/keycodes/dom_us_layout_data.h
@@ -8,7 +8,7 @@
namespace ui {
// This table maps a DomCode to a printable character, assuming US layout.
-// It is used by DomCodeToUsLayoutMeaning(), which provides a fallback
+// It is used by DomCodeToUsLayoutDomKey(), which provides a fallback
// interpretation when there is no other way to map a physical key.
const struct PrintableCodeEntry {
DomCode dom_code;
@@ -88,12 +88,11 @@ const struct PrintableCodeEntry {
};
// This table maps a DomCode to a DomKey, assuming US keyboard layout.
-// It is used by DomCodeToUsLayoutMeaning(), which provides a fallback
+// It is used by DomCodeToUsLayoutDomKey(), which provides a fallback
// interpretation when there is no other way to map a physical key.
const struct NonPrintableCodeEntry {
DomCode dom_code;
- DomKey dom_key;
- base::char16 character;
+ DomKey::Base dom_key;
} kNonPrintableCodeMap[] = {
{DomCode::ABORT, DomKey::CANCEL},
{DomCode::AGAIN, DomKey::AGAIN},
@@ -103,7 +102,7 @@ const struct NonPrintableCodeEntry {
{DomCode::ARROW_LEFT, DomKey::ARROW_LEFT},
{DomCode::ARROW_RIGHT, DomKey::ARROW_RIGHT},
{DomCode::ARROW_UP, DomKey::ARROW_UP},
- {DomCode::BACKSPACE, DomKey::BACKSPACE, 0x0008},
+ {DomCode::BACKSPACE, DomKey::BACKSPACE},
{DomCode::BRIGHTNESS_DOWN, DomKey::BRIGHTNESS_DOWN},
{DomCode::BRIGHTNESS_UP, DomKey::BRIGHTNESS_UP},
// {DomCode::BRIGHTNESS_AUTO, DomKey::_}
@@ -124,11 +123,11 @@ const struct NonPrintableCodeEntry {
{DomCode::CONVERT, DomKey::CONVERT},
{DomCode::COPY, DomKey::COPY},
{DomCode::CUT, DomKey::CUT},
- {DomCode::DEL, DomKey::DEL, 0x007F},
+ {DomCode::DEL, DomKey::DEL},
{DomCode::EJECT, DomKey::EJECT},
{DomCode::END, DomKey::END},
- {DomCode::ENTER, DomKey::ENTER, 0x000D},
- {DomCode::ESCAPE, DomKey::ESCAPE, 0x001B},
+ {DomCode::ENTER, DomKey::ENTER},
+ {DomCode::ESCAPE, DomKey::ESCAPE},
{DomCode::F1, DomKey::F1},
{DomCode::F2, DomKey::F2},
{DomCode::F3, DomKey::F3},
@@ -186,9 +185,9 @@ const struct NonPrintableCodeEntry {
// {DomCode::MENU, DomKey::_}
{DomCode::NON_CONVERT, DomKey::NON_CONVERT},
{DomCode::NUM_LOCK, DomKey::NUM_LOCK},
- {DomCode::NUMPAD_BACKSPACE, DomKey::BACKSPACE, 0x0008},
+ {DomCode::NUMPAD_BACKSPACE, DomKey::BACKSPACE},
{DomCode::NUMPAD_CLEAR, DomKey::CLEAR},
- {DomCode::NUMPAD_ENTER, DomKey::ENTER, 0x000D},
+ {DomCode::NUMPAD_ENTER, DomKey::ENTER},
// {DomCode::NUMPAD_CLEAR_ENTRY, DomKey::_}
// {DomCode::NUMPAD_MEMORY_ADD, DomKey::_}
// {DomCode::NUMPAD_MEMORY_CLEAR, DomKey::_}
@@ -211,7 +210,7 @@ const struct NonPrintableCodeEntry {
{DomCode::SHIFT_LEFT, DomKey::SHIFT},
{DomCode::SHIFT_RIGHT, DomKey::SHIFT},
{DomCode::SUPER, DomKey::SUPER},
- {DomCode::TAB, DomKey::TAB, 0x0009},
+ {DomCode::TAB, DomKey::TAB},
{DomCode::UNDO, DomKey::UNDO},
// {DomCode::VOICE_COMMAND, DomKey::_}
{DomCode::VOLUME_DOWN, DomKey::VOLUME_DOWN},
@@ -223,7 +222,7 @@ const struct NonPrintableCodeEntry {
// This table maps a DomKey to a non-located KeyboardCode.
const struct DomKeyToKeyboardCodeEntry {
- DomKey dom_key;
+ DomKey::Base dom_key;
KeyboardCode key_code;
} kDomKeyToKeyboardCodeMap[] = {
// No value.
diff --git a/ui/events/keycodes/keyboard_code_conversion.cc b/ui/events/keycodes/keyboard_code_conversion.cc
index 5996f56..6229ab3 100644
--- a/ui/events/keycodes/keyboard_code_conversion.cc
+++ b/ui/events/keycodes/keyboard_code_conversion.cc
@@ -16,115 +16,126 @@ namespace ui {
namespace {
// This table maps a subset of |KeyboardCode| (VKEYs) to DomKey and character.
-// Only values not otherwise handled by GetMeaningFromKeyCode() are here.
-const struct KeyboardCodeToMeaning {
+// Only values not otherwise handled by GetDomKeyFromKeyCode() are here.
+const struct KeyboardCodeToDomKey {
KeyboardCode key_code;
- DomKey key;
- base::char16 plain_character;
- base::char16 shift_character;
-} kKeyboardCodeToMeaning[] = {
- {VKEY_BACK, DomKey::BACKSPACE, '\b', 0},
- {VKEY_TAB, DomKey::TAB, '\t', 0},
- {VKEY_RETURN, DomKey::ENTER, '\r', 0},
- {VKEY_ESCAPE, DomKey::ESCAPE, 0x1B, 0},
- {VKEY_SPACE, DomKey::CHARACTER, ' ', 0},
- {VKEY_MULTIPLY, DomKey::CHARACTER, '*', 0},
- {VKEY_ADD, DomKey::CHARACTER, '+', 0},
- {VKEY_SEPARATOR, DomKey::CHARACTER, ',', 0},
- {VKEY_SUBTRACT, DomKey::CHARACTER, '-', 0},
- {VKEY_DECIMAL, DomKey::CHARACTER, '.', 0},
- {VKEY_DIVIDE, DomKey::CHARACTER, '/', 0},
- {VKEY_OEM_1, DomKey::CHARACTER, ';', ':'},
- {VKEY_OEM_PLUS, DomKey::CHARACTER, '=', '+'},
- {VKEY_OEM_COMMA, DomKey::CHARACTER, ',', '<'},
- {VKEY_OEM_MINUS, DomKey::CHARACTER, '-', '_'},
- {VKEY_OEM_PERIOD, DomKey::CHARACTER, '.', '>'},
- {VKEY_OEM_2, DomKey::CHARACTER, '/', '?'},
- {VKEY_OEM_3, DomKey::CHARACTER, '`', '~'},
- {VKEY_OEM_4, DomKey::CHARACTER, '[', '{'},
- {VKEY_OEM_5, DomKey::CHARACTER, '\\', '|'},
- {VKEY_OEM_6, DomKey::CHARACTER, ']', '}'},
- {VKEY_OEM_7, DomKey::CHARACTER, '\'', '"'},
- {VKEY_OEM_102, DomKey::CHARACTER, '<', '>'},
- {VKEY_CLEAR, DomKey::CLEAR, 0, 0},
- {VKEY_SHIFT, DomKey::SHIFT, 0, 0},
- {VKEY_CONTROL, DomKey::CONTROL, 0, 0},
- {VKEY_MENU, DomKey::ALT, 0, 0},
- {VKEY_PAUSE, DomKey::PAUSE, 0, 0},
- {VKEY_CAPITAL, DomKey::CAPS_LOCK, 0, 0},
+ DomKey::Base plain;
+ DomKey::Base shift;
+} kKeyboardCodeToDomKey[] = {
+ {VKEY_BACK, DomKey::BACKSPACE},
+ {VKEY_TAB, DomKey::TAB},
+ {VKEY_RETURN, DomKey::ENTER},
+ {VKEY_ESCAPE, DomKey::ESCAPE},
+ {VKEY_SPACE, DomKey::Constant<' '>::Character},
+ {VKEY_MULTIPLY, DomKey::Constant<'*'>::Character},
+ {VKEY_ADD, DomKey::Constant<'+'>::Character},
+ {VKEY_SEPARATOR, DomKey::Constant<','>::Character},
+ {VKEY_SUBTRACT, DomKey::Constant<'-'>::Character},
+ {VKEY_DECIMAL, DomKey::Constant<'.'>::Character},
+ {VKEY_DIVIDE, DomKey::Constant<'/'>::Character},
+ {VKEY_OEM_1, DomKey::Constant<';'>::Character,
+ DomKey::Constant<':'>::Character},
+ {VKEY_OEM_PLUS, DomKey::Constant<'='>::Character,
+ DomKey::Constant<'+'>::Character},
+ {VKEY_OEM_COMMA, DomKey::Constant<','>::Character,
+ DomKey::Constant<'<'>::Character},
+ {VKEY_OEM_MINUS, DomKey::Constant<'-'>::Character,
+ DomKey::Constant<'_'>::Character},
+ {VKEY_OEM_PERIOD, DomKey::Constant<'.'>::Character,
+ DomKey::Constant<'>'>::Character},
+ {VKEY_OEM_2, DomKey::Constant<'/'>::Character,
+ DomKey::Constant<'?'>::Character},
+ {VKEY_OEM_3, DomKey::Constant<'`'>::Character,
+ DomKey::Constant<'~'>::Character},
+ {VKEY_OEM_4, DomKey::Constant<'['>::Character,
+ DomKey::Constant<'{'>::Character},
+ {VKEY_OEM_5, DomKey::Constant<'\\'>::Character,
+ DomKey::Constant<'|'>::Character},
+ {VKEY_OEM_6, DomKey::Constant<']'>::Character,
+ DomKey::Constant<'}'>::Character},
+ {VKEY_OEM_7, DomKey::Constant<'\''>::Character,
+ DomKey::Constant<'"'>::Character},
+ {VKEY_OEM_102, DomKey::Constant<'<'>::Character,
+ DomKey::Constant<'>'>::Character},
+ {VKEY_CLEAR, DomKey::CLEAR},
+ {VKEY_SHIFT, DomKey::SHIFT},
+ {VKEY_CONTROL, DomKey::CONTROL},
+ {VKEY_MENU, DomKey::ALT},
+ {VKEY_PAUSE, DomKey::PAUSE},
+ {VKEY_CAPITAL, DomKey::CAPS_LOCK},
// Windows conflates 'KanaMode' and 'HangulMode'.
- {VKEY_KANA, DomKey::KANA_MODE, 0, 0},
- {VKEY_JUNJA, DomKey::JUNJA_MODE, 0, 0},
- {VKEY_FINAL, DomKey::FINAL_MODE, 0, 0},
+ {VKEY_KANA, DomKey::KANA_MODE},
+ {VKEY_JUNJA, DomKey::JUNJA_MODE},
+ {VKEY_FINAL, DomKey::FINAL_MODE},
// Windows conflates 'HanjaMode' and 'KanjiMode'.
- {VKEY_HANJA, DomKey::HANJA_MODE, 0, 0},
- {VKEY_CONVERT, DomKey::CONVERT, 0, 0},
- {VKEY_NONCONVERT, DomKey::NON_CONVERT, 0, 0},
- {VKEY_ACCEPT, DomKey::ACCEPT, 0, 0},
- {VKEY_MODECHANGE, DomKey::MODE_CHANGE, 0, 0},
- {VKEY_PRIOR, DomKey::PAGE_UP, 0, 0},
- {VKEY_NEXT, DomKey::PAGE_DOWN, 0, 0},
- {VKEY_END, DomKey::END, 0, 0},
- {VKEY_HOME, DomKey::HOME, 0, 0},
- {VKEY_LEFT, DomKey::ARROW_LEFT, 0, 0},
- {VKEY_UP, DomKey::ARROW_UP, 0, 0},
- {VKEY_RIGHT, DomKey::ARROW_RIGHT, 0, 0},
- {VKEY_DOWN, DomKey::ARROW_DOWN, 0, 0},
- {VKEY_SELECT, DomKey::SELECT, 0, 0},
- {VKEY_PRINT, DomKey::PRINT, 0, 0},
- {VKEY_EXECUTE, DomKey::EXECUTE, 0, 0},
- {VKEY_SNAPSHOT, DomKey::PRINT_SCREEN, 0, 0},
- {VKEY_INSERT, DomKey::INSERT, 0, 0},
- {VKEY_DELETE, DomKey::DEL, 0, 0},
- {VKEY_HELP, DomKey::HELP, 0, 0},
- {VKEY_LWIN, DomKey::OS, 0, 0},
- {VKEY_RWIN, DomKey::OS, 0, 0},
- {VKEY_APPS, DomKey::MEDIA_APPS, 0, 0},
- {VKEY_NUMLOCK, DomKey::NUM_LOCK, 0, 0},
- {VKEY_SCROLL, DomKey::SCROLL_LOCK, 0, 0},
- {VKEY_LSHIFT, DomKey::SHIFT, 0, 0},
- {VKEY_RSHIFT, DomKey::SHIFT, 0, 0},
- {VKEY_LCONTROL, DomKey::CONTROL, 0, 0},
- {VKEY_RCONTROL, DomKey::CONTROL, 0, 0},
- {VKEY_LMENU, DomKey::ALT, 0, 0},
- {VKEY_RMENU, DomKey::ALT, 0, 0},
- {VKEY_BROWSER_BACK, DomKey::BROWSER_BACK, 0, 0},
- {VKEY_BROWSER_FORWARD, DomKey::BROWSER_FORWARD, 0, 0},
- {VKEY_BROWSER_REFRESH, DomKey::BROWSER_REFRESH, 0, 0},
- {VKEY_BROWSER_STOP, DomKey::BROWSER_STOP, 0, 0},
- {VKEY_BROWSER_SEARCH, DomKey::BROWSER_SEARCH, 0, 0},
- {VKEY_BROWSER_FAVORITES, DomKey::BROWSER_FAVORITES, 0, 0},
- {VKEY_BROWSER_HOME, DomKey::BROWSER_HOME, 0, 0},
- {VKEY_VOLUME_MUTE, DomKey::VOLUME_MUTE, 0, 0},
- {VKEY_VOLUME_DOWN, DomKey::VOLUME_DOWN, 0, 0},
- {VKEY_VOLUME_UP, DomKey::VOLUME_UP, 0, 0},
- {VKEY_MEDIA_NEXT_TRACK, DomKey::MEDIA_TRACK_NEXT, 0, 0},
- {VKEY_MEDIA_PREV_TRACK, DomKey::MEDIA_TRACK_PREVIOUS, 0, 0},
- {VKEY_MEDIA_STOP, DomKey::MEDIA_STOP, 0, 0},
- {VKEY_MEDIA_PLAY_PAUSE, DomKey::MEDIA_PLAY_PAUSE, 0, 0},
- {VKEY_MEDIA_LAUNCH_MAIL, DomKey::LAUNCH_MAIL, 0, 0},
- {VKEY_MEDIA_LAUNCH_MEDIA_SELECT, DomKey::LAUNCH_MEDIA_PLAYER, 0, 0},
- {VKEY_MEDIA_LAUNCH_APP1, DomKey::LAUNCH_MY_COMPUTER, 0, 0},
- {VKEY_MEDIA_LAUNCH_APP2, DomKey::LAUNCH_CALCULATOR, 0, 0},
- {VKEY_OEM_8, DomKey::SUPER, 0, 0}, // ISO Level 5 Shift in ChromeOS
- {VKEY_PROCESSKEY, DomKey::PROCESS, 0, 0},
- {VKEY_DBE_SBCSCHAR, DomKey::HANKAKU, 0, 0},
- {VKEY_DBE_DBCSCHAR, DomKey::ZENKAKU, 0, 0},
- {VKEY_ATTN, DomKey::ATTN, 0, 0},
- {VKEY_CRSEL, DomKey::CR_SEL, 0, 0},
- {VKEY_EXSEL, DomKey::EX_SEL, 0, 0},
- {VKEY_EREOF, DomKey::ERASE_EOF, 0, 0},
- {VKEY_PLAY, DomKey::MEDIA_PLAY, 0, 0},
- {VKEY_ZOOM, DomKey::ZOOM_TOGGLE, 0, 0},
- {VKEY_OEM_CLEAR, DomKey::CLEAR, 0, 0},
- {VKEY_ALTGR, DomKey::ALT_GRAPH, 0, 0},
+ {VKEY_HANJA, DomKey::HANJA_MODE},
+ {VKEY_CONVERT, DomKey::CONVERT},
+ {VKEY_NONCONVERT, DomKey::NON_CONVERT},
+ {VKEY_ACCEPT, DomKey::ACCEPT},
+ {VKEY_MODECHANGE, DomKey::MODE_CHANGE},
+ {VKEY_PRIOR, DomKey::PAGE_UP},
+ {VKEY_NEXT, DomKey::PAGE_DOWN},
+ {VKEY_END, DomKey::END},
+ {VKEY_HOME, DomKey::HOME},
+ {VKEY_LEFT, DomKey::ARROW_LEFT},
+ {VKEY_UP, DomKey::ARROW_UP},
+ {VKEY_RIGHT, DomKey::ARROW_RIGHT},
+ {VKEY_DOWN, DomKey::ARROW_DOWN},
+ {VKEY_SELECT, DomKey::SELECT},
+ {VKEY_PRINT, DomKey::PRINT},
+ {VKEY_EXECUTE, DomKey::EXECUTE},
+ {VKEY_SNAPSHOT, DomKey::PRINT_SCREEN},
+ {VKEY_INSERT, DomKey::INSERT},
+ {VKEY_DELETE, DomKey::DEL},
+ {VKEY_HELP, DomKey::HELP},
+ {VKEY_LWIN, DomKey::OS},
+ {VKEY_RWIN, DomKey::OS},
+ {VKEY_APPS, DomKey::MEDIA_APPS},
+ {VKEY_NUMLOCK, DomKey::NUM_LOCK},
+ {VKEY_SCROLL, DomKey::SCROLL_LOCK},
+ {VKEY_LSHIFT, DomKey::SHIFT},
+ {VKEY_RSHIFT, DomKey::SHIFT},
+ {VKEY_LCONTROL, DomKey::CONTROL},
+ {VKEY_RCONTROL, DomKey::CONTROL},
+ {VKEY_LMENU, DomKey::ALT},
+ {VKEY_RMENU, DomKey::ALT},
+ {VKEY_BROWSER_BACK, DomKey::BROWSER_BACK},
+ {VKEY_BROWSER_FORWARD, DomKey::BROWSER_FORWARD},
+ {VKEY_BROWSER_REFRESH, DomKey::BROWSER_REFRESH},
+ {VKEY_BROWSER_STOP, DomKey::BROWSER_STOP},
+ {VKEY_BROWSER_SEARCH, DomKey::BROWSER_SEARCH},
+ {VKEY_BROWSER_FAVORITES, DomKey::BROWSER_FAVORITES},
+ {VKEY_BROWSER_HOME, DomKey::BROWSER_HOME},
+ {VKEY_VOLUME_MUTE, DomKey::VOLUME_MUTE},
+ {VKEY_VOLUME_DOWN, DomKey::VOLUME_DOWN},
+ {VKEY_VOLUME_UP, DomKey::VOLUME_UP},
+ {VKEY_MEDIA_NEXT_TRACK, DomKey::MEDIA_TRACK_NEXT},
+ {VKEY_MEDIA_PREV_TRACK, DomKey::MEDIA_TRACK_PREVIOUS},
+ {VKEY_MEDIA_STOP, DomKey::MEDIA_STOP},
+ {VKEY_MEDIA_PLAY_PAUSE, DomKey::MEDIA_PLAY_PAUSE},
+ {VKEY_MEDIA_LAUNCH_MAIL, DomKey::LAUNCH_MAIL},
+ {VKEY_MEDIA_LAUNCH_MEDIA_SELECT, DomKey::LAUNCH_MEDIA_PLAYER},
+ {VKEY_MEDIA_LAUNCH_APP1, DomKey::LAUNCH_MY_COMPUTER},
+ {VKEY_MEDIA_LAUNCH_APP2, DomKey::LAUNCH_CALCULATOR},
+ {VKEY_OEM_8, DomKey::SUPER}, // ISO Level 5 Shift in ChromeOS
+ {VKEY_PROCESSKEY, DomKey::PROCESS},
+ {VKEY_DBE_SBCSCHAR, DomKey::HANKAKU},
+ {VKEY_DBE_DBCSCHAR, DomKey::ZENKAKU},
+ {VKEY_ATTN, DomKey::ATTN},
+ {VKEY_CRSEL, DomKey::CR_SEL},
+ {VKEY_EXSEL, DomKey::EX_SEL},
+ {VKEY_EREOF, DomKey::ERASE_EOF},
+ {VKEY_PLAY, DomKey::MEDIA_PLAY},
+ {VKEY_ZOOM, DomKey::ZOOM_TOGGLE},
+ {VKEY_OEM_CLEAR, DomKey::CLEAR},
+ {VKEY_ALTGR, DomKey::ALT_GRAPH},
#if defined(OS_POSIX)
- {VKEY_POWER, DomKey::POWER, 0, 0},
- {VKEY_BRIGHTNESS_DOWN, DomKey::BRIGHTNESS_DOWN, 0, 0},
- {VKEY_BRIGHTNESS_UP, DomKey::BRIGHTNESS_UP, 0, 0},
- {VKEY_COMPOSE, DomKey::COMPOSE, 0, 0},
- {VKEY_OEM_103, DomKey::MEDIA_REWIND, 0, 0},
- {VKEY_OEM_104, DomKey::MEDIA_FAST_FORWARD, 0, 0},
+ {VKEY_POWER, DomKey::POWER},
+ {VKEY_BRIGHTNESS_DOWN, DomKey::BRIGHTNESS_DOWN},
+ {VKEY_BRIGHTNESS_UP, DomKey::BRIGHTNESS_UP},
+ {VKEY_COMPOSE, DomKey::COMPOSE},
+ {VKEY_OEM_103, DomKey::MEDIA_REWIND},
+ {VKEY_OEM_104, DomKey::MEDIA_FAST_FORWARD},
#endif
};
@@ -143,17 +154,13 @@ bool IsModifierDomCode(DomCode code) {
} // anonymous namespace
base::char16 GetCharacterFromKeyCode(KeyboardCode key_code, int flags) {
- ui::DomKey dom_key;
- base::char16 character;
- if (GetMeaningFromKeyCode(key_code, flags, &dom_key, &character))
- return character;
+ DomKey key = GetDomKeyFromKeyCode(key_code, flags);
+ if (key.IsCharacter())
+ return key.ToCharacter();
return 0;
}
-bool GetMeaningFromKeyCode(KeyboardCode key_code,
- int flags,
- DomKey* dom_key,
- base::char16* character) {
+DomKey GetDomKeyFromKeyCode(KeyboardCode key_code, int flags) {
const bool ctrl = (flags & EF_CONTROL_DOWN) != 0;
const bool shift = (flags & EF_SHIFT_DOWN) != 0;
const bool upper = shift ^ ((flags & EF_CAPS_LOCK_DOWN) != 0);
@@ -161,135 +168,80 @@ bool GetMeaningFromKeyCode(KeyboardCode key_code,
// Control characters.
if (ctrl) {
// Following Windows behavior to map ctrl-a ~ ctrl-z to \x01 ~ \x1A.
- if (key_code >= VKEY_A && key_code <= VKEY_Z) {
- *character = static_cast<uint16>(key_code - VKEY_A + 1);
- switch (key_code) {
- case VKEY_H:
- *dom_key = DomKey::BACKSPACE;
- break;
- case VKEY_I:
- *dom_key = DomKey::TAB;
- break;
- case VKEY_J:
- case VKEY_M:
- *dom_key = DomKey::ENTER;
- break;
- default:
- *dom_key = DomKey::CHARACTER;
- break;
- }
- return true;
- }
+ if (key_code >= VKEY_A && key_code <= VKEY_Z)
+ return DomKey::FromCharacter(key_code - VKEY_A + 1);
// Other control characters.
if (shift) {
// The following graphics characters require the shift key to input.
switch (key_code) {
// ctrl-@ maps to \x00 (Null byte)
case VKEY_2:
- *dom_key = DomKey::CHARACTER;
- *character = 0;
- return true;
+ return DomKey::FromCharacter(0);
// ctrl-^ maps to \x1E (Record separator, Information separator two)
case VKEY_6:
- *dom_key = DomKey::CHARACTER;
- *character = 0x1E;
- return true;
+ return DomKey::FromCharacter(0x1E);
// ctrl-_ maps to \x1F (Unit separator, Information separator one)
case VKEY_OEM_MINUS:
- *dom_key = DomKey::CHARACTER;
- *character = 0x1F;
- return true;
- // Returns 0 for all other keys to avoid inputting unexpected chars.
+ return DomKey::FromCharacter(0x1F);
+ // Returns UNIDENTIFIED for all other keys to avoid inputting
+ // unexpected chars.
default:
- *dom_key = DomKey::UNIDENTIFIED;
- *character = 0;
- return false;
+ return DomKey::UNIDENTIFIED;
}
} else {
switch (key_code) {
// ctrl-[ maps to \x1B (Escape)
case VKEY_OEM_4:
- *dom_key = DomKey::ESCAPE;
- *character = 0x1B;
- return true;
+ return DomKey::ESCAPE;
// ctrl-\ maps to \x1C (File separator, Information separator four)
case VKEY_OEM_5:
- *dom_key = DomKey::CHARACTER;
- *character = 0x1C;
- return true;
+ return DomKey::FromCharacter(0x1C);
// ctrl-] maps to \x1D (Group separator, Information separator three)
case VKEY_OEM_6:
- *dom_key = DomKey::CHARACTER;
- *character = 0x1D;
- return true;
+ return DomKey::FromCharacter(0x1D);
// ctrl-Enter maps to \x0A (Line feed)
case VKEY_RETURN:
- *dom_key = DomKey::CHARACTER;
- *character = 0x0A;
- return true;
- // Returns 0 for all other keys to avoid inputting unexpected chars.
+ return DomKey::FromCharacter(0x0A);
+ // Returns UNIDENTIFIED for all other keys to avoid inputting
+ // unexpected chars.
default:
- *dom_key = DomKey::UNIDENTIFIED;
- *character = 0;
- return false;
+ return DomKey::UNIDENTIFIED;
}
}
}
// ASCII alphanumeric characters.
- if (key_code >= VKEY_A && key_code <= VKEY_Z) {
- *dom_key = DomKey::CHARACTER;
- *character = static_cast<uint16>(key_code - VKEY_A + (upper ? 'A' : 'a'));
- return true;
- }
+ if (key_code >= VKEY_A && key_code <= VKEY_Z)
+ return DomKey::FromCharacter(key_code - VKEY_A + (upper ? 'A' : 'a'));
if (key_code >= VKEY_0 && key_code <= VKEY_9) {
- *dom_key = DomKey::CHARACTER;
- *character =
- shift ? ")!@#$%^&*("[key_code - VKEY_0] : static_cast<uint16>(key_code);
- return true;
- }
- if (key_code >= VKEY_NUMPAD0 && key_code <= VKEY_NUMPAD9) {
- *dom_key = DomKey::CHARACTER;
- *character = static_cast<uint16>(key_code - VKEY_NUMPAD0 + '0');
- return true;
+ return DomKey::FromCharacter(shift ? ")!@#$%^&*("[key_code - VKEY_0]
+ : '0' + key_code - VKEY_0);
}
+ if (key_code >= VKEY_NUMPAD0 && key_code <= VKEY_NUMPAD9)
+ return DomKey::FromCharacter(key_code - VKEY_NUMPAD0 + '0');
// Function keys.
- if (key_code >= VKEY_F1 && key_code <= VKEY_F24) {
- *dom_key =
- static_cast<DomKey>(key_code - VKEY_F1 + static_cast<int>(DomKey::F1));
- *character = 0;
- return true;
- }
+ if (key_code >= VKEY_F1 && key_code <= VKEY_F24)
+ return DomKey::FromCharacter(key_code - VKEY_F1 + DomKey::F1);
// Other keys.
- for (size_t i = 0; i < arraysize(kKeyboardCodeToMeaning); ++i) {
- if (kKeyboardCodeToMeaning[i].key_code == key_code) {
- const KeyboardCodeToMeaning* p = &kKeyboardCodeToMeaning[i];
- *dom_key = p->key;
- *character = (shift && p->shift_character) ? p->shift_character
- : p->plain_character;
- return true;
- }
+ for (const auto& k : kKeyboardCodeToDomKey) {
+ if (k.key_code == key_code)
+ return (shift && k.shift) ? k.shift : k.plain;
}
- *dom_key = DomKey::UNIDENTIFIED;
- *character = 0;
- return false;
+ return DomKey::UNIDENTIFIED;
}
-bool DomCodeToUsLayoutMeaning(DomCode dom_code,
- int flags,
- DomKey* out_dom_key,
- base::char16* out_character,
- KeyboardCode* out_key_code) {
+bool DomCodeToUsLayoutDomKey(DomCode dom_code,
+ int flags,
+ DomKey* out_dom_key,
+ KeyboardCode* out_key_code) {
if ((flags & EF_CONTROL_DOWN) == EF_CONTROL_DOWN) {
- if (DomCodeToControlCharacter(dom_code, flags, out_dom_key, out_character,
- out_key_code)) {
+ if (DomCodeToControlCharacter(dom_code, flags, out_dom_key, out_key_code)) {
return true;
}
if (!IsModifierDomCode(dom_code)) {
*out_dom_key = DomKey::UNIDENTIFIED;
- *out_character = 0;
*out_key_code = LocatedToNonLocatedKeyboardCode(
DomCodeToUsLayoutKeyboardCode(dom_code));
return true;
@@ -299,13 +251,12 @@ bool DomCodeToUsLayoutMeaning(DomCode dom_code,
if (it.dom_code == dom_code) {
int state = ((flags & EF_SHIFT_DOWN) == EF_SHIFT_DOWN);
base::char16 ch = it.character[state];
- *out_dom_key = DomKey::CHARACTER;
- *out_character = ch;
if ((flags & EF_CAPS_LOCK_DOWN) == EF_CAPS_LOCK_DOWN) {
ch |= 0x20;
if ((ch >= 'a') && (ch <= 'z'))
- *out_character = it.character[state ^ 1];
+ ch = it.character[state ^ 1];
}
+ *out_dom_key = DomKey::FromCharacter(ch);
*out_key_code = LocatedToNonLocatedKeyboardCode(
DomCodeToUsLayoutKeyboardCode(dom_code));
return true;
@@ -315,14 +266,12 @@ bool DomCodeToUsLayoutMeaning(DomCode dom_code,
for (const auto& it : kNonPrintableCodeMap) {
if (it.dom_code == dom_code) {
*out_dom_key = it.dom_key;
- *out_character = it.character;
*out_key_code = NonPrintableDomKeyToKeyboardCode(it.dom_key);
return true;
}
}
if ((flags & EF_CONTROL_DOWN) == EF_CONTROL_DOWN) {
*out_dom_key = DomKey::UNIDENTIFIED;
- *out_character = 0;
*out_key_code = LocatedToNonLocatedKeyboardCode(
DomCodeToUsLayoutKeyboardCode(dom_code));
return true;
@@ -333,7 +282,6 @@ bool DomCodeToUsLayoutMeaning(DomCode dom_code,
bool DomCodeToControlCharacter(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code) {
if ((flags & EF_CONTROL_DOWN) == 0)
return false;
@@ -342,23 +290,19 @@ bool DomCodeToControlCharacter(DomCode dom_code,
const int kKeyA = static_cast<int>(DomCode::KEY_A);
// Control-A - Control-Z map to 0x01 - 0x1A.
if (code >= kKeyA && code <= static_cast<int>(DomCode::KEY_Z)) {
- *character = static_cast<base::char16>(code - kKeyA + 1);
+ *dom_key = DomKey::FromCharacter(code - kKeyA + 1);
+ *key_code = static_cast<KeyboardCode>(code - kKeyA + VKEY_A);
switch (dom_code) {
case DomCode::KEY_H:
- *dom_key = DomKey::BACKSPACE;
*key_code = VKEY_BACK;
break;
case DomCode::KEY_I:
- *dom_key = DomKey::TAB;
*key_code = VKEY_TAB;
break;
case DomCode::KEY_M:
- *dom_key = DomKey::ENTER;
*key_code = VKEY_RETURN;
break;
default:
- *dom_key = DomKey::CHARACTER;
- *key_code = static_cast<KeyboardCode>(code - kKeyA + VKEY_A);
break;
}
return true;
@@ -368,20 +312,17 @@ bool DomCodeToControlCharacter(DomCode dom_code,
switch (dom_code) {
case DomCode::DIGIT2:
// NUL
- *character = 0;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0);
*key_code = VKEY_2;
return true;
case DomCode::DIGIT6:
// RS
- *character = 0x1E;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0x1E);
*key_code = VKEY_6;
return true;
case DomCode::MINUS:
// US
- *character = 0x1F;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0x1F);
*key_code = VKEY_OEM_MINUS;
return true;
default:
@@ -392,26 +333,22 @@ bool DomCodeToControlCharacter(DomCode dom_code,
switch (dom_code) {
case DomCode::ENTER:
// NL
- *character = 0x0A;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0x0A);
*key_code = VKEY_RETURN;
return true;
case DomCode::BRACKET_LEFT:
// ESC
- *character = 0x1B;
- *dom_key = DomKey::ESCAPE;
+ *dom_key = DomKey::FromCharacter(0x1B);
*key_code = VKEY_OEM_4;
return true;
case DomCode::BACKSLASH:
// FS
- *character = 0x1C;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0x1C);
*key_code = VKEY_OEM_5;
return true;
case DomCode::BRACKET_RIGHT:
// GS
- *character = 0x1D;
- *dom_key = DomKey::CHARACTER;
+ *dom_key = DomKey::FromCharacter(0x1D);
*key_code = VKEY_OEM_6;
return true;
default:
@@ -419,23 +356,6 @@ bool DomCodeToControlCharacter(DomCode dom_code,
}
}
-DomKey CharacterToDomKey(uint32 character) {
- switch (character) {
- case 0x08:
- return DomKey::BACKSPACE;
- case 0x09:
- return DomKey::TAB;
- case 0x0D:
- return DomKey::ENTER;
- case 0x1B:
- return DomKey::ESCAPE;
- case 0x7F:
- return DomKey::DEL;
- default:
- return DomKey::CHARACTER;
- }
-}
-
// Returns a Windows-based VKEY for a non-printable DOM Level 3 |key|.
// The returned VKEY is non-positional (e.g. VKEY_SHIFT).
KeyboardCode NonPrintableDomKeyToKeyboardCode(DomKey dom_key) {
diff --git a/ui/events/keycodes/keyboard_code_conversion.h b/ui/events/keycodes/keyboard_code_conversion.h
index 7b7618b..526ead5 100644
--- a/ui/events/keycodes/keyboard_code_conversion.h
+++ b/ui/events/keycodes/keyboard_code_conversion.h
@@ -8,12 +8,12 @@
#include "base/compiler_specific.h"
#include "base/strings/string16.h"
#include "ui/events/events_base_export.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes.h"
namespace ui {
enum class DomCode;
-enum class DomKey;
// Helper functions to get the meaning of a Windows key code in a
// platform independent way. It supports control characters as well.
@@ -35,10 +35,8 @@ enum class DomKey;
// crbug.com/444045
EVENTS_BASE_EXPORT base::char16 GetCharacterFromKeyCode(KeyboardCode key_code,
int flags);
-EVENTS_BASE_EXPORT bool GetMeaningFromKeyCode(KeyboardCode key_code,
- int flags,
- DomKey* dom_key,
- base::char16* character);
+EVENTS_BASE_EXPORT DomKey GetDomKeyFromKeyCode(KeyboardCode key_code,
+ int flags);
// Helper function to map a physical key state (dom_code and flags)
// to a meaning (dom_key and character, together corresponding to the
@@ -50,11 +48,10 @@ EVENTS_BASE_EXPORT bool GetMeaningFromKeyCode(KeyboardCode key_code,
// Returns true and sets the output parameters if the (dom_code, flags) pair
// has an interpretation in the US English layout; otherwise the output
// parameters are untouched.
-EVENTS_BASE_EXPORT bool DomCodeToUsLayoutMeaning(DomCode dom_code,
- int flags,
- DomKey* dom_key,
- base::char16* character,
- KeyboardCode* key_code)
+EVENTS_BASE_EXPORT bool DomCodeToUsLayoutDomKey(DomCode dom_code,
+ int flags,
+ DomKey* dom_key,
+ KeyboardCode* key_code)
WARN_UNUSED_RESULT;
// Obtains the control character corresponding to a physical key;
@@ -66,15 +63,9 @@ EVENTS_BASE_EXPORT bool DomCodeToUsLayoutMeaning(DomCode dom_code,
EVENTS_BASE_EXPORT bool DomCodeToControlCharacter(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code)
WARN_UNUSED_RESULT;
-// Returns the DomKey value associated with an ASCII/Unicode character.
-// All printable characters and most other character codes use
-// DomKey::CHARACTER, but a few ASCII C0 codes have their own DomKey.
-EVENTS_BASE_EXPORT DomKey CharacterToDomKey(uint32 character);
-
// Returns a Windows-based VKEY for a non-printable DOM Level 3 |key|.
// The returned VKEY is non-located (e.g. VKEY_SHIFT).
EVENTS_BASE_EXPORT KeyboardCode
diff --git a/ui/events/keycodes/keyboard_code_conversion_unittest.cc b/ui/events/keycodes/keyboard_code_conversion_unittest.cc
index fbf3dbe..eb76451 100644
--- a/ui/events/keycodes/keyboard_code_conversion_unittest.cc
+++ b/ui/events/keycodes/keyboard_code_conversion_unittest.cc
@@ -18,27 +18,23 @@ namespace {
struct Meaning {
bool defined;
- ui::DomKey dom_key;
- base::char16 character;
- ui::KeyboardCode legacy_key_code;
+ ui::DomKey::Base dom_key;
+ ui::KeyboardCode key_code;
};
-const Meaning kUndefined = {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN};
+const Meaning kUndefined = {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN};
void CheckDomCodeToMeaning(const char* label,
bool f(ui::DomCode dom_code,
int flags,
ui::DomKey* out_dom_key,
- base::char16* out_character,
ui::KeyboardCode* out_key_code),
ui::DomCode dom_code,
int event_flags,
const Meaning& result) {
ui::DomKey result_dom_key = ui::DomKey::NONE;
- base::char16 result_character = 0;
- ui::KeyboardCode result_legacy_key_code = ui::VKEY_UNKNOWN;
- bool success = f(dom_code, event_flags, &result_dom_key, &result_character,
- &result_legacy_key_code);
+ ui::KeyboardCode result_key_code = ui::VKEY_UNKNOWN;
+ bool success = f(dom_code, event_flags, &result_dom_key, &result_key_code);
SCOPED_TRACE(
base::StringPrintf("%s %s %06X:%04X", label,
ui::KeycodeConverter::DomCodeToCodeString(dom_code),
@@ -50,13 +46,11 @@ void CheckDomCodeToMeaning(const char* label,
<< ui::KeycodeConverter::DomKeyToKeyString(result.dom_key)
<< "' Actual '"
<< ui::KeycodeConverter::DomKeyToKeyString(result_dom_key) << "'";
- EXPECT_EQ(result.character, result_character);
- EXPECT_EQ(result.legacy_key_code, result_legacy_key_code);
+ EXPECT_EQ(result.key_code, result_key_code);
} else {
// Should not have touched output parameters.
EXPECT_EQ(ui::DomKey::NONE, result_dom_key);
- EXPECT_EQ(0, result_character);
- EXPECT_EQ(ui::VKEY_UNKNOWN, result_legacy_key_code);
+ EXPECT_EQ(ui::VKEY_UNKNOWN, result_key_code);
}
}
@@ -68,83 +62,83 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
Meaning control_shift;
} kControlCharacters[] = {
{ui::DomCode::KEY_A,
- {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A},
- {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A}},
+ {true, ui::DomKey::Constant<0x01>::Character, ui::VKEY_A},
+ {true, ui::DomKey::Constant<0x01>::Character, ui::VKEY_A}},
{ui::DomCode::KEY_B,
- {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B},
- {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B}},
+ {true, ui::DomKey::Constant<0x02>::Character, ui::VKEY_B},
+ {true, ui::DomKey::Constant<0x02>::Character, ui::VKEY_B}},
{ui::DomCode::KEY_C,
- {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C},
- {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C}},
+ {true, ui::DomKey::Constant<0x03>::Character, ui::VKEY_C},
+ {true, ui::DomKey::Constant<0x03>::Character, ui::VKEY_C}},
{ui::DomCode::KEY_D,
- {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D},
- {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D}},
+ {true, ui::DomKey::Constant<0x04>::Character, ui::VKEY_D},
+ {true, ui::DomKey::Constant<0x04>::Character, ui::VKEY_D}},
{ui::DomCode::KEY_E,
- {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E},
- {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E}},
+ {true, ui::DomKey::Constant<0x05>::Character, ui::VKEY_E},
+ {true, ui::DomKey::Constant<0x05>::Character, ui::VKEY_E}},
{ui::DomCode::KEY_F,
- {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F},
- {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F}},
+ {true, ui::DomKey::Constant<0x06>::Character, ui::VKEY_F},
+ {true, ui::DomKey::Constant<0x06>::Character, ui::VKEY_F}},
{ui::DomCode::KEY_G,
- {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G},
- {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G}},
+ {true, ui::DomKey::Constant<0x07>::Character, ui::VKEY_G},
+ {true, ui::DomKey::Constant<0x07>::Character, ui::VKEY_G}},
{ui::DomCode::KEY_H,
- {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK},
- {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK}},
+ {true, ui::DomKey::BACKSPACE, ui::VKEY_BACK},
+ {true, ui::DomKey::BACKSPACE, ui::VKEY_BACK}},
{ui::DomCode::KEY_I,
- {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB},
- {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB}},
+ {true, ui::DomKey::TAB, ui::VKEY_TAB},
+ {true, ui::DomKey::TAB, ui::VKEY_TAB}},
{ui::DomCode::KEY_J,
- {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J},
- {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J}},
+ {true, ui::DomKey::Constant<0x0A>::Character, ui::VKEY_J},
+ {true, ui::DomKey::Constant<0x0A>::Character, ui::VKEY_J}},
{ui::DomCode::KEY_K,
- {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K},
- {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K}},
+ {true, ui::DomKey::Constant<0x0B>::Character, ui::VKEY_K},
+ {true, ui::DomKey::Constant<0x0B>::Character, ui::VKEY_K}},
{ui::DomCode::KEY_L,
- {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L},
- {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L}},
+ {true, ui::DomKey::Constant<0x0C>::Character, ui::VKEY_L},
+ {true, ui::DomKey::Constant<0x0C>::Character, ui::VKEY_L}},
{ui::DomCode::KEY_M,
- {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN},
- {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN}},
+ {true, ui::DomKey::ENTER, ui::VKEY_RETURN},
+ {true, ui::DomKey::ENTER, ui::VKEY_RETURN}},
{ui::DomCode::KEY_N,
- {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N},
- {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N}},
+ {true, ui::DomKey::Constant<0x0E>::Character, ui::VKEY_N},
+ {true, ui::DomKey::Constant<0x0E>::Character, ui::VKEY_N}},
{ui::DomCode::KEY_O,
- {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O},
- {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O}},
+ {true, ui::DomKey::Constant<0x0F>::Character, ui::VKEY_O},
+ {true, ui::DomKey::Constant<0x0F>::Character, ui::VKEY_O}},
{ui::DomCode::KEY_P,
- {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P},
- {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P}},
+ {true, ui::DomKey::Constant<0x10>::Character, ui::VKEY_P},
+ {true, ui::DomKey::Constant<0x10>::Character, ui::VKEY_P}},
{ui::DomCode::KEY_Q,
- {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q},
- {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q}},
+ {true, ui::DomKey::Constant<0x11>::Character, ui::VKEY_Q},
+ {true, ui::DomKey::Constant<0x11>::Character, ui::VKEY_Q}},
{ui::DomCode::KEY_R,
- {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R},
- {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R}},
+ {true, ui::DomKey::Constant<0x12>::Character, ui::VKEY_R},
+ {true, ui::DomKey::Constant<0x12>::Character, ui::VKEY_R}},
{ui::DomCode::KEY_S,
- {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S},
- {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S}},
+ {true, ui::DomKey::Constant<0x13>::Character, ui::VKEY_S},
+ {true, ui::DomKey::Constant<0x13>::Character, ui::VKEY_S}},
{ui::DomCode::KEY_T,
- {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T},
- {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T}},
+ {true, ui::DomKey::Constant<0x14>::Character, ui::VKEY_T},
+ {true, ui::DomKey::Constant<0x14>::Character, ui::VKEY_T}},
{ui::DomCode::KEY_U,
- {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U},
- {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U}},
+ {true, ui::DomKey::Constant<0x15>::Character, ui::VKEY_U},
+ {true, ui::DomKey::Constant<0x15>::Character, ui::VKEY_U}},
{ui::DomCode::KEY_V,
- {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V},
- {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V}},
+ {true, ui::DomKey::Constant<0x16>::Character, ui::VKEY_V},
+ {true, ui::DomKey::Constant<0x16>::Character, ui::VKEY_V}},
{ui::DomCode::KEY_W,
- {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W},
- {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W}},
+ {true, ui::DomKey::Constant<0x17>::Character, ui::VKEY_W},
+ {true, ui::DomKey::Constant<0x17>::Character, ui::VKEY_W}},
{ui::DomCode::KEY_X,
- {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X},
- {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X}},
+ {true, ui::DomKey::Constant<0x18>::Character, ui::VKEY_X},
+ {true, ui::DomKey::Constant<0x18>::Character, ui::VKEY_X}},
{ui::DomCode::KEY_Y,
- {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y},
- {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y}},
+ {true, ui::DomKey::Constant<0x19>::Character, ui::VKEY_Y},
+ {true, ui::DomKey::Constant<0x19>::Character, ui::VKEY_Y}},
{ui::DomCode::KEY_Z,
- {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z},
- {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z}},
+ {true, ui::DomKey::Constant<0x1A>::Character, ui::VKEY_Z},
+ {true, ui::DomKey::Constant<0x1A>::Character, ui::VKEY_Z}},
};
for (const auto& it : kControlCharacters) {
// Verify |DomCodeToControlCharacter()|.
@@ -155,17 +149,17 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
CheckDomCodeToMeaning("c_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
it.control_shift);
- // Verify |DomCodeToUsLayoutMeaning()|.
- CheckDomCodeToMeaning("c_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ // Verify |DomCodeToUsLayoutDomKey()|.
+ CheckDomCodeToMeaning("c_us_c", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN, it.control);
- CheckDomCodeToMeaning("c_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("c_us_cs", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
it.control_shift);
}
// The codes in this table are sensitive to the Shift state, so they are
// handled differently by |DomCodeToControlCharacter()|, which returns false
- // for unknown combinations, vs |DomCodeToUsLayoutMeaning()|, which returns
+ // for unknown combinations, vs |DomCodeToUsLayoutDomKey()|, which returns
// true with DomKey::UNIDENTIFIED.
static const struct {
ui::DomCode dom_code;
@@ -175,40 +169,40 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
Meaning us_control_shift;
} kShiftControlCharacters[] = {
{ui::DomCode::DIGIT2,
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_2},
- {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2}},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0>::Character, ui::VKEY_2},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_2},
+ {true, ui::DomKey::Constant<0>::Character, ui::VKEY_2}},
{ui::DomCode::DIGIT6,
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_6},
- {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6}},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0x1E>::Character, ui::VKEY_6},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_6},
+ {true, ui::DomKey::Constant<0x1E>::Character, ui::VKEY_6}},
{ui::DomCode::MINUS,
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_MINUS},
- {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS}},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0x1F>::Character, ui::VKEY_OEM_MINUS},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_OEM_MINUS},
+ {true, ui::DomKey::Constant<0x1F>::Character, ui::VKEY_OEM_MINUS}},
{ui::DomCode::ENTER,
- {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN},
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_RETURN}},
+ {true, ui::DomKey::Constant<0x0A>::Character, ui::VKEY_RETURN},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0x0A>::Character, ui::VKEY_RETURN},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_RETURN}},
{ui::DomCode::BRACKET_LEFT,
- {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4},
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_4}},
+ {true, ui::DomKey::ESCAPE, ui::VKEY_OEM_4},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::ESCAPE, ui::VKEY_OEM_4},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_OEM_4}},
{ui::DomCode::BACKSLASH,
- {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5},
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_5}},
+ {true, ui::DomKey::Constant<0x1C>::Character, ui::VKEY_OEM_5},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0x1C>::Character, ui::VKEY_OEM_5},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_OEM_5}},
{ui::DomCode::BRACKET_RIGHT,
- {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6},
- {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_6}},
+ {true, ui::DomKey::Constant<0x1D>::Character, ui::VKEY_OEM_6},
+ {false, ui::DomKey::NONE, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0x1D>::Character, ui::VKEY_OEM_6},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_OEM_6}},
};
for (const auto& it : kShiftControlCharacters) {
// Verify |DomCodeToControlCharacter()|.
@@ -219,10 +213,10 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
CheckDomCodeToMeaning("s_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
it.cc_control_shift);
- // Verify |DomCodeToUsLayoutMeaning()|.
- CheckDomCodeToMeaning("s_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ // Verify |DomCodeToUsLayoutDomKey()|.
+ CheckDomCodeToMeaning("s_us_c", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN, it.us_control);
- CheckDomCodeToMeaning("s_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("s_us_cs", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN,
it.us_control_shift);
}
@@ -233,49 +227,49 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
Meaning normal;
Meaning control;
} kNonControlCharacters[] = {
- // Modifiers are handled by |DomCodeToUsLayoutMeaning()| without regard
+ // Modifiers are handled by |DomCodeToUsLayoutDomKey()| without regard
// to whether Control is down.
{ui::DomCode::CONTROL_LEFT,
- {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL},
- {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}},
+ {true, ui::DomKey::CONTROL, ui::VKEY_CONTROL},
+ {true, ui::DomKey::CONTROL, ui::VKEY_CONTROL}},
{ui::DomCode::CONTROL_RIGHT,
- {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL},
- {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}},
+ {true, ui::DomKey::CONTROL, ui::VKEY_CONTROL},
+ {true, ui::DomKey::CONTROL, ui::VKEY_CONTROL}},
{ui::DomCode::SHIFT_LEFT,
- {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT},
- {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}},
+ {true, ui::DomKey::SHIFT, ui::VKEY_SHIFT},
+ {true, ui::DomKey::SHIFT, ui::VKEY_SHIFT}},
{ui::DomCode::SHIFT_RIGHT,
- {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT},
- {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}},
+ {true, ui::DomKey::SHIFT, ui::VKEY_SHIFT},
+ {true, ui::DomKey::SHIFT, ui::VKEY_SHIFT}},
{ui::DomCode::ALT_LEFT,
- {true, ui::DomKey::ALT, 0, ui::VKEY_MENU},
- {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}},
+ {true, ui::DomKey::ALT, ui::VKEY_MENU},
+ {true, ui::DomKey::ALT, ui::VKEY_MENU}},
{ui::DomCode::ALT_RIGHT,
- {true, ui::DomKey::ALT, 0, ui::VKEY_MENU},
- {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}},
+ {true, ui::DomKey::ALT, ui::VKEY_MENU},
+ {true, ui::DomKey::ALT, ui::VKEY_MENU}},
{ui::DomCode::OS_LEFT,
- {true, ui::DomKey::OS, 0, ui::VKEY_LWIN},
- {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}},
+ {true, ui::DomKey::OS, ui::VKEY_LWIN},
+ {true, ui::DomKey::OS, ui::VKEY_LWIN}},
{ui::DomCode::OS_RIGHT,
- {true, ui::DomKey::OS, 0, ui::VKEY_LWIN},
- {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}},
+ {true, ui::DomKey::OS, ui::VKEY_LWIN},
+ {true, ui::DomKey::OS, ui::VKEY_LWIN}},
// Non-modifiers (a representative sample here) succeed with
// DomKey::UNIDENTIFIED when Control is down.
{ui::DomCode::DIGIT1,
- {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_1}},
+ {true, ui::DomKey::Constant<'1'>::Character, ui::VKEY_1},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_1}},
{ui::DomCode::EQUAL,
- {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_PLUS}},
+ {true, ui::DomKey::Constant<'='>::Character, ui::VKEY_OEM_PLUS},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_OEM_PLUS}},
{ui::DomCode::TAB,
- {true, ui::DomKey::TAB, 9, ui::VKEY_TAB},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_TAB}},
+ {true, ui::DomKey::TAB, ui::VKEY_TAB},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_TAB}},
{ui::DomCode::F1,
- {true, ui::DomKey::F1, 0, ui::VKEY_F1},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_F1}},
+ {true, ui::DomKey::F1, ui::VKEY_F1},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_F1}},
{ui::DomCode::VOLUME_UP,
- {true, ui::DomKey::VOLUME_UP, 0, ui::VKEY_VOLUME_UP},
- {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_VOLUME_UP}},
+ {true, ui::DomKey::VOLUME_UP, ui::VKEY_VOLUME_UP},
+ {true, ui::DomKey::UNIDENTIFIED, ui::VKEY_VOLUME_UP}},
};
for (const auto& it : kNonControlCharacters) {
// Verify |DomCodeToControlCharacter()|.
@@ -285,12 +279,12 @@ TEST(KeyboardCodeConversion, ControlCharacters) {
ui::EF_CONTROL_DOWN, kUndefined);
CheckDomCodeToMeaning("n_cc_cs", ui::DomCodeToControlCharacter, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, kUndefined);
- // Verify |DomCodeToUsLayoutMeaning()|.
- CheckDomCodeToMeaning("n_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ // Verify |DomCodeToUsLayoutDomKey()|.
+ CheckDomCodeToMeaning("n_us_n", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_NONE, it.normal);
- CheckDomCodeToMeaning("n_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("n_us_c", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN, it.control);
- CheckDomCodeToMeaning("n_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("n_us_cs", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, it.control);
}
}
@@ -302,225 +296,225 @@ TEST(KeyboardCodeConversion, UsLayout) {
Meaning shift;
} kPrintableUsLayout[] = {
{ui::DomCode::KEY_A,
- {true, ui::DomKey::CHARACTER, 'a', ui::VKEY_A},
- {true, ui::DomKey::CHARACTER, 'A', ui::VKEY_A}},
+ {true, ui::DomKey::Constant<'a'>::Character, ui::VKEY_A},
+ {true, ui::DomKey::Constant<'A'>::Character, ui::VKEY_A}},
{ui::DomCode::KEY_B,
- {true, ui::DomKey::CHARACTER, 'b', ui::VKEY_B},
- {true, ui::DomKey::CHARACTER, 'B', ui::VKEY_B}},
+ {true, ui::DomKey::Constant<'b'>::Character, ui::VKEY_B},
+ {true, ui::DomKey::Constant<'B'>::Character, ui::VKEY_B}},
{ui::DomCode::KEY_C,
- {true, ui::DomKey::CHARACTER, 'c', ui::VKEY_C},
- {true, ui::DomKey::CHARACTER, 'C', ui::VKEY_C}},
+ {true, ui::DomKey::Constant<'c'>::Character, ui::VKEY_C},
+ {true, ui::DomKey::Constant<'C'>::Character, ui::VKEY_C}},
{ui::DomCode::KEY_D,
- {true, ui::DomKey::CHARACTER, 'd', ui::VKEY_D},
- {true, ui::DomKey::CHARACTER, 'D', ui::VKEY_D}},
+ {true, ui::DomKey::Constant<'d'>::Character, ui::VKEY_D},
+ {true, ui::DomKey::Constant<'D'>::Character, ui::VKEY_D}},
{ui::DomCode::KEY_E,
- {true, ui::DomKey::CHARACTER, 'e', ui::VKEY_E},
- {true, ui::DomKey::CHARACTER, 'E', ui::VKEY_E}},
+ {true, ui::DomKey::Constant<'e'>::Character, ui::VKEY_E},
+ {true, ui::DomKey::Constant<'E'>::Character, ui::VKEY_E}},
{ui::DomCode::KEY_F,
- {true, ui::DomKey::CHARACTER, 'f', ui::VKEY_F},
- {true, ui::DomKey::CHARACTER, 'F', ui::VKEY_F}},
+ {true, ui::DomKey::Constant<'f'>::Character, ui::VKEY_F},
+ {true, ui::DomKey::Constant<'F'>::Character, ui::VKEY_F}},
{ui::DomCode::KEY_G,
- {true, ui::DomKey::CHARACTER, 'g', ui::VKEY_G},
- {true, ui::DomKey::CHARACTER, 'G', ui::VKEY_G}},
+ {true, ui::DomKey::Constant<'g'>::Character, ui::VKEY_G},
+ {true, ui::DomKey::Constant<'G'>::Character, ui::VKEY_G}},
{ui::DomCode::KEY_H,
- {true, ui::DomKey::CHARACTER, 'h', ui::VKEY_H},
- {true, ui::DomKey::CHARACTER, 'H', ui::VKEY_H}},
+ {true, ui::DomKey::Constant<'h'>::Character, ui::VKEY_H},
+ {true, ui::DomKey::Constant<'H'>::Character, ui::VKEY_H}},
{ui::DomCode::KEY_I,
- {true, ui::DomKey::CHARACTER, 'i', ui::VKEY_I},
- {true, ui::DomKey::CHARACTER, 'I', ui::VKEY_I}},
+ {true, ui::DomKey::Constant<'i'>::Character, ui::VKEY_I},
+ {true, ui::DomKey::Constant<'I'>::Character, ui::VKEY_I}},
{ui::DomCode::KEY_J,
- {true, ui::DomKey::CHARACTER, 'j', ui::VKEY_J},
- {true, ui::DomKey::CHARACTER, 'J', ui::VKEY_J}},
+ {true, ui::DomKey::Constant<'j'>::Character, ui::VKEY_J},
+ {true, ui::DomKey::Constant<'J'>::Character, ui::VKEY_J}},
{ui::DomCode::KEY_K,
- {true, ui::DomKey::CHARACTER, 'k', ui::VKEY_K},
- {true, ui::DomKey::CHARACTER, 'K', ui::VKEY_K}},
+ {true, ui::DomKey::Constant<'k'>::Character, ui::VKEY_K},
+ {true, ui::DomKey::Constant<'K'>::Character, ui::VKEY_K}},
{ui::DomCode::KEY_L,
- {true, ui::DomKey::CHARACTER, 'l', ui::VKEY_L},
- {true, ui::DomKey::CHARACTER, 'L', ui::VKEY_L}},
+ {true, ui::DomKey::Constant<'l'>::Character, ui::VKEY_L},
+ {true, ui::DomKey::Constant<'L'>::Character, ui::VKEY_L}},
{ui::DomCode::KEY_M,
- {true, ui::DomKey::CHARACTER, 'm', ui::VKEY_M},
- {true, ui::DomKey::CHARACTER, 'M', ui::VKEY_M}},
+ {true, ui::DomKey::Constant<'m'>::Character, ui::VKEY_M},
+ {true, ui::DomKey::Constant<'M'>::Character, ui::VKEY_M}},
{ui::DomCode::KEY_N,
- {true, ui::DomKey::CHARACTER, 'n', ui::VKEY_N},
- {true, ui::DomKey::CHARACTER, 'N', ui::VKEY_N}},
+ {true, ui::DomKey::Constant<'n'>::Character, ui::VKEY_N},
+ {true, ui::DomKey::Constant<'N'>::Character, ui::VKEY_N}},
{ui::DomCode::KEY_O,
- {true, ui::DomKey::CHARACTER, 'o', ui::VKEY_O},
- {true, ui::DomKey::CHARACTER, 'O', ui::VKEY_O}},
+ {true, ui::DomKey::Constant<'o'>::Character, ui::VKEY_O},
+ {true, ui::DomKey::Constant<'O'>::Character, ui::VKEY_O}},
{ui::DomCode::KEY_P,
- {true, ui::DomKey::CHARACTER, 'p', ui::VKEY_P},
- {true, ui::DomKey::CHARACTER, 'P', ui::VKEY_P}},
+ {true, ui::DomKey::Constant<'p'>::Character, ui::VKEY_P},
+ {true, ui::DomKey::Constant<'P'>::Character, ui::VKEY_P}},
{ui::DomCode::KEY_Q,
- {true, ui::DomKey::CHARACTER, 'q', ui::VKEY_Q},
- {true, ui::DomKey::CHARACTER, 'Q', ui::VKEY_Q}},
+ {true, ui::DomKey::Constant<'q'>::Character, ui::VKEY_Q},
+ {true, ui::DomKey::Constant<'Q'>::Character, ui::VKEY_Q}},
{ui::DomCode::KEY_R,
- {true, ui::DomKey::CHARACTER, 'r', ui::VKEY_R},
- {true, ui::DomKey::CHARACTER, 'R', ui::VKEY_R}},
+ {true, ui::DomKey::Constant<'r'>::Character, ui::VKEY_R},
+ {true, ui::DomKey::Constant<'R'>::Character, ui::VKEY_R}},
{ui::DomCode::KEY_S,
- {true, ui::DomKey::CHARACTER, 's', ui::VKEY_S},
- {true, ui::DomKey::CHARACTER, 'S', ui::VKEY_S}},
+ {true, ui::DomKey::Constant<'s'>::Character, ui::VKEY_S},
+ {true, ui::DomKey::Constant<'S'>::Character, ui::VKEY_S}},
{ui::DomCode::KEY_T,
- {true, ui::DomKey::CHARACTER, 't', ui::VKEY_T},
- {true, ui::DomKey::CHARACTER, 'T', ui::VKEY_T}},
+ {true, ui::DomKey::Constant<'t'>::Character, ui::VKEY_T},
+ {true, ui::DomKey::Constant<'T'>::Character, ui::VKEY_T}},
{ui::DomCode::KEY_U,
- {true, ui::DomKey::CHARACTER, 'u', ui::VKEY_U},
- {true, ui::DomKey::CHARACTER, 'U', ui::VKEY_U}},
+ {true, ui::DomKey::Constant<'u'>::Character, ui::VKEY_U},
+ {true, ui::DomKey::Constant<'U'>::Character, ui::VKEY_U}},
{ui::DomCode::KEY_V,
- {true, ui::DomKey::CHARACTER, 'v', ui::VKEY_V},
- {true, ui::DomKey::CHARACTER, 'V', ui::VKEY_V}},
+ {true, ui::DomKey::Constant<'v'>::Character, ui::VKEY_V},
+ {true, ui::DomKey::Constant<'V'>::Character, ui::VKEY_V}},
{ui::DomCode::KEY_W,
- {true, ui::DomKey::CHARACTER, 'w', ui::VKEY_W},
- {true, ui::DomKey::CHARACTER, 'W', ui::VKEY_W}},
+ {true, ui::DomKey::Constant<'w'>::Character, ui::VKEY_W},
+ {true, ui::DomKey::Constant<'W'>::Character, ui::VKEY_W}},
{ui::DomCode::KEY_X,
- {true, ui::DomKey::CHARACTER, 'x', ui::VKEY_X},
- {true, ui::DomKey::CHARACTER, 'X', ui::VKEY_X}},
+ {true, ui::DomKey::Constant<'x'>::Character, ui::VKEY_X},
+ {true, ui::DomKey::Constant<'X'>::Character, ui::VKEY_X}},
{ui::DomCode::KEY_Y,
- {true, ui::DomKey::CHARACTER, 'y', ui::VKEY_Y},
- {true, ui::DomKey::CHARACTER, 'Y', ui::VKEY_Y}},
+ {true, ui::DomKey::Constant<'y'>::Character, ui::VKEY_Y},
+ {true, ui::DomKey::Constant<'Y'>::Character, ui::VKEY_Y}},
{ui::DomCode::KEY_Z,
- {true, ui::DomKey::CHARACTER, 'z', ui::VKEY_Z},
- {true, ui::DomKey::CHARACTER, 'Z', ui::VKEY_Z}},
+ {true, ui::DomKey::Constant<'z'>::Character, ui::VKEY_Z},
+ {true, ui::DomKey::Constant<'Z'>::Character, ui::VKEY_Z}},
{ui::DomCode::DIGIT1,
- {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
- {true, ui::DomKey::CHARACTER, '!', ui::VKEY_1}},
+ {true, ui::DomKey::Constant<'1'>::Character, ui::VKEY_1},
+ {true, ui::DomKey::Constant<'!'>::Character, ui::VKEY_1}},
{ui::DomCode::DIGIT2,
- {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2},
- {true, ui::DomKey::CHARACTER, '@', ui::VKEY_2}},
+ {true, ui::DomKey::Constant<'2'>::Character, ui::VKEY_2},
+ {true, ui::DomKey::Constant<'@'>::Character, ui::VKEY_2}},
{ui::DomCode::DIGIT3,
- {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3},
- {true, ui::DomKey::CHARACTER, '#', ui::VKEY_3}},
+ {true, ui::DomKey::Constant<'3'>::Character, ui::VKEY_3},
+ {true, ui::DomKey::Constant<'#'>::Character, ui::VKEY_3}},
{ui::DomCode::DIGIT4,
- {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4},
- {true, ui::DomKey::CHARACTER, '$', ui::VKEY_4}},
+ {true, ui::DomKey::Constant<'4'>::Character, ui::VKEY_4},
+ {true, ui::DomKey::Constant<'$'>::Character, ui::VKEY_4}},
{ui::DomCode::DIGIT5,
- {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5},
- {true, ui::DomKey::CHARACTER, '%', ui::VKEY_5}},
+ {true, ui::DomKey::Constant<'5'>::Character, ui::VKEY_5},
+ {true, ui::DomKey::Constant<'%'>::Character, ui::VKEY_5}},
{ui::DomCode::DIGIT6,
- {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6},
- {true, ui::DomKey::CHARACTER, '^', ui::VKEY_6}},
+ {true, ui::DomKey::Constant<'6'>::Character, ui::VKEY_6},
+ {true, ui::DomKey::Constant<'^'>::Character, ui::VKEY_6}},
{ui::DomCode::DIGIT7,
- {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7},
- {true, ui::DomKey::CHARACTER, '&', ui::VKEY_7}},
+ {true, ui::DomKey::Constant<'7'>::Character, ui::VKEY_7},
+ {true, ui::DomKey::Constant<'&'>::Character, ui::VKEY_7}},
{ui::DomCode::DIGIT8,
- {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8},
- {true, ui::DomKey::CHARACTER, '*', ui::VKEY_8}},
+ {true, ui::DomKey::Constant<'8'>::Character, ui::VKEY_8},
+ {true, ui::DomKey::Constant<'*'>::Character, ui::VKEY_8}},
{ui::DomCode::DIGIT9,
- {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9},
- {true, ui::DomKey::CHARACTER, '(', ui::VKEY_9}},
+ {true, ui::DomKey::Constant<'9'>::Character, ui::VKEY_9},
+ {true, ui::DomKey::Constant<'('>::Character, ui::VKEY_9}},
{ui::DomCode::DIGIT0,
- {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0},
- {true, ui::DomKey::CHARACTER, ')', ui::VKEY_0}},
+ {true, ui::DomKey::Constant<'0'>::Character, ui::VKEY_0},
+ {true, ui::DomKey::Constant<')'>::Character, ui::VKEY_0}},
{ui::DomCode::SPACE,
- {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE},
- {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE}},
+ {true, ui::DomKey::Constant<' '>::Character, ui::VKEY_SPACE},
+ {true, ui::DomKey::Constant<' '>::Character, ui::VKEY_SPACE}},
{ui::DomCode::MINUS,
- {true, ui::DomKey::CHARACTER, '-', ui::VKEY_OEM_MINUS},
- {true, ui::DomKey::CHARACTER, '_', ui::VKEY_OEM_MINUS}},
+ {true, ui::DomKey::Constant<'-'>::Character, ui::VKEY_OEM_MINUS},
+ {true, ui::DomKey::Constant<'_'>::Character, ui::VKEY_OEM_MINUS}},
{ui::DomCode::EQUAL,
- {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS},
- {true, ui::DomKey::CHARACTER, '+', ui::VKEY_OEM_PLUS}},
+ {true, ui::DomKey::Constant<'='>::Character, ui::VKEY_OEM_PLUS},
+ {true, ui::DomKey::Constant<'+'>::Character, ui::VKEY_OEM_PLUS}},
{ui::DomCode::BRACKET_LEFT,
- {true, ui::DomKey::CHARACTER, '[', ui::VKEY_OEM_4},
- {true, ui::DomKey::CHARACTER, '{', ui::VKEY_OEM_4}},
+ {true, ui::DomKey::Constant<'['>::Character, ui::VKEY_OEM_4},
+ {true, ui::DomKey::Constant<'{'>::Character, ui::VKEY_OEM_4}},
{ui::DomCode::BRACKET_RIGHT,
- {true, ui::DomKey::CHARACTER, ']', ui::VKEY_OEM_6},
- {true, ui::DomKey::CHARACTER, '}', ui::VKEY_OEM_6}},
+ {true, ui::DomKey::Constant<']'>::Character, ui::VKEY_OEM_6},
+ {true, ui::DomKey::Constant<'}'>::Character, ui::VKEY_OEM_6}},
{ui::DomCode::BACKSLASH,
- {true, ui::DomKey::CHARACTER, '\\', ui::VKEY_OEM_5},
- {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}},
+ {true, ui::DomKey::Constant<'\\'>::Character, ui::VKEY_OEM_5},
+ {true, ui::DomKey::Constant<'|'>::Character, ui::VKEY_OEM_5}},
{ui::DomCode::SEMICOLON,
- {true, ui::DomKey::CHARACTER, ';', ui::VKEY_OEM_1},
- {true, ui::DomKey::CHARACTER, ':', ui::VKEY_OEM_1}},
+ {true, ui::DomKey::Constant<';'>::Character, ui::VKEY_OEM_1},
+ {true, ui::DomKey::Constant<':'>::Character, ui::VKEY_OEM_1}},
{ui::DomCode::QUOTE,
- {true, ui::DomKey::CHARACTER, '\'', ui::VKEY_OEM_7},
- {true, ui::DomKey::CHARACTER, '"', ui::VKEY_OEM_7}},
+ {true, ui::DomKey::Constant<'\''>::Character, ui::VKEY_OEM_7},
+ {true, ui::DomKey::Constant<'"'>::Character, ui::VKEY_OEM_7}},
{ui::DomCode::BACKQUOTE,
- {true, ui::DomKey::CHARACTER, '`', ui::VKEY_OEM_3},
- {true, ui::DomKey::CHARACTER, '~', ui::VKEY_OEM_3}},
+ {true, ui::DomKey::Constant<'`'>::Character, ui::VKEY_OEM_3},
+ {true, ui::DomKey::Constant<'~'>::Character, ui::VKEY_OEM_3}},
{ui::DomCode::COMMA,
- {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA},
- {true, ui::DomKey::CHARACTER, '<', ui::VKEY_OEM_COMMA}},
+ {true, ui::DomKey::Constant<','>::Character, ui::VKEY_OEM_COMMA},
+ {true, ui::DomKey::Constant<'<'>::Character, ui::VKEY_OEM_COMMA}},
{ui::DomCode::PERIOD,
- {true, ui::DomKey::CHARACTER, '.', ui::VKEY_OEM_PERIOD},
- {true, ui::DomKey::CHARACTER, '>', ui::VKEY_OEM_PERIOD}},
+ {true, ui::DomKey::Constant<'.'>::Character, ui::VKEY_OEM_PERIOD},
+ {true, ui::DomKey::Constant<'>'>::Character, ui::VKEY_OEM_PERIOD}},
{ui::DomCode::SLASH,
- {true, ui::DomKey::CHARACTER, '/', ui::VKEY_OEM_2},
- {true, ui::DomKey::CHARACTER, '?', ui::VKEY_OEM_2}},
+ {true, ui::DomKey::Constant<'/'>::Character, ui::VKEY_OEM_2},
+ {true, ui::DomKey::Constant<'?'>::Character, ui::VKEY_OEM_2}},
{ui::DomCode::INTL_BACKSLASH,
- {true, ui::DomKey::CHARACTER, '<', ui::VKEY_OEM_102},
- {true, ui::DomKey::CHARACTER, '>', ui::VKEY_OEM_102}},
+ {true, ui::DomKey::Constant<'<'>::Character, ui::VKEY_OEM_102},
+ {true, ui::DomKey::Constant<'>'>::Character, ui::VKEY_OEM_102}},
{ui::DomCode::INTL_YEN,
- {true, ui::DomKey::CHARACTER, 0x00A5, ui::VKEY_OEM_5},
- {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}},
+ {true, ui::DomKey::Constant<0x00A5>::Character, ui::VKEY_OEM_5},
+ {true, ui::DomKey::Constant<'|'>::Character, ui::VKEY_OEM_5}},
{ui::DomCode::NUMPAD_DIVIDE,
- {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE},
- {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE}},
+ {true, ui::DomKey::Constant<'/'>::Character, ui::VKEY_DIVIDE},
+ {true, ui::DomKey::Constant<'/'>::Character, ui::VKEY_DIVIDE}},
{ui::DomCode::NUMPAD_MULTIPLY,
- {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY},
- {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY}},
+ {true, ui::DomKey::Constant<'*'>::Character, ui::VKEY_MULTIPLY},
+ {true, ui::DomKey::Constant<'*'>::Character, ui::VKEY_MULTIPLY}},
{ui::DomCode::NUMPAD_SUBTRACT,
- {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT},
- {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT}},
+ {true, ui::DomKey::Constant<'-'>::Character, ui::VKEY_SUBTRACT},
+ {true, ui::DomKey::Constant<'-'>::Character, ui::VKEY_SUBTRACT}},
{ui::DomCode::NUMPAD_ADD,
- {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD},
- {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD}},
+ {true, ui::DomKey::Constant<'+'>::Character, ui::VKEY_ADD},
+ {true, ui::DomKey::Constant<'+'>::Character, ui::VKEY_ADD}},
{ui::DomCode::NUMPAD1,
- {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1},
- {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}},
+ {true, ui::DomKey::Constant<'1'>::Character, ui::VKEY_1},
+ {true, ui::DomKey::Constant<'1'>::Character, ui::VKEY_1}},
{ui::DomCode::NUMPAD2,
- {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2},
- {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2}},
+ {true, ui::DomKey::Constant<'2'>::Character, ui::VKEY_2},
+ {true, ui::DomKey::Constant<'2'>::Character, ui::VKEY_2}},
{ui::DomCode::NUMPAD3,
- {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3},
- {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3}},
+ {true, ui::DomKey::Constant<'3'>::Character, ui::VKEY_3},
+ {true, ui::DomKey::Constant<'3'>::Character, ui::VKEY_3}},
{ui::DomCode::NUMPAD4,
- {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4},
- {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4}},
+ {true, ui::DomKey::Constant<'4'>::Character, ui::VKEY_4},
+ {true, ui::DomKey::Constant<'4'>::Character, ui::VKEY_4}},
{ui::DomCode::NUMPAD5,
- {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5},
- {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5}},
+ {true, ui::DomKey::Constant<'5'>::Character, ui::VKEY_5},
+ {true, ui::DomKey::Constant<'5'>::Character, ui::VKEY_5}},
{ui::DomCode::NUMPAD6,
- {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6},
- {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6}},
+ {true, ui::DomKey::Constant<'6'>::Character, ui::VKEY_6},
+ {true, ui::DomKey::Constant<'6'>::Character, ui::VKEY_6}},
{ui::DomCode::NUMPAD7,
- {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7},
- {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7}},
+ {true, ui::DomKey::Constant<'7'>::Character, ui::VKEY_7},
+ {true, ui::DomKey::Constant<'7'>::Character, ui::VKEY_7}},
{ui::DomCode::NUMPAD8,
- {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8},
- {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8}},
+ {true, ui::DomKey::Constant<'8'>::Character, ui::VKEY_8},
+ {true, ui::DomKey::Constant<'8'>::Character, ui::VKEY_8}},
{ui::DomCode::NUMPAD9,
- {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9},
- {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9}},
+ {true, ui::DomKey::Constant<'9'>::Character, ui::VKEY_9},
+ {true, ui::DomKey::Constant<'9'>::Character, ui::VKEY_9}},
{ui::DomCode::NUMPAD0,
- {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0},
- {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0}},
+ {true, ui::DomKey::Constant<'0'>::Character, ui::VKEY_0},
+ {true, ui::DomKey::Constant<'0'>::Character, ui::VKEY_0}},
{ui::DomCode::NUMPAD_DECIMAL,
- {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL},
- {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL}},
+ {true, ui::DomKey::Constant<'.'>::Character, ui::VKEY_DECIMAL},
+ {true, ui::DomKey::Constant<'.'>::Character, ui::VKEY_DECIMAL}},
{ui::DomCode::NUMPAD_EQUAL,
- {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN}},
+ {true, ui::DomKey::Constant<'='>::Character, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<'='>::Character, ui::VKEY_UNKNOWN}},
{ui::DomCode::NUMPAD_COMMA,
- {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA},
- {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA}},
+ {true, ui::DomKey::Constant<','>::Character, ui::VKEY_OEM_COMMA},
+ {true, ui::DomKey::Constant<','>::Character, ui::VKEY_OEM_COMMA}},
{ui::DomCode::NUMPAD_PAREN_LEFT,
- {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN}},
+ {true, ui::DomKey::Constant<'('>::Character, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<'('>::Character, ui::VKEY_UNKNOWN}},
{ui::DomCode::NUMPAD_PAREN_RIGHT,
- {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN}},
+ {true, ui::DomKey::Constant<')'>::Character, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<')'>::Character, ui::VKEY_UNKNOWN}},
{ui::DomCode::NUMPAD_SIGN_CHANGE,
- {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN},
- {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN}},
+ {true, ui::DomKey::Constant<0xB1>::Character, ui::VKEY_UNKNOWN},
+ {true, ui::DomKey::Constant<0xB1>::Character, ui::VKEY_UNKNOWN}},
};
for (const auto& it : kPrintableUsLayout) {
- CheckDomCodeToMeaning("p_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("p_us_n", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_NONE, it.normal);
- CheckDomCodeToMeaning("p_us_s", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("p_us_s", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_SHIFT_DOWN, it.shift);
- CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_ALTGR_DOWN, it.normal);
- CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code,
+ CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutDomKey, it.dom_code,
ui::EF_ALTGR_DOWN|ui::EF_SHIFT_DOWN, it.shift);
}
}
diff --git a/ui/events/keycodes/keyboard_code_conversion_x.cc b/ui/events/keycodes/keyboard_code_conversion_x.cc
index 9b0dc90..2b11557 100644
--- a/ui/events/keycodes/keyboard_code_conversion_x.cc
+++ b/ui/events/keycodes/keyboard_code_conversion_x.cc
@@ -900,7 +900,7 @@ uint16 GetCharacterFromXEvent(const XEvent* xev) {
return GetUnicodeCharacterFromXKeySym(keysym);
}
-void GetMeaningFromXEvent(const XEvent* xev, DomKey* key, base::char16* ch) {
+DomKey GetDomKeyFromXEvent(const XEvent* xev) {
XEvent xkeyevent = {0};
const XKeyEvent* xkey = NULL;
if (xev->type == GenericEvent) {
@@ -913,8 +913,8 @@ void GetMeaningFromXEvent(const XEvent* xev, DomKey* key, base::char16* ch) {
}
KeySym keysym = XK_VoidSymbol;
XLookupString(const_cast<XKeyEvent*>(xkey), NULL, 0, &keysym, NULL);
- *ch = GetUnicodeCharacterFromXKeySym(keysym);
- *key = XKeySymToDomKey(keysym, *ch);
+ base::char16 ch = GetUnicodeCharacterFromXKeySym(keysym);
+ return XKeySymToDomKey(keysym, ch);
}
KeyboardCode DefaultKeyboardCodeFromHardwareKeycode(
diff --git a/ui/events/keycodes/keyboard_code_conversion_x.h b/ui/events/keycodes/keyboard_code_conversion_x.h
index 0eafb34d..7ead7c2 100644
--- a/ui/events/keycodes/keyboard_code_conversion_x.h
+++ b/ui/events/keycodes/keyboard_code_conversion_x.h
@@ -8,6 +8,7 @@
#include "base/basictypes.h"
#include "base/strings/string16.h"
#include "ui/events/events_base_export.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes_posix.h"
typedef union _XEvent XEvent;
@@ -16,7 +17,6 @@ typedef struct _XDisplay XDisplay;
namespace ui {
enum class DomCode;
-enum class DomKey;
EVENTS_BASE_EXPORT KeyboardCode KeyboardCodeFromXKeyEvent(const XEvent* xev);
@@ -28,9 +28,7 @@ EVENTS_BASE_EXPORT DomCode CodeFromXEvent(const XEvent* xev);
EVENTS_BASE_EXPORT uint16 GetCharacterFromXEvent(const XEvent* xev);
// Returns DomKey and character from an XEvent.
-EVENTS_BASE_EXPORT void GetMeaningFromXEvent(const XEvent* xev,
- DomKey* key,
- base::char16* character);
+EVENTS_BASE_EXPORT DomKey GetDomKeyFromXEvent(const XEvent* xev);
// Converts a KeyboardCode into an X KeySym.
EVENTS_BASE_EXPORT int XKeysymForWindowsKeyCode(KeyboardCode keycode,
diff --git a/ui/events/keycodes/keyboard_code_conversion_xkb.cc b/ui/events/keycodes/keyboard_code_conversion_xkb.cc
index b84988a..284a59d 100644
--- a/ui/events/keycodes/keyboard_code_conversion_xkb.cc
+++ b/ui/events/keycodes/keyboard_code_conversion_xkb.cc
@@ -7,6 +7,10 @@
#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_code_conversion.h"
+#ifndef XK_dead_greek
+#define XK_dead_greek 0xfe8c
+#endif
+
namespace ui {
DomKey NonPrintableXKeySymToDomKey(xkb_keysym_t keysym) {
@@ -353,36 +357,104 @@ DomKey NonPrintableXKeySymToDomKey(xkb_keysym_t keysym) {
case XKB_KEY_ISO_Last_Group:
return DomKey::GROUP_LAST;
case XKB_KEY_dead_grave:
+ // combining grave accent
+ return DomKey::DeadKeyFromCombiningCharacter(0x0300);
case XKB_KEY_dead_acute:
+ // combining acute accent
+ return DomKey::DeadKeyFromCombiningCharacter(0x0301);
case XKB_KEY_dead_circumflex:
+ // combining circumflex accent
+ return DomKey::DeadKeyFromCombiningCharacter(0x0302);
case XKB_KEY_dead_tilde:
+ // combining tilde
+ return DomKey::DeadKeyFromCombiningCharacter(0x0303);
case XKB_KEY_dead_macron:
+ // combining macron
+ return DomKey::DeadKeyFromCombiningCharacter(0x0304);
case XKB_KEY_dead_breve:
+ // combining breve
+ return DomKey::DeadKeyFromCombiningCharacter(0x0306);
case XKB_KEY_dead_abovedot:
+ // combining dot above
+ return DomKey::DeadKeyFromCombiningCharacter(0x0307);
case XKB_KEY_dead_diaeresis:
+ // combining diaeresis
+ return DomKey::DeadKeyFromCombiningCharacter(0x0308);
case XKB_KEY_dead_abovering:
+ // combining ring above
+ return DomKey::DeadKeyFromCombiningCharacter(0x030A);
case XKB_KEY_dead_doubleacute:
+ // combining double acute accent
+ return DomKey::DeadKeyFromCombiningCharacter(0x030B);
case XKB_KEY_dead_caron:
+ // combining caron
+ return DomKey::DeadKeyFromCombiningCharacter(0x030C);
case XKB_KEY_dead_cedilla:
+ // combining cedilla
+ return DomKey::DeadKeyFromCombiningCharacter(0x0327);
case XKB_KEY_dead_ogonek:
+ // combining ogonek
+ return DomKey::DeadKeyFromCombiningCharacter(0x0328);
case XKB_KEY_dead_iota:
+ // combining greek ypogegrammeni
+ return DomKey::DeadKeyFromCombiningCharacter(0x0345);
+ case XKB_KEY_dead_voiced_sound:
+ // combining voiced sound mark
+ return DomKey::DeadKeyFromCombiningCharacter(0x3099);
+ case XKB_KEY_dead_semivoiced_sound:
+ // combining semi-voiced sound mark
+ return DomKey::DeadKeyFromCombiningCharacter(0x309A);
case XKB_KEY_dead_belowdot:
+ // combining dot below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0323);
case XKB_KEY_dead_hook:
+ // combining hook above
+ return DomKey::DeadKeyFromCombiningCharacter(0x0309);
case XKB_KEY_dead_horn:
+ // combining horn
+ return DomKey::DeadKeyFromCombiningCharacter(0x031B);
case XKB_KEY_dead_stroke:
+ // combining long solidus overlay
+ return DomKey::DeadKeyFromCombiningCharacter(0x0338);
case XKB_KEY_dead_abovecomma:
+ // combining comma above
+ return DomKey::DeadKeyFromCombiningCharacter(0x0313);
case XKB_KEY_dead_abovereversedcomma:
+ // combining reversed comma above
+ return DomKey::DeadKeyFromCombiningCharacter(0x0314);
case XKB_KEY_dead_doublegrave:
+ // combining double grave accent
+ return DomKey::DeadKeyFromCombiningCharacter(0x030F);
case XKB_KEY_dead_belowring:
+ // combining ring below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0325);
case XKB_KEY_dead_belowmacron:
+ // combining macron below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0331);
case XKB_KEY_dead_belowcircumflex:
+ // combining circumflex accent below
+ return DomKey::DeadKeyFromCombiningCharacter(0x032D);
case XKB_KEY_dead_belowtilde:
+ // combining tilde below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0330);
case XKB_KEY_dead_belowbreve:
+ // combining breve below
+ return DomKey::DeadKeyFromCombiningCharacter(0x032E);
case XKB_KEY_dead_belowdiaeresis:
+ // combining diaeresis below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0324);
case XKB_KEY_dead_invertedbreve:
+ // combining inverted breve
+ return DomKey::DeadKeyFromCombiningCharacter(0x0311);
case XKB_KEY_dead_belowcomma:
+ // combining comma below
+ return DomKey::DeadKeyFromCombiningCharacter(0x0326);
case XKB_KEY_dead_currency:
- return DomKey::DEAD;
+ // currency sign
+ return DomKey::DeadKeyFromCombiningCharacter(0x00A4);
+ case XKB_KEY_dead_greek:
+ // greek question mark
+ return DomKey::DeadKeyFromCombiningCharacter(0x037E);
default:
return DomKey::NONE;
}
@@ -390,9 +462,9 @@ DomKey NonPrintableXKeySymToDomKey(xkb_keysym_t keysym) {
DomKey XKeySymToDomKey(xkb_keysym_t keysym, base::char16 character) {
DomKey dom_key = NonPrintableXKeySymToDomKey(keysym);
- if (dom_key == DomKey::NONE)
- dom_key = CharacterToDomKey(character);
- return dom_key;
+ if (dom_key != DomKey::NONE)
+ return dom_key;
+ return DomKey::FromCharacter(character);
}
} // namespace ui
diff --git a/ui/events/keycodes/keyboard_code_conversion_xkb.h b/ui/events/keycodes/keyboard_code_conversion_xkb.h
index 3ded138..86e82f4 100644
--- a/ui/events/keycodes/keyboard_code_conversion_xkb.h
+++ b/ui/events/keycodes/keyboard_code_conversion_xkb.h
@@ -9,12 +9,11 @@
#include "base/strings/string16.h"
#include "ui/events/events_base_export.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/xkb_keysym.h"
namespace ui {
-enum class DomKey;
-
// Returns the DomKey associated with a non-character xkb_keysym_t.
// Returns DomKey::NONE for unrecognized keysyms, which includes
// all printable characters.
diff --git a/ui/events/ozone/BUILD.gn b/ui/events/ozone/BUILD.gn
index ce41de9..4bb3ad2 100644
--- a/ui/events/ozone/BUILD.gn
+++ b/ui/events/ozone/BUILD.gn
@@ -194,8 +194,6 @@ component("events_ozone_layout") {
"layout/xkb/xkb_evdev_codes.cc",
"layout/xkb/xkb_evdev_codes.h",
"layout/xkb/xkb_key_code_converter.h",
- "layout/xkb/xkb_keyboard_code_conversion.cc",
- "layout/xkb/xkb_keyboard_code_conversion.h",
"layout/xkb/xkb_keyboard_layout_engine.cc",
"layout/xkb/xkb_keyboard_layout_engine.h",
"layout/xkb/xkb_keysym.h",
diff --git a/ui/events/ozone/evdev/keyboard_evdev.cc b/ui/events/ozone/evdev/keyboard_evdev.cc
index 58be1c5..95a726d 100644
--- a/ui/events/ozone/evdev/keyboard_evdev.cc
+++ b/ui/events/ozone/evdev/keyboard_evdev.cc
@@ -212,9 +212,8 @@ void KeyboardEvdev::DispatchKey(unsigned int key,
int flags = modifiers_->GetModifierFlags();
DomKey dom_key;
KeyboardCode key_code;
- uint16 character;
uint32 platform_keycode = 0;
- if (!keyboard_layout_engine_->Lookup(dom_code, flags, &dom_key, &character,
+ if (!keyboard_layout_engine_->Lookup(dom_code, flags, &dom_key,
&key_code, &platform_keycode)) {
return;
}
@@ -224,7 +223,7 @@ void KeyboardEvdev::DispatchKey(unsigned int key,
}
KeyEvent event(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code,
- modifiers_->GetModifierFlags(), dom_key, character, timestamp);
+ modifiers_->GetModifierFlags(), dom_key, timestamp);
event.set_source_device_id(device_id);
if (platform_keycode)
event.set_platform_keycode(platform_keycode);
diff --git a/ui/events/ozone/events_ozone.gyp b/ui/events/ozone/events_ozone.gyp
index 37a3923..3562651 100644
--- a/ui/events/ozone/events_ozone.gyp
+++ b/ui/events/ozone/events_ozone.gyp
@@ -193,8 +193,6 @@
'layout/xkb/xkb_evdev_codes.cc',
'layout/xkb/xkb_evdev_codes.h',
'layout/xkb/xkb_key_code_converter.h',
- 'layout/xkb/xkb_keyboard_code_conversion.cc',
- 'layout/xkb/xkb_keyboard_code_conversion.h',
'layout/xkb/xkb_keyboard_layout_engine.cc',
'layout/xkb/xkb_keyboard_layout_engine.h',
'layout/xkb/xkb_keysym.h',
diff --git a/ui/events/ozone/layout/keyboard_layout_engine.h b/ui/events/ozone/layout/keyboard_layout_engine.h
index c4a96d4..1e15dfa 100644
--- a/ui/events/ozone/layout/keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/keyboard_layout_engine.h
@@ -8,13 +8,13 @@
#include <string>
#include "base/strings/string16.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/ozone/layout/events_ozone_layout_export.h"
namespace ui {
enum class DomCode;
-enum class DomKey;
// A KeyboardLayoutEngine provides a platform-independent interface to
// key mapping. Key mapping provides a meaning (DomKey and character,
@@ -66,7 +66,6 @@ class EVENTS_OZONE_LAYOUT_EXPORT KeyboardLayoutEngine {
virtual bool Lookup(DomCode dom_code,
int event_flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code,
uint32* platform_keycode) const = 0;
};
diff --git a/ui/events/ozone/layout/layout_util.h b/ui/events/ozone/layout/layout_util.h
index 84d9d1d..5a2ba52 100644
--- a/ui/events/ozone/layout/layout_util.h
+++ b/ui/events/ozone/layout/layout_util.h
@@ -8,13 +8,12 @@
// TODO(kpschoedel): consider moving this out of Ozone.
#include "base/strings/string16.h"
+#include "ui/events/keycodes/dom/dom_key.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/ozone/layout/events_ozone_layout_export.h"
namespace ui {
-enum class DomKey;
-
// Returns the ui::EventFlags value associated with a modifier key,
// or 0 (EF_NONE) if the key is not a modifier.
EVENTS_OZONE_LAYOUT_EXPORT int ModifierDomKeyToEventFlag(DomKey key);
diff --git a/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc b/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc
index 74721a1..aad89ad 100644
--- a/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc
@@ -26,7 +26,6 @@ bool NoKeyboardLayoutEngine::UsesAltGr() const {
bool NoKeyboardLayoutEngine::Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code,
uint32* platform_keycode) const {
return false;
diff --git a/ui/events/ozone/layout/no/no_keyboard_layout_engine.h b/ui/events/ozone/layout/no/no_keyboard_layout_engine.h
index 00cbda9..8b6a627 100644
--- a/ui/events/ozone/layout/no/no_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/no/no_keyboard_layout_engine.h
@@ -24,7 +24,6 @@ class EVENTS_OZONE_LAYOUT_EXPORT NoKeyboardLayoutEngine
bool Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code,
uint32* platform_keycode) const override;
};
diff --git a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc
index 83310a7..a1e898b 100644
--- a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc
@@ -41,11 +41,9 @@ bool StubKeyboardLayoutEngine::UsesAltGr() const {
bool StubKeyboardLayoutEngine::Lookup(DomCode dom_code,
int flags,
DomKey* out_dom_key,
- base::char16* out_character,
KeyboardCode* out_key_code,
uint32* platform_keycode) const {
- return DomCodeToUsLayoutMeaning(dom_code, flags, out_dom_key, out_character,
- out_key_code);
+ return DomCodeToUsLayoutDomKey(dom_code, flags, out_dom_key, out_key_code);
}
} // namespace ui
diff --git a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h
index a2d4912..0aa532f 100644
--- a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h
@@ -24,7 +24,6 @@ class EVENTS_OZONE_LAYOUT_EXPORT StubKeyboardLayoutEngine
bool Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code,
uint32* platform_keycode) const override;
};
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.cc
deleted file mode 100644
index 69571c3..0000000
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.cc
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h"
-
-#include "ui/events/keycodes/dom/dom_key.h"
-
-namespace ui {
-
-base::char16 DeadXkbKeySymToCombiningCharacter(xkb_keysym_t keysym) {
- switch (keysym) {
- case XKB_KEY_dead_grave:
- return 0x0300; // combining grave accent
- case XKB_KEY_dead_acute:
- return 0x0301; // combining acute accent
- case XKB_KEY_dead_circumflex:
- return 0x0302; // combining circumflex accent
- case XKB_KEY_dead_tilde:
- return 0x0303; // combining tilde
- case XKB_KEY_dead_macron:
- return 0x0304; // combining macron
- case XKB_KEY_dead_breve:
- return 0x0306; // combining breve
- case XKB_KEY_dead_abovedot:
- return 0x0307; // combining dot above
- case XKB_KEY_dead_diaeresis:
- return 0x0308; // combining diaeresis
- case XKB_KEY_dead_abovering:
- return 0x030A; // combining ring above
- case XKB_KEY_dead_doubleacute:
- return 0x030B; // combining double acute accent
- case XKB_KEY_dead_caron:
- return 0x030C; // combining caron
- case XKB_KEY_dead_cedilla:
- return 0x0327; // combining cedilla
- case XKB_KEY_dead_ogonek:
- return 0x0328; // combining ogonek
- case XKB_KEY_dead_iota:
- return 0x0345; // combining greek ypogegrammeni
- case XKB_KEY_dead_voiced_sound:
- return 0x3099; // combining katakana-hiragana voiced sound mark
- case XKB_KEY_dead_semivoiced_sound:
- return 0x309A; // combining katakana-hiragana semi-voiced sound mark
- case XKB_KEY_dead_belowdot:
- return 0x0323; // combining dot below
- case XKB_KEY_dead_hook:
- return 0x0309; // combining hook above
- case XKB_KEY_dead_horn:
- return 0x031B; // combining horn
- case XKB_KEY_dead_stroke:
- return 0x0338; // combining long solidus overlay
- case XKB_KEY_dead_abovecomma:
- return 0x0313; // combining comma above
- case XKB_KEY_dead_abovereversedcomma:
- return 0x0314; // combining reversed comma above
- case XKB_KEY_dead_doublegrave:
- return 0x030F; // combining double grave accent
- case XKB_KEY_dead_belowring:
- return 0x0325; // combining ring below
- case XKB_KEY_dead_belowmacron:
- return 0x0331; // combining macron below
- case XKB_KEY_dead_belowcircumflex:
- return 0x032D; // combining circumflex accent below
- case XKB_KEY_dead_belowtilde:
- return 0x0330; // combining tilde below
- case XKB_KEY_dead_belowbreve:
- return 0x032E; // combining breve below
- case XKB_KEY_dead_belowdiaeresis:
- return 0x0324; // combining diaeresis below
- case XKB_KEY_dead_invertedbreve:
- return 0x0311; // combining inverted breve
- case XKB_KEY_dead_belowcomma:
- return 0x0326; // combining comma below
- case XKB_KEY_dead_currency:
- return 0x00A4; // currency sign
- case XKB_KEY_dead_greek:
- return 0x037E; // greek question mark
- default:
- return 0;
- }
-}
-
-} // namespace ui
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h b/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h
deleted file mode 100644
index 0fd5252..0000000
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_code_conversion.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_CODE_CONVERSION_H_
-#define UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_CODE_CONVERSION_H_
-
-// TODO(kpschoedel): move this file out of Ozone so that it can be used to
-// determine DomKey for desktop X11, OR switch desktop X11 to use the Ozone
-// keyboard layout interface.
-
-#include <xkbcommon/xkbcommon.h>
-
-#include "base/strings/string16.h"
-#include "ui/events/keycodes/keyboard_codes.h"
-
-namespace ui {
-
-enum class DomKey;
-
-// Returns the dead key combining character associated with an xkb_keysym_t,
-// or 0 if the keysym is not recognized.
-base::char16 DeadXkbKeySymToCombiningCharacter(xkb_keysym_t keysym);
-
-} // namespace ui
-
-#endif // UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_CODE_CONVERSION_H_
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 3e393dc8..5307f73 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;
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h
index 89729a0..ccc8d65 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h
@@ -37,7 +37,6 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
bool Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
- base::char16* character,
KeyboardCode* key_code,
uint32* platform_keycode) const override;
@@ -59,13 +58,12 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
// Determines the Windows-based KeyboardCode (VKEY) for a character key,
// accounting for non-US layouts. May return VKEY_UNKNOWN, in which case the
// caller should, as a last resort, obtain a KeyboardCode using
- // |DomCodeToUsLayoutMeaning()|.
+ // |DomCodeToUsLayoutDomKey()|.
KeyboardCode DifficultKeyboardCode(DomCode dom_code,
int ui_flags,
xkb_keycode_t xkb_keycode,
xkb_mod_mask_t xkb_flags,
xkb_keysym_t xkb_keysym,
- DomKey dom_key,
base::char16 character) const;
// Maps DomCode to xkb_keycode_t.
@@ -89,7 +87,7 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
virtual bool 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;
// Helper for difficult VKEY lookup. If |ui_flags| matches |base_flags|,
// returns |base_character|; otherwise returns the XKB character for
diff --git a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc
index 6701beb..17ae1d8 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine_unittest.cc
@@ -85,13 +85,12 @@ class VkTestXkbKeyboardLayoutEngine : public XkbKeyboardLayoutEngine {
base::char16 character) const {
KeyboardCode key_code = DifficultKeyboardCode(
dom_code, flags, key_code_converter_.DomCodeToXkbKeyCode(dom_code),
- flags, CharacterToKeySym(character), DomKey::CHARACTER, character);
+ flags, CharacterToKeySym(character), character);
if (key_code == VKEY_UNKNOWN) {
DomKey dummy_dom_key;
- base::char16 dummy_character;
// If this fails, key_code remains VKEY_UNKNOWN.
- ignore_result(DomCodeToUsLayoutMeaning(dom_code, EF_NONE, &dummy_dom_key,
- &dummy_character, &key_code));
+ ignore_result(DomCodeToUsLayoutDomKey(dom_code, EF_NONE, &dummy_dom_key,
+ &key_code));
}
return key_code;
}
@@ -100,7 +99,7 @@ class VkTestXkbKeyboardLayoutEngine : public XkbKeyboardLayoutEngine {
bool XkbLookup(xkb_keycode_t xkb_keycode,
xkb_mod_mask_t xkb_flags,
xkb_keysym_t* xkb_keysym,
- base::char16* character) const override {
+ uint32_t* character) const override {
switch (entry_type_) {
case EntryType::NONE:
break;
@@ -817,11 +816,10 @@ TEST_F(XkbLayoutEngineVkTest, KeyboardCodeForNonPrintable) {
SCOPED_TRACE(static_cast<int>(e.test.dom_code));
layout_engine_->SetEntry(&e.test);
DomKey dom_key = DomKey::NONE;
- base::char16 character = 0;
KeyboardCode key_code = VKEY_UNKNOWN;
uint32_t keysym;
EXPECT_TRUE(layout_engine_->Lookup(e.test.dom_code, EF_NONE, &dom_key,
- &character, &key_code, &keysym));
+ &key_code, &keysym));
EXPECT_EQ(e.test.keysym, keysym);
EXPECT_EQ(e.key_code, key_code);
}
diff --git a/ui/keyboard/keyboard_util.cc b/ui/keyboard/keyboard_util.cc
index 188453f..572aecb 100644
--- a/ui/keyboard/keyboard_util.cc
+++ b/ui/keyboard/keyboard_util.cc
@@ -38,7 +38,7 @@ const char kKeyUp[] = "keyup";
void SendProcessKeyEvent(ui::EventType type,
aura::WindowTreeHost* host) {
ui::KeyEvent event(type, ui::VKEY_PROCESSKEY, ui::DomCode::NONE,
- ui::EF_IS_SYNTHESIZED, ui::DomKey::PROCESS, 0,
+ ui::EF_IS_SYNTHESIZED, ui::DomKey::PROCESS,
ui::EventTimeForNow());
ui::EventDispatchDetails details =
host->event_processor()->OnEventFromSource(&event);
@@ -253,17 +253,16 @@ bool MoveCursor(int swipe_direction,
if (domcodex != ui::DomCode::NONE) {
ui::KeyboardCode codex = ui::VKEY_UNKNOWN;
ui::DomKey domkeyx = ui::DomKey::NONE;
- base::char16 cx;
- ignore_result(DomCodeToUsLayoutMeaning(domcodex, ui::EF_NONE, &domkeyx,
- &cx, &codex));
+ ignore_result(DomCodeToUsLayoutDomKey(domcodex, ui::EF_NONE, &domkeyx,
+ &codex));
ui::KeyEvent press_event(ui::ET_KEY_PRESSED, codex, domcodex,
- modifier_flags, domkeyx, cx,
+ modifier_flags, domkeyx,
ui::EventTimeForNow());
ui::EventDispatchDetails details =
host->event_processor()->OnEventFromSource(&press_event);
CHECK(!details.dispatcher_destroyed);
ui::KeyEvent release_event(ui::ET_KEY_RELEASED, codex, domcodex,
- modifier_flags, domkeyx, cx,
+ modifier_flags, domkeyx,
ui::EventTimeForNow());
details = host->event_processor()->OnEventFromSource(&release_event);
CHECK(!details.dispatcher_destroyed);
@@ -273,17 +272,16 @@ bool MoveCursor(int swipe_direction,
if (domcodey != ui::DomCode::NONE) {
ui::KeyboardCode codey = ui::VKEY_UNKNOWN;
ui::DomKey domkeyy = ui::DomKey::NONE;
- base::char16 cy;
- ignore_result(DomCodeToUsLayoutMeaning(domcodey, ui::EF_NONE, &domkeyy,
- &cy, &codey));
+ ignore_result(DomCodeToUsLayoutDomKey(domcodey, ui::EF_NONE, &domkeyy,
+ &codey));
ui::KeyEvent press_event(ui::ET_KEY_PRESSED, codey, domcodey,
- modifier_flags, domkeyy, cy,
+ modifier_flags, domkeyy,
ui::EventTimeForNow());
ui::EventDispatchDetails details =
host->event_processor()->OnEventFromSource(&press_event);
CHECK(!details.dispatcher_destroyed);
ui::KeyEvent release_event(ui::ET_KEY_RELEASED, codey, domcodey,
- modifier_flags, domkeyy, cy,
+ modifier_flags, domkeyy,
ui::EventTimeForNow());
details = host->event_processor()->OnEventFromSource(&release_event);
CHECK(!details.dispatcher_destroyed);