Index: ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h |
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 9569c2a2b742971a7bcb4a288f38ea6cff31fd9b..2047c5ff3a333ea746df29bf2a1ba26191279d23 100644 |
--- a/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h |
+++ b/ui/events/ozone/layout/xkb/xkb_keyboard_layout_engine.h |
@@ -36,6 +36,28 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine |
base::char16* character, |
KeyboardCode* key_code) const override; |
+ protected: |
+ // Table for EventFlagsToXkbFlags(). |
+ struct XkbFlagMapEntry { |
+ int ui_flag; |
+ xkb_mod_mask_t xkb_flag; |
+ }; |
+ std::vector<XkbFlagMapEntry> xkb_flag_map_; |
+ |
+ // 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 use |DomCodeToNonLocatedKeyboardCode()| as a last resort. |
+ 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. |
+ const XkbKeyCodeConverter& key_code_converter_; |
+ |
private: |
// Sets a new XKB keymap, updating object fields. |
void SetKeymap(xkb_keymap* keymap); |
@@ -44,26 +66,24 @@ class EVENTS_OZONE_LAYOUT_EXPORT XkbKeyboardLayoutEngine |
xkb_mod_mask_t EventFlagsToXkbFlags(int ui_flags) const; |
// Determines the XKB KeySym and character associated with a key. |
- // Returns true on success. |
- bool XkbLookup(xkb_keycode_t xkb_keycode, |
- xkb_mod_mask_t xkb_flags, |
- xkb_keysym_t* xkb_keysym, |
- base::char16* character) const; |
- |
- // Maps DomCode to xkb_keycode_t. |
- const XkbKeyCodeConverter& key_code_converter_; |
+ // Returns true on success. This is virtual for testing. |
+ virtual bool XkbLookup(xkb_keycode_t xkb_keycode, |
+ xkb_mod_mask_t xkb_flags, |
+ xkb_keysym_t* xkb_keysym, |
+ base::char16* character) const; |
+ |
+ // Helper for difficult VKEY lookup. If |ui_flags| matches |base_flags|, |
+ // returns |base_character|; otherwise returns the XKB character for |
+ // the keycode and mapped |ui_flags|. |
+ base::char16 XkbSubCharacter(xkb_keycode_t xkb_keycode, |
+ xkb_mod_mask_t base_flags, |
+ base::char16 base_character, |
+ int ui_flags) const; |
// libxkbcommon uses explicit reference counting for its structures, |
// so we need to trigger its cleanup. |
scoped_ptr<xkb_context, XkbContextDeleter> xkb_context_; |
scoped_ptr<xkb_state, XkbStateDeleter> xkb_state_; |
- |
- // Table for EventFlagsToXkbFlags(). |
- struct XkbFlagMapEntry { |
- int ui_flag; |
- xkb_mod_mask_t xkb_flag; |
- }; |
- std::vector<XkbFlagMapEntry> xkb_flag_map_; |
}; |
} // namespace ui |