Wayland++  1.0.0
C++ Bindings for Wayland
wayland-server-protocol.hpp
1 #pragma once
2 
3 #include <array>
4 #include <functional>
5 #include <memory>
6 #include <string>
7 #include <vector>
8 
9 #include <wayland-server.hpp>
10 
11 struct wl_registry;
12 struct wl_callback;
13 struct wl_compositor;
14 struct wl_shm_pool;
15 struct wl_shm;
16 struct wl_buffer;
17 struct wl_data_offer;
18 struct wl_data_source;
19 struct wl_data_device;
20 struct wl_data_device_manager;
21 struct wl_shell;
22 struct wl_shell_surface;
23 struct wl_surface;
24 struct wl_seat;
25 struct wl_pointer;
26 struct wl_keyboard;
27 struct wl_touch;
28 struct wl_output;
29 struct wl_region;
30 struct wl_subcompositor;
31 struct wl_subsurface;
32 
33 namespace wayland
34 {
35 namespace server
36 {
37 class registry_t;
38 class callback_t;
39 class compositor_t;
40 class shm_pool_t;
41 class shm_t;
42 enum class shm_error : uint32_t;
43 enum class shm_format : uint32_t;
44 class buffer_t;
45 class data_offer_t;
46 enum class data_offer_error : uint32_t;
47 class data_source_t;
48 enum class data_source_error : uint32_t;
49 class data_device_t;
50 enum class data_device_error : uint32_t;
51 class data_device_manager_t;
52 struct data_device_manager_dnd_action;
53 class shell_t;
54 enum class shell_error : uint32_t;
55 class shell_surface_t;
56 struct shell_surface_resize;
57 struct shell_surface_transient;
58 enum class shell_surface_fullscreen_method : uint32_t;
59 class surface_t;
60 enum class surface_error : uint32_t;
61 class seat_t;
62 struct seat_capability;
63 enum class seat_error : uint32_t;
64 class pointer_t;
65 enum class pointer_error : uint32_t;
66 enum class pointer_button_state : uint32_t;
67 enum class pointer_axis : uint32_t;
68 enum class pointer_axis_source : uint32_t;
69 class keyboard_t;
70 enum class keyboard_keymap_format : uint32_t;
71 enum class keyboard_key_state : uint32_t;
72 class touch_t;
73 class output_t;
74 enum class output_subpixel : uint32_t;
75 struct output_transform;
76 struct output_mode;
77 class region_t;
78 class subcompositor_t;
79 enum class subcompositor_error : uint32_t;
80 class subsurface_t;
81 enum class subsurface_error : uint32_t;
82 
83 namespace detail
84 {
85  extern const wl_interface display_interface;
86  extern const wl_interface registry_interface;
87  extern const wl_interface callback_interface;
88  extern const wl_interface compositor_interface;
89  extern const wl_interface shm_pool_interface;
90  extern const wl_interface shm_interface;
91  extern const wl_interface buffer_interface;
92  extern const wl_interface data_offer_interface;
93  extern const wl_interface data_source_interface;
94  extern const wl_interface data_device_interface;
95  extern const wl_interface data_device_manager_interface;
96  extern const wl_interface shell_interface;
97  extern const wl_interface shell_surface_interface;
98  extern const wl_interface surface_interface;
99  extern const wl_interface seat_interface;
100  extern const wl_interface pointer_interface;
101  extern const wl_interface keyboard_interface;
102  extern const wl_interface touch_interface;
103  extern const wl_interface output_interface;
104  extern const wl_interface region_interface;
105  extern const wl_interface subcompositor_interface;
106  extern const wl_interface subsurface_interface;
107 }
108 
133 class registry_t : public resource_t
134 {
135 private:
136  struct events_t : public resource_t::events_base_t
137  {
138  std::function<void(uint32_t, resource_t)> bind;
139  };
140 
141  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
142 
143 protected:
144  static constexpr const wl_interface *interface = &wayland::server::detail::registry_interface;
145  static constexpr const unsigned int max_version = 1;
146 
147  friend class global_t<registry_t>;
148  friend class global_base_t;
149 
150 public:
151  registry_t() = default;
152  registry_t(const client_t& client, uint32_t id, int version = 1);
153  registry_t(const resource_t &resource);
154 
155  static const std::string interface_name;
156 
157  operator wl_registry*() const;
158 
167  std::function<void(uint32_t, resource_t)> &on_bind();
168 
181  void global(uint32_t name, std::string const& interface, uint32_t version, bool post = true);
182 
185  static constexpr std::uint32_t global_since_version = 1;
186 
202  void global_remove(uint32_t name, bool post = true);
203 
206  static constexpr std::uint32_t global_remove_since_version = 1;
207 
208 };
209 
211 
212 
219 class callback_t : public resource_t
220 {
221 private:
222  struct events_t : public resource_t::events_base_t
223  {
224  };
225 
226  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
227 
228 protected:
229  static constexpr const wl_interface *interface = &wayland::server::detail::callback_interface;
230  static constexpr const unsigned int max_version = 1;
231 
232  friend class global_t<callback_t>;
233  friend class global_base_t;
234 
235 public:
236  callback_t() = default;
237  callback_t(const client_t& client, uint32_t id, int version = 1);
238  callback_t(const resource_t &resource);
239 
240  static const std::string interface_name;
241 
242  operator wl_callback*() const;
243 
250  void done(uint32_t callback_data, bool post = true);
251 
254  static constexpr std::uint32_t done_since_version = 1;
255 
256 };
257 
259 
260 
268 class compositor_t : public resource_t
269 {
270 private:
271  struct events_t : public resource_t::events_base_t
272  {
273  std::function<void(surface_t)> create_surface;
274  std::function<void(region_t)> create_region;
275  };
276 
277  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
278 
279 protected:
280  static constexpr const wl_interface *interface = &wayland::server::detail::compositor_interface;
281  static constexpr const unsigned int max_version = 5;
282 
283  friend class global_t<compositor_t>;
284  friend class global_base_t;
285 
286 public:
287  compositor_t() = default;
288  compositor_t(const client_t& client, uint32_t id, int version = 5);
289  compositor_t(const resource_t &resource);
290 
291  static const std::string interface_name;
292 
293  operator wl_compositor*() const;
294 
301  std::function<void(surface_t)> &on_create_surface();
302 
309  std::function<void(region_t)> &on_create_region();
310 
311 };
312 
314 
315 
327 class shm_pool_t : public resource_t
328 {
329 private:
330  struct events_t : public resource_t::events_base_t
331  {
332  std::function<void(buffer_t, int32_t, int32_t, int32_t, int32_t, shm_format)> create_buffer;
333  std::function<void()> destroy;
334  std::function<void(int32_t)> resize;
335  };
336 
337  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
338 
339 protected:
340  static constexpr const wl_interface *interface = &wayland::server::detail::shm_pool_interface;
341  static constexpr const unsigned int max_version = 1;
342 
343  friend class global_t<shm_pool_t>;
344  friend class global_base_t;
345 
346 public:
347  shm_pool_t() = default;
348  shm_pool_t(const client_t& client, uint32_t id, int version = 1);
349  shm_pool_t(const resource_t &resource);
350 
351  static const std::string interface_name;
352 
353  operator wl_shm_pool*() const;
354 
376  std::function<void(buffer_t, int32_t, int32_t, int32_t, int32_t, shm_format)> &on_create_buffer();
377 
387  std::function<void()> &on_destroy();
388 
404  std::function<void(int32_t)> &on_resize();
405 
406 };
407 
409 
410 
424 class shm_t : public resource_t
425 {
426 private:
427  struct events_t : public resource_t::events_base_t
428  {
429  std::function<void(shm_pool_t, int, int32_t)> create_pool;
430  };
431 
432  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
433 
434 protected:
435  static constexpr const wl_interface *interface = &wayland::server::detail::shm_interface;
436  static constexpr const unsigned int max_version = 1;
437 
438  friend class global_t<shm_t>;
439  friend class global_base_t;
440 
441 public:
442  shm_t() = default;
443  shm_t(const client_t& client, uint32_t id, int version = 1);
444  shm_t(const resource_t &resource);
445 
446  static const std::string interface_name;
447 
448  operator wl_shm*() const;
449 
462  std::function<void(shm_pool_t, int, int32_t)> &on_create_pool();
463 
472  void format(shm_format const& format, bool post = true);
473 
476  static constexpr std::uint32_t format_since_version = 1;
477 
480  void post_invalid_format(std::string const& msg);
481 
484  void post_invalid_stride(std::string const& msg);
485 
488  void post_invalid_fd(std::string const& msg);
489 
490 };
491 
493 
499 enum class shm_error : uint32_t
500  {
502  invalid_format = 0,
504  invalid_stride = 1,
506  invalid_fd = 2
507 };
508 
525 enum class shm_format : uint32_t
526  {
528  argb8888 = 0,
530  xrgb8888 = 1,
532  c8 = 0x20203843,
534  rgb332 = 0x38424752,
536  bgr233 = 0x38524742,
538  xrgb4444 = 0x32315258,
540  xbgr4444 = 0x32314258,
542  rgbx4444 = 0x32315852,
544  bgrx4444 = 0x32315842,
546  argb4444 = 0x32315241,
548  abgr4444 = 0x32314241,
550  rgba4444 = 0x32314152,
552  bgra4444 = 0x32314142,
554  xrgb1555 = 0x35315258,
556  xbgr1555 = 0x35314258,
558  rgbx5551 = 0x35315852,
560  bgrx5551 = 0x35315842,
562  argb1555 = 0x35315241,
564  abgr1555 = 0x35314241,
566  rgba5551 = 0x35314152,
568  bgra5551 = 0x35314142,
570  rgb565 = 0x36314752,
572  bgr565 = 0x36314742,
574  rgb888 = 0x34324752,
576  bgr888 = 0x34324742,
578  xbgr8888 = 0x34324258,
580  rgbx8888 = 0x34325852,
582  bgrx8888 = 0x34325842,
584  abgr8888 = 0x34324241,
586  rgba8888 = 0x34324152,
588  bgra8888 = 0x34324142,
590  xrgb2101010 = 0x30335258,
592  xbgr2101010 = 0x30334258,
594  rgbx1010102 = 0x30335852,
596  bgrx1010102 = 0x30335842,
598  argb2101010 = 0x30335241,
600  abgr2101010 = 0x30334241,
602  rgba1010102 = 0x30334152,
604  bgra1010102 = 0x30334142,
606  yuyv = 0x56595559,
608  yvyu = 0x55595659,
610  uyvy = 0x59565955,
612  vyuy = 0x59555956,
614  ayuv = 0x56555941,
616  nv12 = 0x3231564e,
618  nv21 = 0x3132564e,
620  nv16 = 0x3631564e,
622  nv61 = 0x3136564e,
624  yuv410 = 0x39565559,
626  yvu410 = 0x39555659,
628  yuv411 = 0x31315559,
630  yvu411 = 0x31315659,
632  yuv420 = 0x32315559,
634  yvu420 = 0x32315659,
636  yuv422 = 0x36315559,
638  yvu422 = 0x36315659,
640  yuv444 = 0x34325559,
642  yvu444 = 0x34325659,
644  r8 = 0x20203852,
646  r16 = 0x20363152,
648  rg88 = 0x38384752,
650  gr88 = 0x38385247,
652  rg1616 = 0x32334752,
654  gr1616 = 0x32335247,
656  xrgb16161616f = 0x48345258,
658  xbgr16161616f = 0x48344258,
660  argb16161616f = 0x48345241,
662  abgr16161616f = 0x48344241,
664  xyuv8888 = 0x56555958,
666  vuy888 = 0x34325556,
668  vuy101010 = 0x30335556,
670  y210 = 0x30313259,
672  y212 = 0x32313259,
674  y216 = 0x36313259,
676  y410 = 0x30313459,
678  y412 = 0x32313459,
680  y416 = 0x36313459,
682  xvyu2101010 = 0x30335658,
684  xvyu12_16161616 = 0x36335658,
686  xvyu16161616 = 0x38345658,
688  y0l0 = 0x304c3059,
690  x0l0 = 0x304c3058,
692  y0l2 = 0x324c3059,
694  x0l2 = 0x324c3058,
695  yuv420_8bit = 0x38305559,
696  yuv420_10bit = 0x30315559,
697  xrgb8888_a8 = 0x38415258,
698  xbgr8888_a8 = 0x38414258,
699  rgbx8888_a8 = 0x38415852,
700  bgrx8888_a8 = 0x38415842,
701  rgb888_a8 = 0x38413852,
702  bgr888_a8 = 0x38413842,
703  rgb565_a8 = 0x38413552,
704  bgr565_a8 = 0x38413542,
706  nv24 = 0x3432564e,
708  nv42 = 0x3234564e,
710  p210 = 0x30313250,
712  p010 = 0x30313050,
714  p012 = 0x32313050,
716  p016 = 0x36313050,
718  axbxgxrx106106106106 = 0x30314241,
720  nv15 = 0x3531564e,
721  q410 = 0x30313451,
722  q401 = 0x31303451,
724  xrgb16161616 = 0x38345258,
726  xbgr16161616 = 0x38344258,
728  argb16161616 = 0x38345241,
730  abgr16161616 = 0x38344241
731 };
732 
733 
748 class buffer_t : public resource_t
749 {
750 private:
751  struct events_t : public resource_t::events_base_t
752  {
753  std::function<void()> destroy;
754  };
755 
756  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
757 
758 protected:
759  static constexpr const wl_interface *interface = &wayland::server::detail::buffer_interface;
760  static constexpr const unsigned int max_version = 1;
761 
762  friend class global_t<buffer_t>;
763  friend class global_base_t;
764 
765 public:
766  buffer_t() = default;
767  buffer_t(const client_t& client, uint32_t id, int version = 1);
768  buffer_t(const resource_t &resource);
769 
770  static const std::string interface_name;
771 
772  operator wl_buffer*() const;
773 
782  std::function<void()> &on_destroy();
783 
800  void release(bool post = true);
801 
804  static constexpr std::uint32_t release_since_version = 1;
805 
806 };
807 
809 
810 
821 class data_offer_t : public resource_t
822 {
823 private:
824  struct events_t : public resource_t::events_base_t
825  {
826  std::function<void(uint32_t, std::string)> accept;
827  std::function<void(std::string, int)> receive;
828  std::function<void()> destroy;
829  std::function<void()> finish;
830  std::function<void(data_device_manager_dnd_action, data_device_manager_dnd_action)> set_actions;
831  };
832 
833  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
834 
835 protected:
836  static constexpr const wl_interface *interface = &wayland::server::detail::data_offer_interface;
837  static constexpr const unsigned int max_version = 3;
838 
839  friend class global_t<data_offer_t>;
840  friend class global_base_t;
841 
842 public:
843  data_offer_t() = default;
844  data_offer_t(const client_t& client, uint32_t id, int version = 3);
845  data_offer_t(const resource_t &resource);
846 
847  static const std::string interface_name;
848 
849  operator wl_data_offer*() const;
850 
871  std::function<void(uint32_t, std::string)> &on_accept();
872 
894  std::function<void(std::string, int)> &on_receive();
895 
901  std::function<void()> &on_destroy();
902 
921  std::function<void()> &on_finish();
922 
961 
969  void offer(std::string const& mime_type, bool post = true);
970 
973  static constexpr std::uint32_t offer_since_version = 1;
974 
983  void source_actions(data_device_manager_dnd_action const& source_actions, bool post = true);
984 
987  static constexpr std::uint32_t source_actions_since_version = 3;
988 
992  bool can_source_actions() const;
993 
1034  void action(data_device_manager_dnd_action const& dnd_action, bool post = true);
1035 
1038  static constexpr std::uint32_t action_since_version = 3;
1039 
1043  bool can_action() const;
1044 
1047  void post_invalid_finish(std::string const& msg);
1048 
1051  void post_invalid_action_mask(std::string const& msg);
1052 
1055  void post_invalid_action(std::string const& msg);
1056 
1059  void post_invalid_offer(std::string const& msg);
1060 
1061 };
1062 
1064 
1068 enum class data_offer_error : uint32_t
1069  {
1071  invalid_finish = 0,
1073  invalid_action_mask = 1,
1075  invalid_action = 2,
1077  invalid_offer = 3
1078 };
1079 
1080 
1089 class data_source_t : public resource_t
1090 {
1091 private:
1092  struct events_t : public resource_t::events_base_t
1093  {
1094  std::function<void(std::string)> offer;
1095  std::function<void()> destroy;
1096  std::function<void(data_device_manager_dnd_action)> set_actions;
1097  };
1098 
1099  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1100 
1101 protected:
1102  static constexpr const wl_interface *interface = &wayland::server::detail::data_source_interface;
1103  static constexpr const unsigned int max_version = 3;
1104 
1105  friend class global_t<data_source_t>;
1106  friend class global_base_t;
1107 
1108 public:
1109  data_source_t() = default;
1110  data_source_t(const client_t& client, uint32_t id, int version = 3);
1111  data_source_t(const resource_t &resource);
1112 
1113  static const std::string interface_name;
1114 
1115  operator wl_data_source*() const;
1116 
1125  std::function<void(std::string)> &on_offer();
1126 
1132  std::function<void()> &on_destroy();
1133 
1152  std::function<void(data_device_manager_dnd_action)> &on_set_actions();
1153 
1163  void target(std::string const& mime_type, bool post = true);
1164 
1167  static constexpr std::uint32_t target_since_version = 1;
1168 
1178  void send(std::string const& mime_type, int fd, bool post = true);
1179 
1182  static constexpr std::uint32_t send_since_version = 1;
1183 
1208  void cancelled(bool post = true);
1209 
1212  static constexpr std::uint32_t cancelled_since_version = 1;
1213 
1227  void dnd_drop_performed(bool post = true);
1228 
1231  static constexpr std::uint32_t dnd_drop_performed_since_version = 3;
1232 
1236  bool can_dnd_drop_performed() const;
1237 
1248  void dnd_finished(bool post = true);
1249 
1252  static constexpr std::uint32_t dnd_finished_since_version = 3;
1253 
1257  bool can_dnd_finished() const;
1258 
1289  void action(data_device_manager_dnd_action const& dnd_action, bool post = true);
1290 
1293  static constexpr std::uint32_t action_since_version = 3;
1294 
1298  bool can_action() const;
1299 
1302  void post_invalid_action_mask(std::string const& msg);
1303 
1306  void post_invalid_source(std::string const& msg);
1307 
1308 };
1309 
1311 
1315 enum class data_source_error : uint32_t
1316  {
1318  invalid_action_mask = 0,
1320  invalid_source = 1
1321 };
1322 
1323 
1333 class data_device_t : public resource_t
1334 {
1335 private:
1336  struct events_t : public resource_t::events_base_t
1337  {
1338  std::function<void(data_source_t, surface_t, surface_t, uint32_t)> start_drag;
1339  std::function<void(data_source_t, uint32_t)> set_selection;
1340  std::function<void()> release;
1341  };
1342 
1343  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1344 
1345 protected:
1346  static constexpr const wl_interface *interface = &wayland::server::detail::data_device_interface;
1347  static constexpr const unsigned int max_version = 3;
1348 
1349  friend class global_t<data_device_t>;
1350  friend class global_base_t;
1351 
1352 public:
1353  data_device_t() = default;
1354  data_device_t(const client_t& client, uint32_t id, int version = 3);
1355  data_device_t(const resource_t &resource);
1356 
1357  static const std::string interface_name;
1358 
1359  operator wl_data_device*() const;
1360 
1397  std::function<void(data_source_t, surface_t, surface_t, uint32_t)> &on_start_drag();
1398 
1409  std::function<void(data_source_t, uint32_t)> &on_set_selection();
1410 
1416  std::function<void()> &on_release();
1417 
1430  void data_offer(bool post = true);
1431 
1434  static constexpr std::uint32_t data_offer_since_version = 1;
1435 
1449  void enter(uint32_t serial, surface_t const& surface, double x, double y, data_offer_t const& id, bool post = true);
1450 
1453  static constexpr std::uint32_t enter_since_version = 1;
1454 
1462  void leave(bool post = true);
1463 
1466  static constexpr std::uint32_t leave_since_version = 1;
1467 
1479  void motion(uint32_t time, double x, double y, bool post = true);
1480 
1483  static constexpr std::uint32_t motion_since_version = 1;
1484 
1502  void drop(bool post = true);
1503 
1506  static constexpr std::uint32_t drop_since_version = 1;
1507 
1525  void selection(data_offer_t const& id, bool post = true);
1526 
1529  static constexpr std::uint32_t selection_since_version = 1;
1530 
1533  void post_role(std::string const& msg);
1534 
1535 };
1536 
1538 
1542 enum class data_device_error : uint32_t
1543  {
1545  role = 0
1546 };
1547 
1548 
1563 class data_device_manager_t : public resource_t
1564 {
1565 private:
1566  struct events_t : public resource_t::events_base_t
1567  {
1568  std::function<void(data_source_t)> create_data_source;
1569  std::function<void(data_device_t, seat_t)> get_data_device;
1570  };
1571 
1572  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1573 
1574 protected:
1575  static constexpr const wl_interface *interface = &wayland::server::detail::data_device_manager_interface;
1576  static constexpr const unsigned int max_version = 3;
1577 
1578  friend class global_t<data_device_manager_t>;
1579  friend class global_base_t;
1580 
1581 public:
1582  data_device_manager_t() = default;
1583  data_device_manager_t(const client_t& client, uint32_t id, int version = 3);
1584  data_device_manager_t(const resource_t &resource);
1585 
1586  static const std::string interface_name;
1587 
1588  operator wl_data_device_manager*() const;
1589 
1596  std::function<void(data_source_t)> &on_create_data_source();
1597 
1605  std::function<void(data_device_t, seat_t)> &on_get_data_device();
1606 
1607 };
1608 
1610 
1638 struct data_device_manager_dnd_action : public wayland::detail::bitfield<3, 6>
1639 {
1640  data_device_manager_dnd_action(const wayland::detail::bitfield<3, 6> &b)
1641  : wayland::detail::bitfield<3, 6>(b) {}
1642  data_device_manager_dnd_action(const uint32_t value)
1643  : wayland::detail::bitfield<3, 6>(value) {}
1645  static const wayland::detail::bitfield<3, 6> none;
1647  static const wayland::detail::bitfield<3, 6> copy;
1649  static const wayland::detail::bitfield<3, 6> move;
1651  static const wayland::detail::bitfield<3, 6> ask;
1652 };
1653 
1654 
1668 class shell_t : public resource_t
1669 {
1670 private:
1671  struct events_t : public resource_t::events_base_t
1672  {
1673  std::function<void(shell_surface_t, surface_t)> get_shell_surface;
1674  };
1675 
1676  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1677 
1678 protected:
1679  static constexpr const wl_interface *interface = &wayland::server::detail::shell_interface;
1680  static constexpr const unsigned int max_version = 1;
1681 
1682  friend class global_t<shell_t>;
1683  friend class global_base_t;
1684 
1685 public:
1686  shell_t() = default;
1687  shell_t(const client_t& client, uint32_t id, int version = 1);
1688  shell_t(const resource_t &resource);
1689 
1690  static const std::string interface_name;
1691 
1692  operator wl_shell*() const;
1693 
1705  std::function<void(shell_surface_t, surface_t)> &on_get_shell_surface();
1706 
1709  void post_role(std::string const& msg);
1710 
1711 };
1712 
1714 
1718 enum class shell_error : uint32_t
1719  {
1721  role = 0
1722 };
1723 
1724 
1740 class shell_surface_t : public resource_t
1741 {
1742 private:
1743  struct events_t : public resource_t::events_base_t
1744  {
1745  std::function<void(uint32_t)> pong;
1746  std::function<void(seat_t, uint32_t)> move;
1747  std::function<void(seat_t, uint32_t, shell_surface_resize)> resize;
1748  std::function<void()> set_toplevel;
1749  std::function<void(surface_t, int32_t, int32_t, shell_surface_transient)> set_transient;
1750  std::function<void(shell_surface_fullscreen_method, uint32_t, output_t)> set_fullscreen;
1751  std::function<void(seat_t, uint32_t, surface_t, int32_t, int32_t, shell_surface_transient)> set_popup;
1752  std::function<void(output_t)> set_maximized;
1753  std::function<void(std::string)> set_title;
1754  std::function<void(std::string)> set_class;
1755  };
1756 
1757  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1758 
1759 protected:
1760  static constexpr const wl_interface *interface = &wayland::server::detail::shell_surface_interface;
1761  static constexpr const unsigned int max_version = 1;
1762 
1763  friend class global_t<shell_surface_t>;
1764  friend class global_base_t;
1765 
1766 public:
1767  shell_surface_t() = default;
1768  shell_surface_t(const client_t& client, uint32_t id, int version = 1);
1769  shell_surface_t(const resource_t &resource);
1770 
1771  static const std::string interface_name;
1772 
1773  operator wl_shell_surface*() const;
1774 
1782  std::function<void(uint32_t)> &on_pong();
1783 
1795  std::function<void(seat_t, uint32_t)> &on_move();
1796 
1809  std::function<void(seat_t, uint32_t, shell_surface_resize)> &on_resize();
1810 
1818  std::function<void()> &on_set_toplevel();
1819 
1835  std::function<void(surface_t, int32_t, int32_t, shell_surface_transient)> &on_set_transient();
1836 
1877  std::function<void(shell_surface_fullscreen_method, uint32_t, output_t)> &on_set_fullscreen();
1878 
1908  std::function<void(seat_t, uint32_t, surface_t, int32_t, int32_t, shell_surface_transient)> &on_set_popup();
1909 
1933  std::function<void(output_t)> &on_set_maximized();
1934 
1947  std::function<void(std::string)> &on_set_title();
1948 
1960  std::function<void(std::string)> &on_set_class();
1961 
1969  void ping(uint32_t serial, bool post = true);
1970 
1973  static constexpr std::uint32_t ping_since_version = 1;
1974 
1999  void configure(shell_surface_resize const& edges, int32_t width, int32_t height, bool post = true);
2000 
2003  static constexpr std::uint32_t configure_since_version = 1;
2004 
2012  void popup_done(bool post = true);
2013 
2016  static constexpr std::uint32_t popup_done_since_version = 1;
2017 
2018 };
2019 
2021 
2030 struct shell_surface_resize : public wayland::detail::bitfield<4, 8>
2031 {
2032  shell_surface_resize(const wayland::detail::bitfield<4, 8> &b)
2033  : wayland::detail::bitfield<4, 8>(b) {}
2034  shell_surface_resize(const uint32_t value)
2035  : wayland::detail::bitfield<4, 8>(value) {}
2037  static const wayland::detail::bitfield<4, 8> none;
2039  static const wayland::detail::bitfield<4, 8> top;
2041  static const wayland::detail::bitfield<4, 8> bottom;
2043  static const wayland::detail::bitfield<4, 8> left;
2045  static const wayland::detail::bitfield<4, 8> top_left;
2047  static const wayland::detail::bitfield<4, 8> bottom_left;
2049  static const wayland::detail::bitfield<4, 8> right;
2051  static const wayland::detail::bitfield<4, 8> top_right;
2053  static const wayland::detail::bitfield<4, 8> bottom_right;
2054 };
2055 
2062 struct shell_surface_transient : public wayland::detail::bitfield<1, 9>
2063 {
2064  shell_surface_transient(const wayland::detail::bitfield<1, 9> &b)
2065  : wayland::detail::bitfield<1, 9>(b) {}
2066  shell_surface_transient(const uint32_t value)
2067  : wayland::detail::bitfield<1, 9>(value) {}
2069  static const wayland::detail::bitfield<1, 9> inactive;
2070 };
2071 
2079 enum class shell_surface_fullscreen_method : uint32_t
2080  {
2082  _default = 0,
2084  scale = 1,
2086  driver = 2,
2088  fill = 3
2089 };
2090 
2091 
2137 class surface_t : public resource_t
2138 {
2139 private:
2140  struct events_t : public resource_t::events_base_t
2141  {
2142  std::function<void()> destroy;
2143  std::function<void(buffer_t, int32_t, int32_t)> attach;
2144  std::function<void(int32_t, int32_t, int32_t, int32_t)> damage;
2145  std::function<void(callback_t)> frame;
2146  std::function<void(region_t)> set_opaque_region;
2147  std::function<void(region_t)> set_input_region;
2148  std::function<void()> commit;
2149  std::function<void(output_transform)> set_buffer_transform;
2150  std::function<void(int32_t)> set_buffer_scale;
2151  std::function<void(int32_t, int32_t, int32_t, int32_t)> damage_buffer;
2152  std::function<void(int32_t, int32_t)> offset;
2153  };
2154 
2155  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2156 
2157 protected:
2158  static constexpr const wl_interface *interface = &wayland::server::detail::surface_interface;
2159  static constexpr const unsigned int max_version = 5;
2160 
2161  friend class global_t<surface_t>;
2162  friend class global_base_t;
2163 
2164 public:
2165  surface_t() = default;
2166  surface_t(const client_t& client, uint32_t id, int version = 5);
2167  surface_t(const resource_t &resource);
2168 
2169  static const std::string interface_name;
2170 
2171  operator wl_surface*() const;
2172 
2178  std::function<void()> &on_destroy();
2179 
2243  std::function<void(buffer_t, int32_t, int32_t)> &on_attach();
2244 
2274  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_damage();
2275 
2313  std::function<void(callback_t)> &on_frame();
2314 
2344  std::function<void(region_t)> &on_set_opaque_region();
2345 
2373  std::function<void(region_t)> &on_set_input_region();
2374 
2396  std::function<void()> &on_commit();
2397 
2432  std::function<void(output_transform)> &on_set_buffer_transform();
2433 
2462  std::function<void(int32_t)> &on_set_buffer_scale();
2463 
2504  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_damage_buffer();
2505 
2524  std::function<void(int32_t, int32_t)> &on_offset();
2525 
2536  void enter(output_t const& output, bool post = true);
2537 
2540  static constexpr std::uint32_t enter_since_version = 1;
2541 
2556  void leave(output_t const& output, bool post = true);
2557 
2560  static constexpr std::uint32_t leave_since_version = 1;
2561 
2564  void post_invalid_scale(std::string const& msg);
2565 
2568  void post_invalid_transform(std::string const& msg);
2569 
2572  void post_invalid_size(std::string const& msg);
2573 
2576  void post_invalid_offset(std::string const& msg);
2577 
2578 };
2579 
2581 
2587 enum class surface_error : uint32_t
2588  {
2590  invalid_scale = 0,
2592  invalid_transform = 1,
2594  invalid_size = 2,
2596  invalid_offset = 3
2597 };
2598 
2599 
2608 class seat_t : public resource_t
2609 {
2610 private:
2611  struct events_t : public resource_t::events_base_t
2612  {
2613  std::function<void(pointer_t)> get_pointer;
2614  std::function<void(keyboard_t)> get_keyboard;
2615  std::function<void(touch_t)> get_touch;
2616  std::function<void()> release;
2617  };
2618 
2619  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2620 
2621 protected:
2622  static constexpr const wl_interface *interface = &wayland::server::detail::seat_interface;
2623  static constexpr const unsigned int max_version = 8;
2624 
2625  friend class global_t<seat_t>;
2626  friend class global_base_t;
2627 
2628 public:
2629  seat_t() = default;
2630  seat_t(const client_t& client, uint32_t id, int version = 8);
2631  seat_t(const resource_t &resource);
2632 
2633  static const std::string interface_name;
2634 
2635  operator wl_seat*() const;
2636 
2650  std::function<void(pointer_t)> &on_get_pointer();
2651 
2665  std::function<void(keyboard_t)> &on_get_keyboard();
2666 
2680  std::function<void(touch_t)> &on_get_touch();
2681 
2688  std::function<void()> &on_release();
2689 
2719  void capabilities(seat_capability const& capabilities, bool post = true);
2720 
2723  static constexpr std::uint32_t capabilities_since_version = 1;
2724 
2746  void name(std::string const& name, bool post = true);
2747 
2750  static constexpr std::uint32_t name_since_version = 2;
2751 
2755  bool can_name() const;
2756 
2759  void post_missing_capability(std::string const& msg);
2760 
2761 };
2762 
2764 
2771 struct seat_capability : public wayland::detail::bitfield<3, 12>
2772 {
2773  seat_capability(const wayland::detail::bitfield<3, 12> &b)
2774  : wayland::detail::bitfield<3, 12>(b) {}
2775  seat_capability(const uint32_t value)
2776  : wayland::detail::bitfield<3, 12>(value) {}
2778  static const wayland::detail::bitfield<3, 12> pointer;
2780  static const wayland::detail::bitfield<3, 12> keyboard;
2782  static const wayland::detail::bitfield<3, 12> touch;
2783 };
2784 
2790 enum class seat_error : uint32_t
2791  {
2793  missing_capability = 0
2794 };
2795 
2796 
2809 class pointer_t : public resource_t
2810 {
2811 private:
2812  struct events_t : public resource_t::events_base_t
2813  {
2814  std::function<void(uint32_t, surface_t, int32_t, int32_t)> set_cursor;
2815  std::function<void()> release;
2816  };
2817 
2818  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2819 
2820 protected:
2821  static constexpr const wl_interface *interface = &wayland::server::detail::pointer_interface;
2822  static constexpr const unsigned int max_version = 8;
2823 
2824  friend class global_t<pointer_t>;
2825  friend class global_base_t;
2826 
2827 public:
2828  pointer_t() = default;
2829  pointer_t(const client_t& client, uint32_t id, int version = 8);
2830  pointer_t(const resource_t &resource);
2831 
2832  static const std::string interface_name;
2833 
2834  operator wl_pointer*() const;
2835 
2879  std::function<void(uint32_t, surface_t, int32_t, int32_t)> &on_set_cursor();
2880 
2890  std::function<void()> &on_release();
2891 
2906  void enter(uint32_t serial, surface_t const& surface, double surface_x, double surface_y, bool post = true);
2907 
2910  static constexpr std::uint32_t enter_since_version = 1;
2911 
2923  void leave(uint32_t serial, surface_t const& surface, bool post = true);
2924 
2927  static constexpr std::uint32_t leave_since_version = 1;
2928 
2939  void motion(uint32_t time, double surface_x, double surface_y, bool post = true);
2940 
2943  static constexpr std::uint32_t motion_since_version = 1;
2944 
2967  void button(uint32_t serial, uint32_t time, uint32_t button, pointer_button_state const& state, bool post = true);
2968 
2971  static constexpr std::uint32_t button_since_version = 1;
2972 
2996  void axis(uint32_t time, pointer_axis const& axis, double value, bool post = true);
2997 
3000  static constexpr std::uint32_t axis_since_version = 1;
3001 
3040  void frame(bool post = true);
3041 
3044  static constexpr std::uint32_t frame_since_version = 5;
3045 
3049  bool can_frame() const;
3050 
3081  void axis_source(pointer_axis_source const& axis_source, bool post = true);
3082 
3085  static constexpr std::uint32_t axis_source_since_version = 5;
3086 
3090  bool can_axis_source() const;
3091 
3112  void axis_stop(uint32_t time, pointer_axis const& axis, bool post = true);
3113 
3116  static constexpr std::uint32_t axis_stop_since_version = 5;
3117 
3121  bool can_axis_stop() const;
3122 
3158  void axis_discrete(pointer_axis const& axis, int32_t discrete, bool post = true);
3159 
3162  static constexpr std::uint32_t axis_discrete_since_version = 5;
3163 
3167  bool can_axis_discrete() const;
3168 
3196  void axis_value120(pointer_axis const& axis, int32_t value120, bool post = true);
3197 
3200  static constexpr std::uint32_t axis_value120_since_version = 8;
3201 
3205  bool can_axis_value120() const;
3206 
3209  void post_role(std::string const& msg);
3210 
3211 };
3212 
3214 
3218 enum class pointer_error : uint32_t
3219  {
3221  role = 0
3222 };
3223 
3230 enum class pointer_button_state : uint32_t
3231  {
3233  released = 0,
3235  pressed = 1
3236 };
3237 
3243 enum class pointer_axis : uint32_t
3244  {
3246  vertical_scroll = 0,
3248  horizontal_scroll = 1
3249 };
3250 
3271 enum class pointer_axis_source : uint32_t
3272  {
3274  wheel = 0,
3276  finger = 1,
3278  continuous = 2,
3280  wheel_tilt = 3
3281 };
3282 
3283 
3290 class keyboard_t : public resource_t
3291 {
3292 private:
3293  struct events_t : public resource_t::events_base_t
3294  {
3295  std::function<void()> release;
3296  };
3297 
3298  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3299 
3300 protected:
3301  static constexpr const wl_interface *interface = &wayland::server::detail::keyboard_interface;
3302  static constexpr const unsigned int max_version = 8;
3303 
3304  friend class global_t<keyboard_t>;
3305  friend class global_base_t;
3306 
3307 public:
3308  keyboard_t() = default;
3309  keyboard_t(const client_t& client, uint32_t id, int version = 8);
3310  keyboard_t(const resource_t &resource);
3311 
3312  static const std::string interface_name;
3313 
3314  operator wl_keyboard*() const;
3315 
3319  std::function<void()> &on_release();
3320 
3334  void keymap(keyboard_keymap_format const& format, int fd, uint32_t size, bool post = true);
3335 
3338  static constexpr std::uint32_t keymap_since_version = 1;
3339 
3352  void enter(uint32_t serial, surface_t const& surface, array_t const& keys, bool post = true);
3353 
3356  static constexpr std::uint32_t enter_since_version = 1;
3357 
3372  void leave(uint32_t serial, surface_t const& surface, bool post = true);
3373 
3376  static constexpr std::uint32_t leave_since_version = 1;
3377 
3395  void key(uint32_t serial, uint32_t time, uint32_t key, keyboard_key_state const& state, bool post = true);
3396 
3399  static constexpr std::uint32_t key_since_version = 1;
3400 
3412  void modifiers(uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group, bool post = true);
3413 
3416  static constexpr std::uint32_t modifiers_since_version = 1;
3417 
3436  void repeat_info(int32_t rate, int32_t delay, bool post = true);
3437 
3440  static constexpr std::uint32_t repeat_info_since_version = 4;
3441 
3445  bool can_repeat_info() const;
3446 
3447 };
3448 
3450 
3457 enum class keyboard_keymap_format : uint32_t
3458  {
3460  no_keymap = 0,
3462  xkb_v1 = 1
3463 };
3464 
3470 enum class keyboard_key_state : uint32_t
3471  {
3473  released = 0,
3475  pressed = 1
3476 };
3477 
3478 
3491 class touch_t : public resource_t
3492 {
3493 private:
3494  struct events_t : public resource_t::events_base_t
3495  {
3496  std::function<void()> release;
3497  };
3498 
3499  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3500 
3501 protected:
3502  static constexpr const wl_interface *interface = &wayland::server::detail::touch_interface;
3503  static constexpr const unsigned int max_version = 8;
3504 
3505  friend class global_t<touch_t>;
3506  friend class global_base_t;
3507 
3508 public:
3509  touch_t() = default;
3510  touch_t(const client_t& client, uint32_t id, int version = 8);
3511  touch_t(const resource_t &resource);
3512 
3513  static const std::string interface_name;
3514 
3515  operator wl_touch*() const;
3516 
3520  std::function<void()> &on_release();
3521 
3536  void down(uint32_t serial, uint32_t time, surface_t const& surface, int32_t id, double x, double y, bool post = true);
3537 
3540  static constexpr std::uint32_t down_since_version = 1;
3541 
3552  void up(uint32_t serial, uint32_t time, int32_t id, bool post = true);
3553 
3556  static constexpr std::uint32_t up_since_version = 1;
3557 
3567  void motion(uint32_t time, int32_t id, double x, double y, bool post = true);
3568 
3571  static constexpr std::uint32_t motion_since_version = 1;
3572 
3585  void frame(bool post = true);
3586 
3589  static constexpr std::uint32_t frame_since_version = 1;
3590 
3601  void cancel(bool post = true);
3602 
3605  static constexpr std::uint32_t cancel_since_version = 1;
3606 
3639  void shape(int32_t id, double major, double minor, bool post = true);
3640 
3643  static constexpr std::uint32_t shape_since_version = 6;
3644 
3648  bool can_shape() const;
3649 
3679  void orientation(int32_t id, double orientation, bool post = true);
3680 
3683  static constexpr std::uint32_t orientation_since_version = 6;
3684 
3688  bool can_orientation() const;
3689 
3690 };
3691 
3693 
3694 
3705 class output_t : public resource_t
3706 {
3707 private:
3708  struct events_t : public resource_t::events_base_t
3709  {
3710  std::function<void()> release;
3711  };
3712 
3713  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3714 
3715 protected:
3716  static constexpr const wl_interface *interface = &wayland::server::detail::output_interface;
3717  static constexpr const unsigned int max_version = 4;
3718 
3719  friend class global_t<output_t>;
3720  friend class global_base_t;
3721 
3722 public:
3723  output_t() = default;
3724  output_t(const client_t& client, uint32_t id, int version = 4);
3725  output_t(const resource_t &resource);
3726 
3727  static const std::string interface_name;
3728 
3729  operator wl_output*() const;
3730 
3737  std::function<void()> &on_release();
3738 
3767  void geometry(int32_t x, int32_t y, int32_t physical_width, int32_t physical_height, output_subpixel const& subpixel, std::string const& make, std::string const& model, output_transform const& transform, bool post = true);
3768 
3771  static constexpr std::uint32_t geometry_since_version = 1;
3772 
3814  void mode(output_mode const& flags, int32_t width, int32_t height, int32_t refresh, bool post = true);
3815 
3818  static constexpr std::uint32_t mode_since_version = 1;
3819 
3829  void done(bool post = true);
3830 
3833  static constexpr std::uint32_t done_since_version = 2;
3834 
3838  bool can_done() const;
3839 
3865  void scale(int32_t factor, bool post = true);
3866 
3869  static constexpr std::uint32_t scale_since_version = 2;
3870 
3874  bool can_scale() const;
3875 
3909  void name(std::string const& name, bool post = true);
3910 
3913  static constexpr std::uint32_t name_since_version = 4;
3914 
3918  bool can_name() const;
3919 
3939  void description(std::string const& description, bool post = true);
3940 
3943  static constexpr std::uint32_t description_since_version = 4;
3944 
3948  bool can_description() const;
3949 
3950 };
3951 
3953 
3960 enum class output_subpixel : uint32_t
3961  {
3963  unknown = 0,
3965  none = 1,
3967  horizontal_rgb = 2,
3969  horizontal_bgr = 3,
3971  vertical_rgb = 4,
3973  vertical_bgr = 5
3974 };
3975 
3991 struct output_transform : public wayland::detail::bitfield<3, 21>
3992 {
3993  output_transform(const wayland::detail::bitfield<3, 21> &b)
3994  : wayland::detail::bitfield<3, 21>(b) {}
3995  output_transform(const uint32_t value)
3996  : wayland::detail::bitfield<3, 21>(value) {}
3998  static const wayland::detail::bitfield<3, 21> normal;
4000  static const wayland::detail::bitfield<3, 21> _90;
4002  static const wayland::detail::bitfield<3, 21> _180;
4004  static const wayland::detail::bitfield<3, 21> _270;
4006  static const wayland::detail::bitfield<3, 21> flipped;
4008  static const wayland::detail::bitfield<3, 21> flipped_90;
4010  static const wayland::detail::bitfield<3, 21> flipped_180;
4012  static const wayland::detail::bitfield<3, 21> flipped_270;
4013 };
4014 
4021 struct output_mode : public wayland::detail::bitfield<2, 22>
4022 {
4023  output_mode(const wayland::detail::bitfield<2, 22> &b)
4024  : wayland::detail::bitfield<2, 22>(b) {}
4025  output_mode(const uint32_t value)
4026  : wayland::detail::bitfield<2, 22>(value) {}
4028  static const wayland::detail::bitfield<2, 22> current;
4030  static const wayland::detail::bitfield<2, 22> preferred;
4031 };
4032 
4033 
4042 class region_t : public resource_t
4043 {
4044 private:
4045  struct events_t : public resource_t::events_base_t
4046  {
4047  std::function<void()> destroy;
4048  std::function<void(int32_t, int32_t, int32_t, int32_t)> add;
4049  std::function<void(int32_t, int32_t, int32_t, int32_t)> subtract;
4050  };
4051 
4052  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4053 
4054 protected:
4055  static constexpr const wl_interface *interface = &wayland::server::detail::region_interface;
4056  static constexpr const unsigned int max_version = 1;
4057 
4058  friend class global_t<region_t>;
4059  friend class global_base_t;
4060 
4061 public:
4062  region_t() = default;
4063  region_t(const client_t& client, uint32_t id, int version = 1);
4064  region_t(const resource_t &resource);
4065 
4066  static const std::string interface_name;
4067 
4068  operator wl_region*() const;
4069 
4075  std::function<void()> &on_destroy();
4076 
4086  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_add();
4087 
4097  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_subtract();
4098 
4099 };
4100 
4102 
4103 
4127 class subcompositor_t : public resource_t
4128 {
4129 private:
4130  struct events_t : public resource_t::events_base_t
4131  {
4132  std::function<void()> destroy;
4133  std::function<void(subsurface_t, surface_t, surface_t)> get_subsurface;
4134  };
4135 
4136  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4137 
4138 protected:
4139  static constexpr const wl_interface *interface = &wayland::server::detail::subcompositor_interface;
4140  static constexpr const unsigned int max_version = 1;
4141 
4142  friend class global_t<subcompositor_t>;
4143  friend class global_base_t;
4144 
4145 public:
4146  subcompositor_t() = default;
4147  subcompositor_t(const client_t& client, uint32_t id, int version = 1);
4148  subcompositor_t(const resource_t &resource);
4149 
4150  static const std::string interface_name;
4151 
4152  operator wl_subcompositor*() const;
4153 
4161  std::function<void()> &on_destroy();
4162 
4185  std::function<void(subsurface_t, surface_t, surface_t)> &on_get_subsurface();
4186 
4189  void post_bad_surface(std::string const& msg);
4190 
4191 };
4192 
4194 
4198 enum class subcompositor_error : uint32_t
4199  {
4201  bad_surface = 0
4202 };
4203 
4204 
4258 class subsurface_t : public resource_t
4259 {
4260 private:
4261  struct events_t : public resource_t::events_base_t
4262  {
4263  std::function<void()> destroy;
4264  std::function<void(int32_t, int32_t)> set_position;
4265  std::function<void(surface_t)> place_above;
4266  std::function<void(surface_t)> place_below;
4267  std::function<void()> set_sync;
4268  std::function<void()> set_desync;
4269  };
4270 
4271  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4272 
4273 protected:
4274  static constexpr const wl_interface *interface = &wayland::server::detail::subsurface_interface;
4275  static constexpr const unsigned int max_version = 1;
4276 
4277  friend class global_t<subsurface_t>;
4278  friend class global_base_t;
4279 
4280 public:
4281  subsurface_t() = default;
4282  subsurface_t(const client_t& client, uint32_t id, int version = 1);
4283  subsurface_t(const resource_t &resource);
4284 
4285  static const std::string interface_name;
4286 
4287  operator wl_subsurface*() const;
4288 
4298  std::function<void()> &on_destroy();
4299 
4322  std::function<void(int32_t, int32_t)> &on_set_position();
4323 
4344  std::function<void(surface_t)> &on_place_above();
4345 
4353  std::function<void(surface_t)> &on_place_below();
4354 
4372  std::function<void()> &on_set_sync();
4373 
4397  std::function<void()> &on_set_desync();
4398 
4401  void post_bad_surface(std::string const& msg);
4402 
4403 };
4404 
4406 
4410 enum class subsurface_error : uint32_t
4411  {
4413  bad_surface = 0
4414 };
4415 
4416 
4417 
4418 }
4419 }
static constexpr std::uint32_t release_since_version
Minimum protocol version required for the release function.
void release(bool post=true)
compositor releases buffer
std::function< void()> & on_destroy()
destroy a buffer
static constexpr std::uint32_t done_since_version
Minimum protocol version required for the done function.
void done(uint32_t callback_data, bool post=true)
done event
std::function< void(surface_t)> & on_create_surface()
create new surface
std::function< void(region_t)> & on_create_region()
create new region
std::function< void(data_device_t, seat_t)> & on_get_data_device()
create a new data device
std::function< void(data_source_t)> & on_create_data_source()
create a new data source
static constexpr std::uint32_t enter_since_version
Minimum protocol version required for the enter function.
void post_role(std::string const &msg)
Post error: given wl_surface has another role.
std::function< void(data_source_t, uint32_t)> & on_set_selection()
copy data to the selection
static constexpr std::uint32_t drop_since_version
Minimum protocol version required for the drop function.
static constexpr std::uint32_t selection_since_version
Minimum protocol version required for the selection function.
std::function< void()> & on_release()
destroy data device
static constexpr std::uint32_t motion_since_version
Minimum protocol version required for the motion function.
void enter(uint32_t serial, surface_t const &surface, double x, double y, data_offer_t const &id, bool post=true)
initiate drag-and-drop session
static constexpr std::uint32_t leave_since_version
Minimum protocol version required for the leave function.
void leave(bool post=true)
end drag-and-drop session
void data_offer(bool post=true)
introduce a new wl_data_offer
void motion(uint32_t time, double x, double y, bool post=true)
drag-and-drop session motion
static constexpr std::uint32_t data_offer_since_version
Minimum protocol version required for the data_offer function.
std::function< void(data_source_t, surface_t, surface_t, uint32_t)> & on_start_drag()
start drag-and-drop operation
void drop(bool post=true)
end drag-and-drop session successfully
void selection(data_offer_t const &id, bool post=true)
advertise new selection
void offer(std::string const &mime_type, bool post=true)
advertise offered mime type
std::function< void()> & on_destroy()
destroy data offer
std::function< void(std::string, int)> & on_receive()
request that the data is transferred
std::function< void(data_device_manager_dnd_action, data_device_manager_dnd_action)> & on_set_actions()
set the available/preferred drag-and-drop actions
void source_actions(data_device_manager_dnd_action const &source_actions, bool post=true)
notify the source-side available actions
std::function< void(uint32_t, std::string)> & on_accept()
accept one of the offered mime types
void post_invalid_finish(std::string const &msg)
Post error: finish request was called untimely.
bool can_source_actions() const
Check whether the source_actions function is available with the currently bound version of the protoc...
bool can_action() const
Check whether the action function is available with the currently bound version of the protocol.
std::function< void()> & on_finish()
the offer will no longer be used
static constexpr std::uint32_t offer_since_version
Minimum protocol version required for the offer function.
static constexpr std::uint32_t source_actions_since_version
Minimum protocol version required for the source_actions function.
void post_invalid_action(std::string const &msg)
Post error: action argument has an invalid value.
static constexpr std::uint32_t action_since_version
Minimum protocol version required for the action function.
void post_invalid_offer(std::string const &msg)
Post error: offer doesn't accept this request.
void post_invalid_action_mask(std::string const &msg)
Post error: action mask contains invalid values.
void action(data_device_manager_dnd_action const &dnd_action, bool post=true)
notify the selected action
void cancelled(bool post=true)
selection was cancelled
static constexpr std::uint32_t send_since_version
Minimum protocol version required for the send function.
static constexpr std::uint32_t dnd_drop_performed_since_version
Minimum protocol version required for the dnd_drop_performed function.
void dnd_drop_performed(bool post=true)
the drag-and-drop operation physically finished
void post_invalid_action_mask(std::string const &msg)
Post error: action mask contains invalid values.
static constexpr std::uint32_t dnd_finished_since_version
Minimum protocol version required for the dnd_finished function.
bool can_dnd_drop_performed() const
Check whether the dnd_drop_performed function is available with the currently bound version of the pr...
bool can_action() const
Check whether the action function is available with the currently bound version of the protocol.
std::function< void(data_device_manager_dnd_action)> & on_set_actions()
set the available drag-and-drop actions
std::function< void(std::string)> & on_offer()
add an offered mime type
std::function< void()> & on_destroy()
destroy the data source
static constexpr std::uint32_t action_since_version
Minimum protocol version required for the action function.
void send(std::string const &mime_type, int fd, bool post=true)
send the data
bool can_dnd_finished() const
Check whether the dnd_finished function is available with the currently bound version of the protocol...
void action(data_device_manager_dnd_action const &dnd_action, bool post=true)
notify the selected action
void target(std::string const &mime_type, bool post=true)
a target accepts an offered mime type
static constexpr std::uint32_t cancelled_since_version
Minimum protocol version required for the cancelled function.
void dnd_finished(bool post=true)
the drag-and-drop operation concluded
static constexpr std::uint32_t target_since_version
Minimum protocol version required for the target function.
void post_invalid_source(std::string const &msg)
Post error: source doesn't accept this request.
void enter(uint32_t serial, surface_t const &surface, array_t const &keys, bool post=true)
enter event
static constexpr std::uint32_t enter_since_version
Minimum protocol version required for the enter function.
static constexpr std::uint32_t key_since_version
Minimum protocol version required for the key function.
void modifiers(uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group, bool post=true)
modifier and group state
void keymap(keyboard_keymap_format const &format, int fd, uint32_t size, bool post=true)
keyboard mapping
void repeat_info(int32_t rate, int32_t delay, bool post=true)
repeat rate and delay
void leave(uint32_t serial, surface_t const &surface, bool post=true)
leave event
void key(uint32_t serial, uint32_t time, uint32_t key, keyboard_key_state const &state, bool post=true)
key event
static constexpr std::uint32_t leave_since_version
Minimum protocol version required for the leave function.
static constexpr std::uint32_t repeat_info_since_version
Minimum protocol version required for the repeat_info function.
std::function< void()> & on_release()
release the keyboard object
bool can_repeat_info() const
Check whether the repeat_info function is available with the currently bound version of the protocol.
static constexpr std::uint32_t keymap_since_version
Minimum protocol version required for the keymap function.
static constexpr std::uint32_t modifiers_since_version
Minimum protocol version required for the modifiers function.
static constexpr std::uint32_t done_since_version
Minimum protocol version required for the done function.
std::function< void()> & on_release()
release the output object
bool can_name() const
Check whether the name function is available with the currently bound version of the protocol.
void name(std::string const &name, bool post=true)
name of this output
void mode(output_mode const &flags, int32_t width, int32_t height, int32_t refresh, bool post=true)
advertise available modes for the output
void done(bool post=true)
sent all information about output
void geometry(int32_t x, int32_t y, int32_t physical_width, int32_t physical_height, output_subpixel const &subpixel, std::string const &make, std::string const &model, output_transform const &transform, bool post=true)
properties of the output
static constexpr std::uint32_t name_since_version
Minimum protocol version required for the name function.
void scale(int32_t factor, bool post=true)
output scaling properties
bool can_scale() const
Check whether the scale function is available with the currently bound version of the protocol.
bool can_done() const
Check whether the done function is available with the currently bound version of the protocol.
void description(std::string const &description, bool post=true)
human-readable description of this output
bool can_description() const
Check whether the description function is available with the currently bound version of the protocol.
static constexpr std::uint32_t scale_since_version
Minimum protocol version required for the scale function.
static constexpr std::uint32_t mode_since_version
Minimum protocol version required for the mode function.
static constexpr std::uint32_t geometry_since_version
Minimum protocol version required for the geometry function.
static constexpr std::uint32_t description_since_version
Minimum protocol version required for the description function.
static constexpr std::uint32_t button_since_version
Minimum protocol version required for the button function.
void motion(uint32_t time, double surface_x, double surface_y, bool post=true)
pointer motion event
void axis(uint32_t time, pointer_axis const &axis, double value, bool post=true)
axis event
void axis_stop(uint32_t time, pointer_axis const &axis, bool post=true)
axis stop event
std::function< void(uint32_t, surface_t, int32_t, int32_t)> & on_set_cursor()
set the pointer surface
void frame(bool post=true)
end of a pointer event sequence
static constexpr std::uint32_t axis_source_since_version
Minimum protocol version required for the axis_source function.
void post_role(std::string const &msg)
Post error: given wl_surface has another role.
void leave(uint32_t serial, surface_t const &surface, bool post=true)
leave event
static constexpr std::uint32_t leave_since_version
Minimum protocol version required for the leave function.
bool can_axis_discrete() const
Check whether the axis_discrete function is available with the currently bound version of the protoco...
static constexpr std::uint32_t frame_since_version
Minimum protocol version required for the frame function.
bool can_axis_source() const
Check whether the axis_source function is available with the currently bound version of the protocol.
void axis_discrete(pointer_axis const &axis, int32_t discrete, bool post=true)
axis click event
static constexpr std::uint32_t axis_discrete_since_version
Minimum protocol version required for the axis_discrete function.
std::function< void()> & on_release()
release the pointer object
void axis_value120(pointer_axis const &axis, int32_t value120, bool post=true)
axis high-resolution scroll event
void button(uint32_t serial, uint32_t time, uint32_t button, pointer_button_state const &state, bool post=true)
pointer button event
void axis_source(pointer_axis_source const &axis_source, bool post=true)
axis source event
bool can_axis_value120() const
Check whether the axis_value120 function is available with the currently bound version of the protoco...
void enter(uint32_t serial, surface_t const &surface, double surface_x, double surface_y, bool post=true)
enter event
bool can_axis_stop() const
Check whether the axis_stop function is available with the currently bound version of the protocol.
bool can_frame() const
Check whether the frame function is available with the currently bound version of the protocol.
static constexpr std::uint32_t axis_stop_since_version
Minimum protocol version required for the axis_stop function.
static constexpr std::uint32_t axis_since_version
Minimum protocol version required for the axis function.
static constexpr std::uint32_t axis_value120_since_version
Minimum protocol version required for the axis_value120 function.
static constexpr std::uint32_t motion_since_version
Minimum protocol version required for the motion function.
static constexpr std::uint32_t enter_since_version
Minimum protocol version required for the enter function.
std::function< void()> & on_destroy()
destroy region
std::function< void(int32_t, int32_t, int32_t, int32_t)> & on_add()
add rectangle to region
std::function< void(int32_t, int32_t, int32_t, int32_t)> & on_subtract()
subtract rectangle from region
void global(uint32_t name, std::string const &interface, uint32_t version, bool post=true)
announce global object
static constexpr std::uint32_t global_since_version
Minimum protocol version required for the global function.
std::function< void(uint32_t, resource_t)> & on_bind()
bind an object to the display
void global_remove(uint32_t name, bool post=true)
announce removal of global object
static constexpr std::uint32_t global_remove_since_version
Minimum protocol version required for the global_remove function.
void name(std::string const &name, bool post=true)
unique identifier for this seat
std::function< void(pointer_t)> & on_get_pointer()
return pointer object
void post_missing_capability(std::string const &msg)
Post error: get_pointer, get_keyboard or get_touch called on seat without the matching capability.
static constexpr std::uint32_t capabilities_since_version
Minimum protocol version required for the capabilities function.
std::function< void(keyboard_t)> & on_get_keyboard()
return keyboard object
std::function< void(touch_t)> & on_get_touch()
return touch object
std::function< void()> & on_release()
release the seat object
void capabilities(seat_capability const &capabilities, bool post=true)
seat capabilities changed
bool can_name() const
Check whether the name function is available with the currently bound version of the protocol.
static constexpr std::uint32_t name_since_version
Minimum protocol version required for the name function.
desktop-style metadata interface
std::function< void(seat_t, uint32_t)> & on_move()
start an interactive move
static constexpr std::uint32_t configure_since_version
Minimum protocol version required for the configure function.
std::function< void(std::string)> & on_set_class()
set surface class
std::function< void(seat_t, uint32_t, shell_surface_resize)> & on_resize()
start an interactive resize
std::function< void(std::string)> & on_set_title()
set surface title
std::function< void(surface_t, int32_t, int32_t, shell_surface_transient)> & on_set_transient()
make the surface a transient surface
std::function< void(output_t)> & on_set_maximized()
make the surface a maximized surface
static constexpr std::uint32_t ping_since_version
Minimum protocol version required for the ping function.
void ping(uint32_t serial, bool post=true)
ping client
std::function< void(shell_surface_fullscreen_method, uint32_t, output_t)> & on_set_fullscreen()
make the surface a fullscreen surface
std::function< void()> & on_set_toplevel()
make the surface a toplevel surface
std::function< void(uint32_t)> & on_pong()
respond to a ping event
void popup_done(bool post=true)
popup interaction is done
void configure(shell_surface_resize const &edges, int32_t width, int32_t height, bool post=true)
suggest resize
std::function< void(seat_t, uint32_t, surface_t, int32_t, int32_t, shell_surface_transient)> & on_set_popup()
make the surface a popup surface
static constexpr std::uint32_t popup_done_since_version
Minimum protocol version required for the popup_done function.
create desktop-style surfaces
std::function< void(shell_surface_t, surface_t)> & on_get_shell_surface()
create a shell surface from a surface
void post_role(std::string const &msg)
Post error: given wl_surface has another role.
std::function< void()> & on_destroy()
destroy the pool
std::function< void(int32_t)> & on_resize()
change the size of the pool mapping
std::function< void(buffer_t, int32_t, int32_t, int32_t, int32_t, shm_format)> & on_create_buffer()
create a buffer from the pool
static constexpr std::uint32_t format_since_version
Minimum protocol version required for the format function.
void post_invalid_format(std::string const &msg)
Post error: buffer format is not known.
std::function< void(shm_pool_t, int, int32_t)> & on_create_pool()
create a shm pool
void post_invalid_fd(std::string const &msg)
Post error: mmapping the file descriptor failed.
void format(shm_format const &format, bool post=true)
pixel format description
void post_invalid_stride(std::string const &msg)
Post error: invalid size or stride during pool or buffer creation.
std::function< void(subsurface_t, surface_t, surface_t)> & on_get_subsurface()
give a surface the role sub-surface
std::function< void()> & on_destroy()
unbind from the subcompositor interface
void post_bad_surface(std::string const &msg)
Post error: the to-be sub-surface is invalid.
sub-surface interface to a wl_surface
std::function< void()> & on_set_sync()
set sub-surface to synchronized mode
std::function< void()> & on_set_desync()
set sub-surface to desynchronized mode
std::function< void(int32_t, int32_t)> & on_set_position()
reposition the sub-surface
std::function< void(surface_t)> & on_place_below()
restack the sub-surface
std::function< void(surface_t)> & on_place_above()
restack the sub-surface
void post_bad_surface(std::string const &msg)
Post error: wl_surface is not a sibling or the parent.
std::function< void()> & on_destroy()
remove sub-surface interface
void enter(output_t const &output, bool post=true)
surface enters an output
std::function< void(buffer_t, int32_t, int32_t)> & on_attach()
set the surface contents
static constexpr std::uint32_t enter_since_version
Minimum protocol version required for the enter function.
void post_invalid_offset(std::string const &msg)
Post error: buffer offset is invalid.
static constexpr std::uint32_t leave_since_version
Minimum protocol version required for the leave function.
std::function< void(region_t)> & on_set_input_region()
set input region
void post_invalid_scale(std::string const &msg)
Post error: buffer scale value is invalid.
std::function< void(int32_t, int32_t, int32_t, int32_t)> & on_damage()
mark part of the surface damaged
std::function< void(callback_t)> & on_frame()
request a frame throttling hint
std::function< void(int32_t, int32_t)> & on_offset()
set the surface contents offset
std::function< void(int32_t)> & on_set_buffer_scale()
sets the buffer scaling factor
void post_invalid_size(std::string const &msg)
Post error: buffer size is invalid.
std::function< void(region_t)> & on_set_opaque_region()
set opaque region
std::function< void()> & on_commit()
commit pending surface state
std::function< void(int32_t, int32_t, int32_t, int32_t)> & on_damage_buffer()
mark part of the surface damaged using buffer coordinates
void leave(output_t const &output, bool post=true)
surface leaves an output
std::function< void()> & on_destroy()
delete surface
void post_invalid_transform(std::string const &msg)
Post error: buffer transform value is invalid.
std::function< void(output_transform)> & on_set_buffer_transform()
sets the buffer transformation
void cancel(bool post=true)
touch session cancelled
void motion(uint32_t time, int32_t id, double x, double y, bool post=true)
update of touch point coordinates
void orientation(int32_t id, double orientation, bool post=true)
update orientation of touch point
void up(uint32_t serial, uint32_t time, int32_t id, bool post=true)
end of a touch event sequence
static constexpr std::uint32_t down_since_version
Minimum protocol version required for the down function.
void down(uint32_t serial, uint32_t time, surface_t const &surface, int32_t id, double x, double y, bool post=true)
touch down event and beginning of a touch sequence
static constexpr std::uint32_t frame_since_version
Minimum protocol version required for the frame function.
void shape(int32_t id, double major, double minor, bool post=true)
update shape of touch point
static constexpr std::uint32_t up_since_version
Minimum protocol version required for the up function.
static constexpr std::uint32_t cancel_since_version
Minimum protocol version required for the cancel function.
static constexpr std::uint32_t shape_since_version
Minimum protocol version required for the shape function.
bool can_shape() const
Check whether the shape function is available with the currently bound version of the protocol.
static constexpr std::uint32_t orientation_since_version
Minimum protocol version required for the orientation function.
void frame(bool post=true)
end of touch frame event
static constexpr std::uint32_t motion_since_version
Minimum protocol version required for the motion function.
bool can_orientation() const
Check whether the orientation function is available with the currently bound version of the protocol.
std::function< void()> & on_release()
release the touch object
static const wayland::detail::bitfield< 3, 6 > copy
copy action
static const wayland::detail::bitfield< 3, 6 > move
move action
static const wayland::detail::bitfield< 3, 6 > ask
ask action
static const wayland::detail::bitfield< 3, 6 > none
no action
static const wayland::detail::bitfield< 2, 22 > current
indicates this is the current mode
static const wayland::detail::bitfield< 2, 22 > preferred
indicates this is the preferred mode
transform from framebuffer to output
static const wayland::detail::bitfield< 3, 21 > normal
no transform
static const wayland::detail::bitfield< 3, 21 > flipped_180
flip and rotate 180 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 21 > flipped
180 degree flip around a vertical axis
static const wayland::detail::bitfield< 3, 21 > _270
270 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 21 > _180
180 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 21 > flipped_90
flip and rotate 90 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 21 > flipped_270
flip and rotate 270 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 21 > _90
90 degrees counter-clockwise
static const wayland::detail::bitfield< 3, 12 > keyboard
the seat has one or more keyboards
static const wayland::detail::bitfield< 3, 12 > touch
the seat has touch devices
static const wayland::detail::bitfield< 3, 12 > pointer
the seat has pointer devices
static const wayland::detail::bitfield< 4, 8 > bottom_left
bottom and left edges
static const wayland::detail::bitfield< 4, 8 > top_right
top and right edges
static const wayland::detail::bitfield< 4, 8 > bottom_right
bottom and right edges
static const wayland::detail::bitfield< 4, 8 > bottom
bottom edge
static const wayland::detail::bitfield< 4, 8 > right
right edge
static const wayland::detail::bitfield< 4, 8 > left
left edge
static const wayland::detail::bitfield< 4, 8 > none
no edge
static const wayland::detail::bitfield< 4, 8 > top
top edge
static const wayland::detail::bitfield< 4, 8 > top_left
top and left edges
static const wayland::detail::bitfield< 1, 9 > inactive
do not set keyboard focus