summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ui/events/event.cc2
-rw-r--r--ui/events/event.h2
-rw-r--r--ui/events/ozone/evdev/keyboard_evdev.cc10
-rw-r--r--ui/events/ozone/layout/keyboard_layout_engine.h5
-rw-r--r--ui/events/ozone/layout/no/no_keyboard_layout_engine.cc3
-rw-r--r--ui/events/ozone/layout/no/no_keyboard_layout_engine.h3
-rw-r--r--ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc3
-rw-r--r--ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h3
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc12
-rw-r--r--ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h6
10 files changed, 32 insertions, 17 deletions
diff --git a/ui/events/event.cc b/ui/events/event.cc
index c4e8c9c..fc87ca6 100644
--- a/ui/events/event.cc
+++ b/ui/events/event.cc
@@ -766,7 +766,7 @@ void KeyEvent::ApplyLayout() const {
#elif defined(USE_OZONE)
KeyboardCode key_code;
if (!KeyboardLayoutEngineManager::GetKeyboardLayoutEngine()->Lookup(
- code_, flags(), &key_, &character_, &key_code)) {
+ code_, flags(), &key_, &character_, &key_code, &platform_keycode_)) {
GetMeaningFromKeyCode(key_code_, flags(), &key_, &character_);
}
#else
diff --git a/ui/events/event.h b/ui/events/event.h
index 0b2a834..ded76c4 100644
--- a/ui/events/event.h
+++ b/ui/events/event.h
@@ -769,7 +769,7 @@ class EVENTS_EXPORT KeyEvent : public Event {
// The platform related keycode value. For XKB, it's keysym value.
// For now, this is used for CharacterComposer in ChromeOS.
- uint32 platform_keycode_;
+ mutable uint32 platform_keycode_;
// TODO(kpschoedel): refactor so that key_ and character_ are not mutable.
// This requires defining the KeyEvent completely at construction rather
diff --git a/ui/events/ozone/evdev/keyboard_evdev.cc b/ui/events/ozone/evdev/keyboard_evdev.cc
index 13ef3c1..86ed072 100644
--- a/ui/events/ozone/evdev/keyboard_evdev.cc
+++ b/ui/events/ozone/evdev/keyboard_evdev.cc
@@ -165,14 +165,18 @@ void KeyboardEvdev::DispatchKey(unsigned int key, bool down, bool repeat) {
DomKey dom_key;
KeyboardCode key_code;
uint16 character;
+ uint32 platform_keycode = 0;
if (!keyboard_layout_engine_->Lookup(dom_code, flags, &dom_key, &character,
- &key_code)) {
+ &key_code, &platform_keycode)) {
return;
}
- callback_.Run(make_scoped_ptr(
+ KeyEvent* event =
new KeyEvent(down ? ET_KEY_PRESSED : ET_KEY_RELEASED, key_code, dom_code,
- flags, dom_key, character)));
+ flags, dom_key, character);
+ if (platform_keycode)
+ event->set_platform_keycode(platform_keycode);
+ callback_.Run(make_scoped_ptr(event));
}
// static
diff --git a/ui/events/ozone/layout/keyboard_layout_engine.h b/ui/events/ozone/layout/keyboard_layout_engine.h
index 64b160d..766da21 100644
--- a/ui/events/ozone/layout/keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/keyboard_layout_engine.h
@@ -61,11 +61,14 @@ class EVENTS_OZONE_LAYOUT_EXPORT KeyboardLayoutEngine {
// Returns false if it cannot determine the meaning (and cannot determine
// that there is none); in this case it does not set any of the output
// parameters.
+ //
+ // TODO(kpschoedel): remove the platform_keycode output. crbug.com/442757
virtual bool Lookup(DomCode dom_code,
int event_flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const = 0;
+ KeyboardCode* key_code,
+ uint32* platform_keycode) const = 0;
};
} // namespace ui
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 0e5e816..74721a1 100644
--- a/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/no/no_keyboard_layout_engine.cc
@@ -27,7 +27,8 @@ bool NoKeyboardLayoutEngine::Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const {
+ 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 a5a3db1..f9cb6fe 100644
--- a/ui/events/ozone/layout/no/no_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/no/no_keyboard_layout_engine.h
@@ -25,7 +25,8 @@ class EVENTS_OZONE_LAYOUT_EXPORT NoKeyboardLayoutEngine
int flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const override;
+ KeyboardCode* key_code,
+ uint32* platform_keycode) const override;
};
} // namespace ui
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 f89a2d9..4279901 100644
--- a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc
@@ -257,7 +257,8 @@ bool StubKeyboardLayoutEngine::Lookup(DomCode dom_code,
int flags,
DomKey* out_dom_key,
base::char16* out_character,
- KeyboardCode* out_key_code) const {
+ KeyboardCode* out_key_code,
+ uint32* platform_keycode) const {
if ((flags & EF_CONTROL_DOWN) == EF_CONTROL_DOWN) {
if (LookupControlCharacter(dom_code, flags, out_dom_key, out_character,
out_key_code)) {
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 350504a6..cc82c9b 100644
--- a/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h
@@ -25,7 +25,8 @@ class EVENTS_OZONE_LAYOUT_EXPORT StubKeyboardLayoutEngine
int flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const override;
+ KeyboardCode* key_code,
+ uint32* platform_keycode) const override;
};
} // namespace ui
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 4e15b2b..7205539 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc
@@ -669,12 +669,12 @@ bool XkbKeyboardLayoutEngine::SetCurrentLayoutByName(
xkb_keymap* keymap = xkb_keymap_new_from_names(xkb_context_.get(),
&names,
XKB_KEYMAP_COMPILE_NO_FLAGS);
- if (keymap)
+ if (keymap) {
SetKeymap(keymap);
- return true;
-#else
+ return true;
+ }
+#endif // defined(OS_CHROMEOS)
return false;
-#endif
}
bool XkbKeyboardLayoutEngine::UsesISOLevel5Shift() const {
@@ -691,7 +691,8 @@ bool XkbKeyboardLayoutEngine::Lookup(DomCode dom_code,
int flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const {
+ KeyboardCode* key_code,
+ uint32* platform_keycode) const {
// Convert DOM physical key to XKB representation.
xkb_keycode_t xkb_keycode = key_code_converter_.DomCodeToXkbKeyCode(dom_code);
if (xkb_keycode == key_code_converter_.InvalidXkbKeyCode()) {
@@ -705,6 +706,7 @@ bool XkbKeyboardLayoutEngine::Lookup(DomCode dom_code,
xkb_keysym_t xkb_keysym;
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 = NonPrintableXkbKeySymToDomKey(xkb_keysym);
if (*dom_key == DomKey::NONE) {
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 2047c5f..d7a98545 100644
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h
@@ -34,7 +34,8 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
int flags,
DomKey* dom_key,
base::char16* character,
- KeyboardCode* key_code) const override;
+ KeyboardCode* key_code,
+ uint32* platform_keycode) const override;
protected:
// Table for EventFlagsToXkbFlags().
@@ -59,7 +60,8 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine
const XkbKeyCodeConverter& key_code_converter_;
private:
- // Sets a new XKB keymap, updating object fields.
+ // Sets a new XKB keymap. This updates xkb_state_ (which takes ownership
+ // of the keymap), and updates xkb_flag_map_ for the new keymap.
void SetKeymap(xkb_keymap* keymap);
// Returns the XKB modifiers flags corresponding to the given EventFlags.