OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ | 5 #ifndef UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ |
6 #define UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ | 6 #define UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <xkbcommon/xkbcommon.h> | 9 #include <xkbcommon/xkbcommon.h> |
10 | 10 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 // accounting for non-US layouts. May return VKEY_UNKNOWN, in which case the | 65 // accounting for non-US layouts. May return VKEY_UNKNOWN, in which case the |
66 // caller should, as a last resort, obtain a KeyboardCode using | 66 // caller should, as a last resort, obtain a KeyboardCode using |
67 // |DomCodeToUsLayoutDomKey()|. | 67 // |DomCodeToUsLayoutDomKey()|. |
68 KeyboardCode DifficultKeyboardCode(DomCode dom_code, | 68 KeyboardCode DifficultKeyboardCode(DomCode dom_code, |
69 int ui_flags, | 69 int ui_flags, |
70 xkb_keycode_t xkb_keycode, | 70 xkb_keycode_t xkb_keycode, |
71 xkb_mod_mask_t xkb_flags, | 71 xkb_mod_mask_t xkb_flags, |
72 xkb_keysym_t xkb_keysym, | 72 xkb_keysym_t xkb_keysym, |
73 base::char16 character) const; | 73 base::char16 character) const; |
74 | 74 |
| 75 // Sets a new XKB keymap. This updates xkb_state_ (which takes ownership |
| 76 // of the keymap), and updates xkb_flag_map_ for the new keymap. |
| 77 virtual void SetKeymap(xkb_keymap* keymap); |
| 78 |
75 // Maps DomCode to xkb_keycode_t. | 79 // Maps DomCode to xkb_keycode_t. |
76 const XkbKeyCodeConverter& key_code_converter_; | 80 const XkbKeyCodeConverter& key_code_converter_; |
77 | 81 |
| 82 // libxkbcommon uses explicit reference counting for its structures, |
| 83 // so we need to trigger its cleanup. |
| 84 std::unique_ptr<xkb_state, XkbStateDeleter> xkb_state_; |
| 85 |
78 private: | 86 private: |
79 struct XkbKeymapEntry { | 87 struct XkbKeymapEntry { |
80 std::string layout_name; | 88 std::string layout_name; |
81 xkb_keymap* keymap; | 89 xkb_keymap* keymap; |
82 }; | 90 }; |
83 std::vector<XkbKeymapEntry> xkb_keymaps_; | 91 std::vector<XkbKeymapEntry> xkb_keymaps_; |
84 // Sets a new XKB keymap. This updates xkb_state_ (which takes ownership | |
85 // of the keymap), and updates xkb_flag_map_ for the new keymap. | |
86 void SetKeymap(xkb_keymap* keymap); | |
87 | 92 |
88 // Returns the XKB modifiers flags corresponding to the given EventFlags. | 93 // Returns the XKB modifiers flags corresponding to the given EventFlags. |
89 xkb_mod_mask_t EventFlagsToXkbFlags(int ui_flags) const; | 94 xkb_mod_mask_t EventFlagsToXkbFlags(int ui_flags) const; |
90 | 95 |
91 // Determines the XKB KeySym and character associated with a key. | 96 // Determines the XKB KeySym and character associated with a key. |
92 // Returns true on success. This is virtual for testing. | 97 // Returns true on success. This is virtual for testing. |
93 virtual bool XkbLookup(xkb_keycode_t xkb_keycode, | 98 virtual bool XkbLookup(xkb_keycode_t xkb_keycode, |
94 xkb_mod_mask_t xkb_flags, | 99 xkb_mod_mask_t xkb_flags, |
95 xkb_keysym_t* xkb_keysym, | 100 xkb_keysym_t* xkb_keysym, |
96 uint32_t* character) const; | 101 uint32_t* character) const; |
97 | 102 |
98 // Helper for difficult VKEY lookup. If |ui_flags| matches |base_flags|, | 103 // Helper for difficult VKEY lookup. If |ui_flags| matches |base_flags|, |
99 // returns |base_character|; otherwise returns the XKB character for | 104 // returns |base_character|; otherwise returns the XKB character for |
100 // the keycode and mapped |ui_flags|. | 105 // the keycode and mapped |ui_flags|. |
101 base::char16 XkbSubCharacter(xkb_keycode_t xkb_keycode, | 106 base::char16 XkbSubCharacter(xkb_keycode_t xkb_keycode, |
102 xkb_mod_mask_t base_flags, | 107 xkb_mod_mask_t base_flags, |
103 base::char16 base_character, | 108 base::char16 base_character, |
104 int ui_flags) const; | 109 int ui_flags) const; |
105 | 110 |
106 // Callback when keymap file is loaded complete. | 111 // Callback when keymap file is loaded complete. |
107 void OnKeymapLoaded(const std::string& layout_name, | 112 void OnKeymapLoaded(const std::string& layout_name, |
108 std::unique_ptr<char, base::FreeDeleter> keymap_str); | 113 std::unique_ptr<char, base::FreeDeleter> keymap_str); |
109 | 114 |
110 // libxkbcommon uses explicit reference counting for its structures, | |
111 // so we need to trigger its cleanup. | |
112 std::unique_ptr<xkb_context, XkbContextDeleter> xkb_context_; | 115 std::unique_ptr<xkb_context, XkbContextDeleter> xkb_context_; |
113 std::unique_ptr<xkb_state, XkbStateDeleter> xkb_state_; | |
114 | 116 |
115 std::string current_layout_name_; | 117 std::string current_layout_name_; |
116 | 118 |
117 // Support weak pointers for attach & detach callbacks. | 119 // Support weak pointers for attach & detach callbacks. |
118 base::WeakPtrFactory<XkbKeyboardLayoutEngine> weak_ptr_factory_; | 120 base::WeakPtrFactory<XkbKeyboardLayoutEngine> weak_ptr_factory_; |
119 }; | 121 }; |
120 | 122 |
121 } // namespace ui | 123 } // namespace ui |
122 | 124 |
123 #endif // UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ | 125 #endif // UI_EVENTS_OZONE_LAYOUT_XKB_XKB_KEYBOARD_LAYOUT_ENGINE_H_ |
OLD | NEW |