xbmc
Seat.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 "SeatSelection.h"
12 
13 #include <cstdint>
14 #include <set>
15 
16 #include <wayland-client-protocol.hpp>
17 
18 namespace KODI
19 {
20 namespace WINDOWING
21 {
22 namespace WAYLAND
23 {
24 
25 class CSeat;
26 
34 {
35 public:
36  virtual void OnKeyboardKeymap(CSeat* seat, wayland::keyboard_keymap_format format, std::string const& keymap) {}
37  virtual void OnKeyboardEnter(CSeat* seat,
38  std::uint32_t serial,
39  const wayland::surface_t& surface,
40  const wayland::array_t& keys)
41  {
42  }
43  virtual void OnKeyboardLeave(CSeat* seat, std::uint32_t serial, const wayland::surface_t& surface)
44  {
45  }
46  virtual void OnKeyboardKey(CSeat* seat, std::uint32_t serial, std::uint32_t time, std::uint32_t key, wayland::keyboard_key_state state) {}
47  virtual void OnKeyboardModifiers(CSeat* seat, std::uint32_t serial, std::uint32_t modsDepressed, std::uint32_t modsLatched, std::uint32_t modsLocked, std::uint32_t group) {}
48  virtual void OnKeyboardRepeatInfo(CSeat* seat, std::int32_t rate, std::int32_t delay) {}
49 protected:
50  ~IRawInputHandlerKeyboard() = default;
51 };
52 
59 {
60 public:
61  virtual void OnPointerEnter(CSeat* seat,
62  std::uint32_t serial,
63  const wayland::surface_t& surface,
64  double surfaceX,
65  double surfaceY)
66  {
67  }
68  virtual void OnPointerLeave(CSeat* seat, std::uint32_t serial, const wayland::surface_t& surface)
69  {
70  }
71  virtual void OnPointerMotion(CSeat* seat, std::uint32_t time, double surfaceX, double surfaceY) {}
72  virtual void OnPointerButton(CSeat* seat, std::uint32_t serial, std::uint32_t time, std::uint32_t button, wayland::pointer_button_state state) {}
73  virtual void OnPointerAxis(CSeat* seat, std::uint32_t time, wayland::pointer_axis axis, double value) {}
74 protected:
75  ~IRawInputHandlerPointer() = default;
76 };
77 
84 {
85 public:
86  virtual void OnTouchDown(CSeat* seat,
87  std::uint32_t serial,
88  std::uint32_t time,
89  const wayland::surface_t& surface,
90  std::int32_t id,
91  double x,
92  double y)
93  {
94  }
95  virtual void OnTouchUp(CSeat* seat, std::uint32_t serial, std::uint32_t time, std::int32_t id) {}
96  virtual void OnTouchMotion(CSeat* seat, std::uint32_t time, std::int32_t id, double x, double y) {}
97  virtual void OnTouchCancel(CSeat* seat) {}
98  virtual void OnTouchShape(CSeat* seat, std::int32_t id, double major, double minor) {}
99 protected:
100  ~IRawInputHandlerTouch() = default;
101 };
102 
114 class CSeat
115 {
116 public:
123  CSeat(std::uint32_t globalName, wayland::seat_t const& seat, CConnection& connection);
124  ~CSeat() noexcept;
125 
126  void AddRawInputHandlerKeyboard(IRawInputHandlerKeyboard* rawKeyboardHandler);
127  void RemoveRawInputHandlerKeyboard(IRawInputHandlerKeyboard* rawKeyboardHandler);
128  void AddRawInputHandlerPointer(IRawInputHandlerPointer* rawPointerHandler);
129  void RemoveRawInputHandlerPointer(IRawInputHandlerPointer* rawPointerHandler);
130  void AddRawInputHandlerTouch(IRawInputHandlerTouch* rawTouchHandler);
131  void RemoveRawInputHandlerTouch(IRawInputHandlerTouch* rawTouchHandler);
132 
133  std::uint32_t GetGlobalName() const
134  {
135  return m_globalName;
136  }
137  std::string const& GetName() const
138  {
139  return m_name;
140  }
141  bool HasPointerCapability() const
142  {
143  return !!m_pointer;
144  }
145  bool HasKeyboardCapability() const
146  {
147  return !!m_keyboard;
148  }
149  bool HasTouchCapability() const
150  {
151  return !!m_touch;
152  }
153  std::string GetSelectionText() const
154  {
155  return m_selection.GetSelectionText();
156  }
164  wayland::seat_t const& GetWlSeat()
165  {
166  return m_seat;
167  }
168 
175  void SetCursor(std::uint32_t serial, wayland::surface_t const& surface, std::int32_t hotspotX, std::int32_t hotspotY);
176 
177 private:
178  CSeat(CSeat const& other) = delete;
179  CSeat& operator=(CSeat const& other) = delete;
180 
181  void HandleOnCapabilities(const wayland::seat_capability& caps);
182  void HandlePointerCapability();
183  void HandleKeyboardCapability();
184  void HandleTouchCapability();
185 
186  std::uint32_t m_globalName;
187  std::string m_name{"<unknown>"};
188 
189  wayland::seat_t m_seat;
190  wayland::pointer_t m_pointer;
191  wayland::keyboard_t m_keyboard;
192  wayland::touch_t m_touch;
193 
194  std::set<IRawInputHandlerKeyboard*> m_rawKeyboardHandlers;
195  std::set<IRawInputHandlerPointer*> m_rawPointerHandlers;
196  std::set<IRawInputHandlerTouch*> m_rawTouchHandlers;
197 
198  CSeatSelection m_selection;
199 };
200 
201 }
202 }
203 }
wayland::seat_t const & GetWlSeat()
Get the wl_seat underlying this seat.
Definition: Seat.h:164
Retrieve and accept selection (clipboard) offers on the data device of a seat.
Definition: SeatSelection.h:30
Handler for raw wl_touch events.
Definition: Seat.h:83
Handler for raw wl_pointer events.
Definition: Seat.h:58
Connection to Wayland compositor.
Definition: Connection.h:25
Definition: AudioDecoder.h:18
Handler for raw wl_keyboard events.
Definition: Seat.h:33
Definition: SmartPlayList.cpp:137
Handle all events and requests related to one seat (including input and selection) ...
Definition: Seat.h:114