kodi
XkbcommonKeymap.h
1 /*
2  * Copyright (C) 2017-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "input/keyboard/XBMC_keysym.h"
12 
13 #include <cstdint>
14 #include <memory>
15 #include <vector>
16 
17 #include <xkbcommon/xkbcommon-compose.h>
18 #include <xkbcommon/xkbcommon.h>
19 #ifdef TARGET_WEBOS
20 #include <xkbcommon/xkbcommon-webos-keysyms.h>
21 #endif
22 
23 namespace KODI
24 {
25 namespace WINDOWING
26 {
27 namespace WAYLAND
28 {
29 
49 enum class KeyComposerState
50 {
52  IDLE,
54  COMPOSING,
56  FINISHED,
58  CANCELLED
59 };
60 
65 {
67  KeyComposerState state{KeyComposerState::IDLE};
69  std::uint32_t keysym{0};
70 };
71 
73 {
74 public:
76  {
77  void operator()(xkb_keymap* keymap) const;
78  };
80  {
81  void operator()(xkb_compose_table* composeTable) const;
82  };
83 
87  explicit CXkbcommonKeymap(
88  std::unique_ptr<xkb_keymap, XkbKeymapDeleter> keymap,
89  std::unique_ptr<xkb_compose_table, XkbComposeTableDeleter> composeTable);
90 
94  xkb_keysym_t KeysymForKeycode(xkb_keycode_t code) const;
102  void UpdateMask(xkb_mod_mask_t depressed,
103  xkb_mod_mask_t latched,
104  xkb_mod_mask_t locked,
105  xkb_mod_mask_t group);
110  xkb_mod_mask_t CurrentModifiers() const;
114  XBMCKey XBMCKeyForKeycode(xkb_keycode_t code) const;
118  XBMCMod ActiveXBMCModifiers() const;
122  std::uint32_t UnicodeCodepointForKeycode(xkb_keycode_t code) const;
126  bool ShouldKeycodeRepeat(xkb_keycode_t code) const;
131  bool SupportsKeyComposition() const;
137  KeyComposerStatus KeyComposerFeed(xkb_keycode_t code);
141  void KeyComposerFlush();
142 
143  static XBMCKey XBMCKeyForKeysym(xkb_keysym_t sym);
144 
145 private:
146  struct XkbStateDeleter
147  {
148  void operator()(xkb_state* state) const;
149  };
150  struct XkbComposeStateDeleter
151  {
152  void operator()(xkb_compose_state* state) const;
153  };
154  static std::unique_ptr<xkb_state, XkbStateDeleter> CreateXkbStateFromKeymap(xkb_keymap* keymap);
155  static std::unique_ptr<xkb_compose_state, XkbComposeStateDeleter>
156  CreateXkbComposedStateStateFromTable(xkb_compose_table* composeTable);
157 
158  std::unique_ptr<xkb_keymap, XkbKeymapDeleter> m_keymap;
159  std::unique_ptr<xkb_state, XkbStateDeleter> m_state;
160  std::unique_ptr<xkb_compose_state, XkbComposeStateDeleter> m_composeState;
161 
162  struct ModifierMapping
163  {
164  xkb_mod_index_t xkb;
165  XBMCMod xbmc;
166  ModifierMapping(xkb_mod_index_t xkb, XBMCMod xbmc)
167  : xkb{xkb}, xbmc{xbmc}
168  {}
169  };
170  std::vector<ModifierMapping> m_modifierMappings;
171 };
172 
174 {
175 public:
176  explicit CXkbcommonContext(xkb_context_flags flags = XKB_CONTEXT_NO_FLAGS);
177 
185  std::unique_ptr<CXkbcommonKeymap> LocalizedKeymapFromString(const std::string& keymap,
186  const std::string& locale);
187 
188 private:
189  struct XkbContextDeleter
190  {
191  void operator()(xkb_context* ctx) const;
192  };
193  std::unique_ptr<xkb_context, XkbContextDeleter> m_context;
194 };
195 
196 
197 }
198 }
199 }
Definition: XkbcommonKeymap.h:72
Definition: XkbcommonKeymap.h:173
Container for the key composer status.
Definition: XkbcommonKeymap.h:64
Definition: AudioDecoder.h:18
Definition: inftrees.h:24
Definition: SmartPlayList.cpp:137