diff options
-rw-r--r-- | ui/events/event.cc | 2 | ||||
-rw-r--r-- | ui/events/event.h | 2 | ||||
-rw-r--r-- | ui/events/ozone/evdev/keyboard_evdev.cc | 10 | ||||
-rw-r--r-- | ui/events/ozone/layout/keyboard_layout_engine.h | 5 | ||||
-rw-r--r-- | ui/events/ozone/layout/no/no_keyboard_layout_engine.cc | 3 | ||||
-rw-r--r-- | ui/events/ozone/layout/no/no_keyboard_layout_engine.h | 3 | ||||
-rw-r--r-- | ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc | 3 | ||||
-rw-r--r-- | ui/events/ozone/layout/stub/stub_keyboard_layout_engine.h | 3 | ||||
-rw-r--r-- | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.cc | 12 | ||||
-rw-r--r-- | ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h | 6 |
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. |