Wayland++  1.0.0
C++ Bindings for Wayland
wayland-server-protocol.hpp
1 #pragma once
2 
3 #include <array>
4 #include <cstdint>
5 #include <functional>
6 #include <memory>
7 #include <string>
8 #include <vector>
9 
10 #include <wayland-server.hpp>
11 
12 struct wl_registry;
13 struct wl_callback;
14 struct wl_compositor;
15 struct wl_shm_pool;
16 struct wl_shm;
17 struct wl_buffer;
18 struct wl_data_offer;
19 struct wl_data_source;
20 struct wl_data_device;
21 struct wl_data_device_manager;
22 struct wl_shell;
23 struct wl_shell_surface;
24 struct wl_surface;
25 struct wl_seat;
26 struct wl_pointer;
27 struct wl_keyboard;
28 struct wl_touch;
29 struct wl_output;
30 struct wl_region;
31 struct wl_subcompositor;
32 struct wl_subsurface;
33 
34 namespace wayland
35 {
36 namespace server
37 {
38 class registry_t;
39 class callback_t;
40 class compositor_t;
41 class shm_pool_t;
42 class shm_t;
43 enum class shm_error : uint32_t;
44 enum class shm_format : uint32_t;
45 class buffer_t;
46 class data_offer_t;
47 enum class data_offer_error : uint32_t;
48 class data_source_t;
49 enum class data_source_error : uint32_t;
50 class data_device_t;
51 enum class data_device_error : uint32_t;
52 class data_device_manager_t;
53 struct data_device_manager_dnd_action;
54 class shell_t;
55 enum class shell_error : uint32_t;
56 class shell_surface_t;
57 struct shell_surface_resize;
58 struct shell_surface_transient;
59 enum class shell_surface_fullscreen_method : uint32_t;
60 class surface_t;
61 enum class surface_error : uint32_t;
62 class seat_t;
63 struct seat_capability;
64 enum class seat_error : uint32_t;
65 class pointer_t;
66 enum class pointer_error : uint32_t;
67 enum class pointer_button_state : uint32_t;
68 enum class pointer_axis : uint32_t;
69 enum class pointer_axis_source : uint32_t;
70 class keyboard_t;
71 enum class keyboard_keymap_format : uint32_t;
72 enum class keyboard_key_state : uint32_t;
73 class touch_t;
74 class output_t;
75 enum class output_subpixel : uint32_t;
76 struct output_transform;
77 struct output_mode;
78 class region_t;
79 class subcompositor_t;
80 enum class subcompositor_error : uint32_t;
81 class subsurface_t;
82 enum class subsurface_error : uint32_t;
83 
84 namespace detail
85 {
86  extern const wl_interface display_interface;
87  extern const wl_interface registry_interface;
88  extern const wl_interface callback_interface;
89  extern const wl_interface compositor_interface;
90  extern const wl_interface shm_pool_interface;
91  extern const wl_interface shm_interface;
92  extern const wl_interface buffer_interface;
93  extern const wl_interface data_offer_interface;
94  extern const wl_interface data_source_interface;
95  extern const wl_interface data_device_interface;
96  extern const wl_interface data_device_manager_interface;
97  extern const wl_interface shell_interface;
98  extern const wl_interface shell_surface_interface;
99  extern const wl_interface surface_interface;
100  extern const wl_interface seat_interface;
101  extern const wl_interface pointer_interface;
102  extern const wl_interface keyboard_interface;
103  extern const wl_interface touch_interface;
104  extern const wl_interface output_interface;
105  extern const wl_interface region_interface;
106  extern const wl_interface subcompositor_interface;
107  extern const wl_interface subsurface_interface;
108 }
109 
134 class registry_t : public resource_t
135 {
136 private:
137  struct events_t : public resource_t::events_base_t
138  {
139  std::function<void(uint32_t, resource_t)> bind;
140  };
141 
142  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
143 
144 protected:
145  static constexpr const wl_interface *interface = &wayland::server::detail::registry_interface;
146  static constexpr const unsigned int max_version = 1;
147 
148  friend class global_t<registry_t>;
149  friend class global_base_t;
150 
151 public:
152  registry_t() = default;
153  registry_t(const client_t& client, uint32_t id, int version = 1);
154  registry_t(const resource_t &resource);
155 
156  static const std::string interface_name;
157 
158  operator wl_registry*() const;
159 
168  std::function<void(uint32_t, resource_t)> &on_bind();
169 
182  void global(uint32_t name, std::string const& interface, uint32_t version, bool post = true);
183 
186  static constexpr std::uint32_t global_since_version = 1;
187 
203  void global_remove(uint32_t name, bool post = true);
204 
207  static constexpr std::uint32_t global_remove_since_version = 1;
208 
209 };
210 
212 
213 
220 class callback_t : public resource_t
221 {
222 private:
223  struct events_t : public resource_t::events_base_t
224  {
225  };
226 
227  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
228 
229 protected:
230  static constexpr const wl_interface *interface = &wayland::server::detail::callback_interface;
231  static constexpr const unsigned int max_version = 1;
232 
233  friend class global_t<callback_t>;
234  friend class global_base_t;
235 
236 public:
237  callback_t() = default;
238  callback_t(const client_t& client, uint32_t id, int version = 1);
239  callback_t(const resource_t &resource);
240 
241  static const std::string interface_name;
242 
243  operator wl_callback*() const;
244 
251  void done(uint32_t callback_data, bool post = true);
252 
255  static constexpr std::uint32_t done_since_version = 1;
256 
257 };
258 
260 
261 
269 class compositor_t : public resource_t
270 {
271 private:
272  struct events_t : public resource_t::events_base_t
273  {
274  std::function<void(surface_t)> create_surface;
275  std::function<void(region_t)> create_region;
276  };
277 
278  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
279 
280 protected:
281  static constexpr const wl_interface *interface = &wayland::server::detail::compositor_interface;
282  static constexpr const unsigned int max_version = 5;
283 
284  friend class global_t<compositor_t>;
285  friend class global_base_t;
286 
287 public:
288  compositor_t() = default;
289  compositor_t(const client_t& client, uint32_t id, int version = 5);
290  compositor_t(const resource_t &resource);
291 
292  static const std::string interface_name;
293 
294  operator wl_compositor*() const;
295 
302  std::function<void(surface_t)> &on_create_surface();
303 
310  std::function<void(region_t)> &on_create_region();
311 
312 };
313 
315 
316 
328 class shm_pool_t : public resource_t
329 {
330 private:
331  struct events_t : public resource_t::events_base_t
332  {
333  std::function<void(buffer_t, int32_t, int32_t, int32_t, int32_t, shm_format)> create_buffer;
334  std::function<void()> destroy;
335  std::function<void(int32_t)> resize;
336  };
337 
338  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
339 
340 protected:
341  static constexpr const wl_interface *interface = &wayland::server::detail::shm_pool_interface;
342  static constexpr const unsigned int max_version = 1;
343 
344  friend class global_t<shm_pool_t>;
345  friend class global_base_t;
346 
347 public:
348  shm_pool_t() = default;
349  shm_pool_t(const client_t& client, uint32_t id, int version = 1);
350  shm_pool_t(const resource_t &resource);
351 
352  static const std::string interface_name;
353 
354  operator wl_shm_pool*() const;
355 
377  std::function<void(buffer_t, int32_t, int32_t, int32_t, int32_t, shm_format)> &on_create_buffer();
378 
388  std::function<void()> &on_destroy();
389 
405  std::function<void(int32_t)> &on_resize();
406 
407 };
408 
410 
411 
425 class shm_t : public resource_t
426 {
427 private:
428  struct events_t : public resource_t::events_base_t
429  {
430  std::function<void(shm_pool_t, int, int32_t)> create_pool;
431  };
432 
433  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
434 
435 protected:
436  static constexpr const wl_interface *interface = &wayland::server::detail::shm_interface;
437  static constexpr const unsigned int max_version = 1;
438 
439  friend class global_t<shm_t>;
440  friend class global_base_t;
441 
442 public:
443  shm_t() = default;
444  shm_t(const client_t& client, uint32_t id, int version = 1);
445  shm_t(const resource_t &resource);
446 
447  static const std::string interface_name;
448 
449  operator wl_shm*() const;
450 
463  std::function<void(shm_pool_t, int, int32_t)> &on_create_pool();
464 
473  void format(shm_format const& format, bool post = true);
474 
477  static constexpr std::uint32_t format_since_version = 1;
478 
481  void post_invalid_format(std::string const& msg);
482 
485  void post_invalid_stride(std::string const& msg);
486 
489  void post_invalid_fd(std::string const& msg);
490 
491 };
492 
494 
500 enum class shm_error : uint32_t
501  {
503  invalid_format = 0,
505  invalid_stride = 1,
507  invalid_fd = 2
508 };
509 
526 enum class shm_format : uint32_t
527  {
529  argb8888 = 0,
531  xrgb8888 = 1,
533  c8 = 0x20203843,
535  rgb332 = 0x38424752,
537  bgr233 = 0x38524742,
539  xrgb4444 = 0x32315258,
541  xbgr4444 = 0x32314258,
543  rgbx4444 = 0x32315852,
545  bgrx4444 = 0x32315842,
547  argb4444 = 0x32315241,
549  abgr4444 = 0x32314241,
551  rgba4444 = 0x32314152,
553  bgra4444 = 0x32314142,
555  xrgb1555 = 0x35315258,
557  xbgr1555 = 0x35314258,
559  rgbx5551 = 0x35315852,
561  bgrx5551 = 0x35315842,
563  argb1555 = 0x35315241,
565  abgr1555 = 0x35314241,
567  rgba5551 = 0x35314152,
569  bgra5551 = 0x35314142,
571  rgb565 = 0x36314752,
573  bgr565 = 0x36314742,
575  rgb888 = 0x34324752,
577  bgr888 = 0x34324742,
579  xbgr8888 = 0x34324258,
581  rgbx8888 = 0x34325852,
583  bgrx8888 = 0x34325842,
585  abgr8888 = 0x34324241,
587  rgba8888 = 0x34324152,
589  bgra8888 = 0x34324142,
591  xrgb2101010 = 0x30335258,
593  xbgr2101010 = 0x30334258,
595  rgbx1010102 = 0x30335852,
597  bgrx1010102 = 0x30335842,
599  argb2101010 = 0x30335241,
601  abgr2101010 = 0x30334241,
603  rgba1010102 = 0x30334152,
605  bgra1010102 = 0x30334142,
607  yuyv = 0x56595559,
609  yvyu = 0x55595659,
611  uyvy = 0x59565955,
613  vyuy = 0x59555956,
615  ayuv = 0x56555941,
617  nv12 = 0x3231564e,
619  nv21 = 0x3132564e,
621  nv16 = 0x3631564e,
623  nv61 = 0x3136564e,
625  yuv410 = 0x39565559,
627  yvu410 = 0x39555659,
629  yuv411 = 0x31315559,
631  yvu411 = 0x31315659,
633  yuv420 = 0x32315559,
635  yvu420 = 0x32315659,
637  yuv422 = 0x36315559,
639  yvu422 = 0x36315659,
641  yuv444 = 0x34325559,
643  yvu444 = 0x34325659,
645  r8 = 0x20203852,
647  r16 = 0x20363152,
649  rg88 = 0x38384752,
651  gr88 = 0x38385247,
653  rg1616 = 0x32334752,
655  gr1616 = 0x32335247,
657  xrgb16161616f = 0x48345258,
659  xbgr16161616f = 0x48344258,
661  argb16161616f = 0x48345241,
663  abgr16161616f = 0x48344241,
665  xyuv8888 = 0x56555958,
667  vuy888 = 0x34325556,
669  vuy101010 = 0x30335556,
671  y210 = 0x30313259,
673  y212 = 0x32313259,
675  y216 = 0x36313259,
677  y410 = 0x30313459,
679  y412 = 0x32313459,
681  y416 = 0x36313459,
683  xvyu2101010 = 0x30335658,
685  xvyu12_16161616 = 0x36335658,
687  xvyu16161616 = 0x38345658,
689  y0l0 = 0x304c3059,
691  x0l0 = 0x304c3058,
693  y0l2 = 0x324c3059,
695  x0l2 = 0x324c3058,
696  yuv420_8bit = 0x38305559,
697  yuv420_10bit = 0x30315559,
698  xrgb8888_a8 = 0x38415258,
699  xbgr8888_a8 = 0x38414258,
700  rgbx8888_a8 = 0x38415852,
701  bgrx8888_a8 = 0x38415842,
702  rgb888_a8 = 0x38413852,
703  bgr888_a8 = 0x38413842,
704  rgb565_a8 = 0x38413552,
705  bgr565_a8 = 0x38413542,
707  nv24 = 0x3432564e,
709  nv42 = 0x3234564e,
711  p210 = 0x30313250,
713  p010 = 0x30313050,
715  p012 = 0x32313050,
717  p016 = 0x36313050,
719  axbxgxrx106106106106 = 0x30314241,
721  nv15 = 0x3531564e,
722  q410 = 0x30313451,
723  q401 = 0x31303451,
725  xrgb16161616 = 0x38345258,
727  xbgr16161616 = 0x38344258,
729  argb16161616 = 0x38345241,
731  abgr16161616 = 0x38344241
732 };
733 
734 
749 class buffer_t : public resource_t
750 {
751 private:
752  struct events_t : public resource_t::events_base_t
753  {
754  std::function<void()> destroy;
755  };
756 
757  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
758 
759 protected:
760  static constexpr const wl_interface *interface = &wayland::server::detail::buffer_interface;
761  static constexpr const unsigned int max_version = 1;
762 
763  friend class global_t<buffer_t>;
764  friend class global_base_t;
765 
766 public:
767  buffer_t() = default;
768  buffer_t(const client_t& client, uint32_t id, int version = 1);
769  buffer_t(const resource_t &resource);
770 
771  static const std::string interface_name;
772 
773  operator wl_buffer*() const;
774 
783  std::function<void()> &on_destroy();
784 
801  void release(bool post = true);
802 
805  static constexpr std::uint32_t release_since_version = 1;
806 
807 };
808 
810 
811 
822 class data_offer_t : public resource_t
823 {
824 private:
825  struct events_t : public resource_t::events_base_t
826  {
827  std::function<void(uint32_t, std::string)> accept;
828  std::function<void(std::string, int)> receive;
829  std::function<void()> destroy;
830  std::function<void()> finish;
831  std::function<void(data_device_manager_dnd_action, data_device_manager_dnd_action)> set_actions;
832  };
833 
834  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
835 
836 protected:
837  static constexpr const wl_interface *interface = &wayland::server::detail::data_offer_interface;
838  static constexpr const unsigned int max_version = 3;
839 
840  friend class global_t<data_offer_t>;
841  friend class global_base_t;
842 
843 public:
844  data_offer_t() = default;
845  data_offer_t(const client_t& client, uint32_t id, int version = 3);
846  data_offer_t(const resource_t &resource);
847 
848  static const std::string interface_name;
849 
850  operator wl_data_offer*() const;
851 
872  std::function<void(uint32_t, std::string)> &on_accept();
873 
895  std::function<void(std::string, int)> &on_receive();
896 
902  std::function<void()> &on_destroy();
903 
922  std::function<void()> &on_finish();
923 
962 
970  void offer(std::string const& mime_type, bool post = true);
971 
974  static constexpr std::uint32_t offer_since_version = 1;
975 
984  void source_actions(data_device_manager_dnd_action const& source_actions, bool post = true);
985 
988  static constexpr std::uint32_t source_actions_since_version = 3;
989 
993  bool can_source_actions() const;
994 
1035  void action(data_device_manager_dnd_action const& dnd_action, bool post = true);
1036 
1039  static constexpr std::uint32_t action_since_version = 3;
1040 
1044  bool can_action() const;
1045 
1048  void post_invalid_finish(std::string const& msg);
1049 
1052  void post_invalid_action_mask(std::string const& msg);
1053 
1056  void post_invalid_action(std::string const& msg);
1057 
1060  void post_invalid_offer(std::string const& msg);
1061 
1062 };
1063 
1065 
1069 enum class data_offer_error : uint32_t
1070  {
1072  invalid_finish = 0,
1074  invalid_action_mask = 1,
1076  invalid_action = 2,
1078  invalid_offer = 3
1079 };
1080 
1081 
1090 class data_source_t : public resource_t
1091 {
1092 private:
1093  struct events_t : public resource_t::events_base_t
1094  {
1095  std::function<void(std::string)> offer;
1096  std::function<void()> destroy;
1097  std::function<void(data_device_manager_dnd_action)> set_actions;
1098  };
1099 
1100  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1101 
1102 protected:
1103  static constexpr const wl_interface *interface = &wayland::server::detail::data_source_interface;
1104  static constexpr const unsigned int max_version = 3;
1105 
1106  friend class global_t<data_source_t>;
1107  friend class global_base_t;
1108 
1109 public:
1110  data_source_t() = default;
1111  data_source_t(const client_t& client, uint32_t id, int version = 3);
1112  data_source_t(const resource_t &resource);
1113 
1114  static const std::string interface_name;
1115 
1116  operator wl_data_source*() const;
1117 
1126  std::function<void(std::string)> &on_offer();
1127 
1133  std::function<void()> &on_destroy();
1134 
1153  std::function<void(data_device_manager_dnd_action)> &on_set_actions();
1154 
1164  void target(std::string const& mime_type, bool post = true);
1165 
1168  static constexpr std::uint32_t target_since_version = 1;
1169 
1179  void send(std::string const& mime_type, int fd, bool post = true);
1180 
1183  static constexpr std::uint32_t send_since_version = 1;
1184 
1209  void cancelled(bool post = true);
1210 
1213  static constexpr std::uint32_t cancelled_since_version = 1;
1214 
1228  void dnd_drop_performed(bool post = true);
1229 
1232  static constexpr std::uint32_t dnd_drop_performed_since_version = 3;
1233 
1237  bool can_dnd_drop_performed() const;
1238 
1249  void dnd_finished(bool post = true);
1250 
1253  static constexpr std::uint32_t dnd_finished_since_version = 3;
1254 
1258  bool can_dnd_finished() const;
1259 
1290  void action(data_device_manager_dnd_action const& dnd_action, bool post = true);
1291 
1294  static constexpr std::uint32_t action_since_version = 3;
1295 
1299  bool can_action() const;
1300 
1303  void post_invalid_action_mask(std::string const& msg);
1304 
1307  void post_invalid_source(std::string const& msg);
1308 
1309 };
1310 
1312 
1316 enum class data_source_error : uint32_t
1317  {
1319  invalid_action_mask = 0,
1321  invalid_source = 1
1322 };
1323 
1324 
1334 class data_device_t : public resource_t
1335 {
1336 private:
1337  struct events_t : public resource_t::events_base_t
1338  {
1339  std::function<void(data_source_t, surface_t, surface_t, uint32_t)> start_drag;
1340  std::function<void(data_source_t, uint32_t)> set_selection;
1341  std::function<void()> release;
1342  };
1343 
1344  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1345 
1346 protected:
1347  static constexpr const wl_interface *interface = &wayland::server::detail::data_device_interface;
1348  static constexpr const unsigned int max_version = 3;
1349 
1350  friend class global_t<data_device_t>;
1351  friend class global_base_t;
1352 
1353 public:
1354  data_device_t() = default;
1355  data_device_t(const client_t& client, uint32_t id, int version = 3);
1356  data_device_t(const resource_t &resource);
1357 
1358  static const std::string interface_name;
1359 
1360  operator wl_data_device*() const;
1361 
1398  std::function<void(data_source_t, surface_t, surface_t, uint32_t)> &on_start_drag();
1399 
1410  std::function<void(data_source_t, uint32_t)> &on_set_selection();
1411 
1417  std::function<void()> &on_release();
1418 
1431  void data_offer(bool post = true);
1432 
1435  static constexpr std::uint32_t data_offer_since_version = 1;
1436 
1450  void enter(uint32_t serial, surface_t const& surface, double x, double y, data_offer_t const& id, bool post = true);
1451 
1454  static constexpr std::uint32_t enter_since_version = 1;
1455 
1463  void leave(bool post = true);
1464 
1467  static constexpr std::uint32_t leave_since_version = 1;
1468 
1480  void motion(uint32_t time, double x, double y, bool post = true);
1481 
1484  static constexpr std::uint32_t motion_since_version = 1;
1485 
1503  void drop(bool post = true);
1504 
1507  static constexpr std::uint32_t drop_since_version = 1;
1508 
1526  void selection(data_offer_t const& id, bool post = true);
1527 
1530  static constexpr std::uint32_t selection_since_version = 1;
1531 
1534  void post_role(std::string const& msg);
1535 
1536 };
1537 
1539 
1543 enum class data_device_error : uint32_t
1544  {
1546  role = 0
1547 };
1548 
1549 
1564 class data_device_manager_t : public resource_t
1565 {
1566 private:
1567  struct events_t : public resource_t::events_base_t
1568  {
1569  std::function<void(data_source_t)> create_data_source;
1570  std::function<void(data_device_t, seat_t)> get_data_device;
1571  };
1572 
1573  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1574 
1575 protected:
1576  static constexpr const wl_interface *interface = &wayland::server::detail::data_device_manager_interface;
1577  static constexpr const unsigned int max_version = 3;
1578 
1579  friend class global_t<data_device_manager_t>;
1580  friend class global_base_t;
1581 
1582 public:
1583  data_device_manager_t() = default;
1584  data_device_manager_t(const client_t& client, uint32_t id, int version = 3);
1585  data_device_manager_t(const resource_t &resource);
1586 
1587  static const std::string interface_name;
1588 
1589  operator wl_data_device_manager*() const;
1590 
1597  std::function<void(data_source_t)> &on_create_data_source();
1598 
1606  std::function<void(data_device_t, seat_t)> &on_get_data_device();
1607 
1608 };
1609 
1611 
1639 struct data_device_manager_dnd_action : public wayland::detail::bitfield<3, 6>
1640 {
1641  data_device_manager_dnd_action(const wayland::detail::bitfield<3, 6> &b)
1642  : wayland::detail::bitfield<3, 6>(b) {}
1643  data_device_manager_dnd_action(const uint32_t value)
1644  : wayland::detail::bitfield<3, 6>(value) {}
1646  static const wayland::detail::bitfield<3, 6> none;
1648  static const wayland::detail::bitfield<3, 6> copy;
1650  static const wayland::detail::bitfield<3, 6> move;
1652  static const wayland::detail::bitfield<3, 6> ask;
1653 };
1654 
1655 
1669 class shell_t : public resource_t
1670 {
1671 private:
1672  struct events_t : public resource_t::events_base_t
1673  {
1674  std::function<void(shell_surface_t, surface_t)> get_shell_surface;
1675  };
1676 
1677  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1678 
1679 protected:
1680  static constexpr const wl_interface *interface = &wayland::server::detail::shell_interface;
1681  static constexpr const unsigned int max_version = 1;
1682 
1683  friend class global_t<shell_t>;
1684  friend class global_base_t;
1685 
1686 public:
1687  shell_t() = default;
1688  shell_t(const client_t& client, uint32_t id, int version = 1);
1689  shell_t(const resource_t &resource);
1690 
1691  static const std::string interface_name;
1692 
1693  operator wl_shell*() const;
1694 
1706  std::function<void(shell_surface_t, surface_t)> &on_get_shell_surface();
1707 
1710  void post_role(std::string const& msg);
1711 
1712 };
1713 
1715 
1719 enum class shell_error : uint32_t
1720  {
1722  role = 0
1723 };
1724 
1725 
1741 class shell_surface_t : public resource_t
1742 {
1743 private:
1744  struct events_t : public resource_t::events_base_t
1745  {
1746  std::function<void(uint32_t)> pong;
1747  std::function<void(seat_t, uint32_t)> move;
1748  std::function<void(seat_t, uint32_t, shell_surface_resize)> resize;
1749  std::function<void()> set_toplevel;
1750  std::function<void(surface_t, int32_t, int32_t, shell_surface_transient)> set_transient;
1751  std::function<void(shell_surface_fullscreen_method, uint32_t, output_t)> set_fullscreen;
1752  std::function<void(seat_t, uint32_t, surface_t, int32_t, int32_t, shell_surface_transient)> set_popup;
1753  std::function<void(output_t)> set_maximized;
1754  std::function<void(std::string)> set_title;
1755  std::function<void(std::string)> set_class;
1756  };
1757 
1758  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
1759 
1760 protected:
1761  static constexpr const wl_interface *interface = &wayland::server::detail::shell_surface_interface;
1762  static constexpr const unsigned int max_version = 1;
1763 
1764  friend class global_t<shell_surface_t>;
1765  friend class global_base_t;
1766 
1767 public:
1768  shell_surface_t() = default;
1769  shell_surface_t(const client_t& client, uint32_t id, int version = 1);
1770  shell_surface_t(const resource_t &resource);
1771 
1772  static const std::string interface_name;
1773 
1774  operator wl_shell_surface*() const;
1775 
1783  std::function<void(uint32_t)> &on_pong();
1784 
1796  std::function<void(seat_t, uint32_t)> &on_move();
1797 
1810  std::function<void(seat_t, uint32_t, shell_surface_resize)> &on_resize();
1811 
1819  std::function<void()> &on_set_toplevel();
1820 
1836  std::function<void(surface_t, int32_t, int32_t, shell_surface_transient)> &on_set_transient();
1837 
1878  std::function<void(shell_surface_fullscreen_method, uint32_t, output_t)> &on_set_fullscreen();
1879 
1909  std::function<void(seat_t, uint32_t, surface_t, int32_t, int32_t, shell_surface_transient)> &on_set_popup();
1910 
1934  std::function<void(output_t)> &on_set_maximized();
1935 
1948  std::function<void(std::string)> &on_set_title();
1949 
1961  std::function<void(std::string)> &on_set_class();
1962 
1970  void ping(uint32_t serial, bool post = true);
1971 
1974  static constexpr std::uint32_t ping_since_version = 1;
1975 
2000  void configure(shell_surface_resize const& edges, int32_t width, int32_t height, bool post = true);
2001 
2004  static constexpr std::uint32_t configure_since_version = 1;
2005 
2013  void popup_done(bool post = true);
2014 
2017  static constexpr std::uint32_t popup_done_since_version = 1;
2018 
2019 };
2020 
2022 
2031 struct shell_surface_resize : public wayland::detail::bitfield<4, 8>
2032 {
2033  shell_surface_resize(const wayland::detail::bitfield<4, 8> &b)
2034  : wayland::detail::bitfield<4, 8>(b) {}
2035  shell_surface_resize(const uint32_t value)
2036  : wayland::detail::bitfield<4, 8>(value) {}
2038  static const wayland::detail::bitfield<4, 8> none;
2040  static const wayland::detail::bitfield<4, 8> top;
2042  static const wayland::detail::bitfield<4, 8> bottom;
2044  static const wayland::detail::bitfield<4, 8> left;
2046  static const wayland::detail::bitfield<4, 8> top_left;
2048  static const wayland::detail::bitfield<4, 8> bottom_left;
2050  static const wayland::detail::bitfield<4, 8> right;
2052  static const wayland::detail::bitfield<4, 8> top_right;
2054  static const wayland::detail::bitfield<4, 8> bottom_right;
2055 };
2056 
2063 struct shell_surface_transient : public wayland::detail::bitfield<1, 9>
2064 {
2065  shell_surface_transient(const wayland::detail::bitfield<1, 9> &b)
2066  : wayland::detail::bitfield<1, 9>(b) {}
2067  shell_surface_transient(const uint32_t value)
2068  : wayland::detail::bitfield<1, 9>(value) {}
2070  static const wayland::detail::bitfield<1, 9> inactive;
2071 };
2072 
2080 enum class shell_surface_fullscreen_method : uint32_t
2081  {
2083  _default = 0,
2085  scale = 1,
2087  driver = 2,
2089  fill = 3
2090 };
2091 
2092 
2138 class surface_t : public resource_t
2139 {
2140 private:
2141  struct events_t : public resource_t::events_base_t
2142  {
2143  std::function<void()> destroy;
2144  std::function<void(buffer_t, int32_t, int32_t)> attach;
2145  std::function<void(int32_t, int32_t, int32_t, int32_t)> damage;
2146  std::function<void(callback_t)> frame;
2147  std::function<void(region_t)> set_opaque_region;
2148  std::function<void(region_t)> set_input_region;
2149  std::function<void()> commit;
2150  std::function<void(output_transform)> set_buffer_transform;
2151  std::function<void(int32_t)> set_buffer_scale;
2152  std::function<void(int32_t, int32_t, int32_t, int32_t)> damage_buffer;
2153  std::function<void(int32_t, int32_t)> offset;
2154  };
2155 
2156  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2157 
2158 protected:
2159  static constexpr const wl_interface *interface = &wayland::server::detail::surface_interface;
2160  static constexpr const unsigned int max_version = 5;
2161 
2162  friend class global_t<surface_t>;
2163  friend class global_base_t;
2164 
2165 public:
2166  surface_t() = default;
2167  surface_t(const client_t& client, uint32_t id, int version = 5);
2168  surface_t(const resource_t &resource);
2169 
2170  static const std::string interface_name;
2171 
2172  operator wl_surface*() const;
2173 
2179  std::function<void()> &on_destroy();
2180 
2244  std::function<void(buffer_t, int32_t, int32_t)> &on_attach();
2245 
2275  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_damage();
2276 
2314  std::function<void(callback_t)> &on_frame();
2315 
2345  std::function<void(region_t)> &on_set_opaque_region();
2346 
2374  std::function<void(region_t)> &on_set_input_region();
2375 
2397  std::function<void()> &on_commit();
2398 
2433  std::function<void(output_transform)> &on_set_buffer_transform();
2434 
2463  std::function<void(int32_t)> &on_set_buffer_scale();
2464 
2505  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_damage_buffer();
2506 
2525  std::function<void(int32_t, int32_t)> &on_offset();
2526 
2537  void enter(output_t const& output, bool post = true);
2538 
2541  static constexpr std::uint32_t enter_since_version = 1;
2542 
2557  void leave(output_t const& output, bool post = true);
2558 
2561  static constexpr std::uint32_t leave_since_version = 1;
2562 
2565  void post_invalid_scale(std::string const& msg);
2566 
2569  void post_invalid_transform(std::string const& msg);
2570 
2573  void post_invalid_size(std::string const& msg);
2574 
2577  void post_invalid_offset(std::string const& msg);
2578 
2579 };
2580 
2582 
2588 enum class surface_error : uint32_t
2589  {
2591  invalid_scale = 0,
2593  invalid_transform = 1,
2595  invalid_size = 2,
2597  invalid_offset = 3
2598 };
2599 
2600 
2609 class seat_t : public resource_t
2610 {
2611 private:
2612  struct events_t : public resource_t::events_base_t
2613  {
2614  std::function<void(pointer_t)> get_pointer;
2615  std::function<void(keyboard_t)> get_keyboard;
2616  std::function<void(touch_t)> get_touch;
2617  std::function<void()> release;
2618  };
2619 
2620  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2621 
2622 protected:
2623  static constexpr const wl_interface *interface = &wayland::server::detail::seat_interface;
2624  static constexpr const unsigned int max_version = 8;
2625 
2626  friend class global_t<seat_t>;
2627  friend class global_base_t;
2628 
2629 public:
2630  seat_t() = default;
2631  seat_t(const client_t& client, uint32_t id, int version = 8);
2632  seat_t(const resource_t &resource);
2633 
2634  static const std::string interface_name;
2635 
2636  operator wl_seat*() const;
2637 
2651  std::function<void(pointer_t)> &on_get_pointer();
2652 
2666  std::function<void(keyboard_t)> &on_get_keyboard();
2667 
2681  std::function<void(touch_t)> &on_get_touch();
2682 
2689  std::function<void()> &on_release();
2690 
2720  void capabilities(seat_capability const& capabilities, bool post = true);
2721 
2724  static constexpr std::uint32_t capabilities_since_version = 1;
2725 
2747  void name(std::string const& name, bool post = true);
2748 
2751  static constexpr std::uint32_t name_since_version = 2;
2752 
2756  bool can_name() const;
2757 
2760  void post_missing_capability(std::string const& msg);
2761 
2762 };
2763 
2765 
2772 struct seat_capability : public wayland::detail::bitfield<3, 12>
2773 {
2774  seat_capability(const wayland::detail::bitfield<3, 12> &b)
2775  : wayland::detail::bitfield<3, 12>(b) {}
2776  seat_capability(const uint32_t value)
2777  : wayland::detail::bitfield<3, 12>(value) {}
2779  static const wayland::detail::bitfield<3, 12> pointer;
2781  static const wayland::detail::bitfield<3, 12> keyboard;
2783  static const wayland::detail::bitfield<3, 12> touch;
2784 };
2785 
2791 enum class seat_error : uint32_t
2792  {
2794  missing_capability = 0
2795 };
2796 
2797 
2810 class pointer_t : public resource_t
2811 {
2812 private:
2813  struct events_t : public resource_t::events_base_t
2814  {
2815  std::function<void(uint32_t, surface_t, int32_t, int32_t)> set_cursor;
2816  std::function<void()> release;
2817  };
2818 
2819  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
2820 
2821 protected:
2822  static constexpr const wl_interface *interface = &wayland::server::detail::pointer_interface;
2823  static constexpr const unsigned int max_version = 8;
2824 
2825  friend class global_t<pointer_t>;
2826  friend class global_base_t;
2827 
2828 public:
2829  pointer_t() = default;
2830  pointer_t(const client_t& client, uint32_t id, int version = 8);
2831  pointer_t(const resource_t &resource);
2832 
2833  static const std::string interface_name;
2834 
2835  operator wl_pointer*() const;
2836 
2880  std::function<void(uint32_t, surface_t, int32_t, int32_t)> &on_set_cursor();
2881 
2891  std::function<void()> &on_release();
2892 
2907  void enter(uint32_t serial, surface_t const& surface, double surface_x, double surface_y, bool post = true);
2908 
2911  static constexpr std::uint32_t enter_since_version = 1;
2912 
2924  void leave(uint32_t serial, surface_t const& surface, bool post = true);
2925 
2928  static constexpr std::uint32_t leave_since_version = 1;
2929 
2940  void motion(uint32_t time, double surface_x, double surface_y, bool post = true);
2941 
2944  static constexpr std::uint32_t motion_since_version = 1;
2945 
2968  void button(uint32_t serial, uint32_t time, uint32_t button, pointer_button_state const& state, bool post = true);
2969 
2972  static constexpr std::uint32_t button_since_version = 1;
2973 
2997  void axis(uint32_t time, pointer_axis const& axis, double value, bool post = true);
2998 
3001  static constexpr std::uint32_t axis_since_version = 1;
3002 
3041  void frame(bool post = true);
3042 
3045  static constexpr std::uint32_t frame_since_version = 5;
3046 
3050  bool can_frame() const;
3051 
3082  void axis_source(pointer_axis_source const& axis_source, bool post = true);
3083 
3086  static constexpr std::uint32_t axis_source_since_version = 5;
3087 
3091  bool can_axis_source() const;
3092 
3113  void axis_stop(uint32_t time, pointer_axis const& axis, bool post = true);
3114 
3117  static constexpr std::uint32_t axis_stop_since_version = 5;
3118 
3122  bool can_axis_stop() const;
3123 
3159  void axis_discrete(pointer_axis const& axis, int32_t discrete, bool post = true);
3160 
3163  static constexpr std::uint32_t axis_discrete_since_version = 5;
3164 
3168  bool can_axis_discrete() const;
3169 
3197  void axis_value120(pointer_axis const& axis, int32_t value120, bool post = true);
3198 
3201  static constexpr std::uint32_t axis_value120_since_version = 8;
3202 
3206  bool can_axis_value120() const;
3207 
3210  void post_role(std::string const& msg);
3211 
3212 };
3213 
3215 
3219 enum class pointer_error : uint32_t
3220  {
3222  role = 0
3223 };
3224 
3231 enum class pointer_button_state : uint32_t
3232  {
3234  released = 0,
3236  pressed = 1
3237 };
3238 
3244 enum class pointer_axis : uint32_t
3245  {
3247  vertical_scroll = 0,
3249  horizontal_scroll = 1
3250 };
3251 
3272 enum class pointer_axis_source : uint32_t
3273  {
3275  wheel = 0,
3277  finger = 1,
3279  continuous = 2,
3281  wheel_tilt = 3
3282 };
3283 
3284 
3291 class keyboard_t : public resource_t
3292 {
3293 private:
3294  struct events_t : public resource_t::events_base_t
3295  {
3296  std::function<void()> release;
3297  };
3298 
3299  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3300 
3301 protected:
3302  static constexpr const wl_interface *interface = &wayland::server::detail::keyboard_interface;
3303  static constexpr const unsigned int max_version = 8;
3304 
3305  friend class global_t<keyboard_t>;
3306  friend class global_base_t;
3307 
3308 public:
3309  keyboard_t() = default;
3310  keyboard_t(const client_t& client, uint32_t id, int version = 8);
3311  keyboard_t(const resource_t &resource);
3312 
3313  static const std::string interface_name;
3314 
3315  operator wl_keyboard*() const;
3316 
3320  std::function<void()> &on_release();
3321 
3335  void keymap(keyboard_keymap_format const& format, int fd, uint32_t size, bool post = true);
3336 
3339  static constexpr std::uint32_t keymap_since_version = 1;
3340 
3353  void enter(uint32_t serial, surface_t const& surface, array_t const& keys, bool post = true);
3354 
3357  static constexpr std::uint32_t enter_since_version = 1;
3358 
3373  void leave(uint32_t serial, surface_t const& surface, bool post = true);
3374 
3377  static constexpr std::uint32_t leave_since_version = 1;
3378 
3396  void key(uint32_t serial, uint32_t time, uint32_t key, keyboard_key_state const& state, bool post = true);
3397 
3400  static constexpr std::uint32_t key_since_version = 1;
3401 
3413  void modifiers(uint32_t serial, uint32_t mods_depressed, uint32_t mods_latched, uint32_t mods_locked, uint32_t group, bool post = true);
3414 
3417  static constexpr std::uint32_t modifiers_since_version = 1;
3418 
3437  void repeat_info(int32_t rate, int32_t delay, bool post = true);
3438 
3441  static constexpr std::uint32_t repeat_info_since_version = 4;
3442 
3446  bool can_repeat_info() const;
3447 
3448 };
3449 
3451 
3458 enum class keyboard_keymap_format : uint32_t
3459  {
3461  no_keymap = 0,
3463  xkb_v1 = 1
3464 };
3465 
3471 enum class keyboard_key_state : uint32_t
3472  {
3474  released = 0,
3476  pressed = 1
3477 };
3478 
3479 
3492 class touch_t : public resource_t
3493 {
3494 private:
3495  struct events_t : public resource_t::events_base_t
3496  {
3497  std::function<void()> release;
3498  };
3499 
3500  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3501 
3502 protected:
3503  static constexpr const wl_interface *interface = &wayland::server::detail::touch_interface;
3504  static constexpr const unsigned int max_version = 8;
3505 
3506  friend class global_t<touch_t>;
3507  friend class global_base_t;
3508 
3509 public:
3510  touch_t() = default;
3511  touch_t(const client_t& client, uint32_t id, int version = 8);
3512  touch_t(const resource_t &resource);
3513 
3514  static const std::string interface_name;
3515 
3516  operator wl_touch*() const;
3517 
3521  std::function<void()> &on_release();
3522 
3537  void down(uint32_t serial, uint32_t time, surface_t const& surface, int32_t id, double x, double y, bool post = true);
3538 
3541  static constexpr std::uint32_t down_since_version = 1;
3542 
3553  void up(uint32_t serial, uint32_t time, int32_t id, bool post = true);
3554 
3557  static constexpr std::uint32_t up_since_version = 1;
3558 
3568  void motion(uint32_t time, int32_t id, double x, double y, bool post = true);
3569 
3572  static constexpr std::uint32_t motion_since_version = 1;
3573 
3586  void frame(bool post = true);
3587 
3590  static constexpr std::uint32_t frame_since_version = 1;
3591 
3602  void cancel(bool post = true);
3603 
3606  static constexpr std::uint32_t cancel_since_version = 1;
3607 
3640  void shape(int32_t id, double major, double minor, bool post = true);
3641 
3644  static constexpr std::uint32_t shape_since_version = 6;
3645 
3649  bool can_shape() const;
3650 
3680  void orientation(int32_t id, double orientation, bool post = true);
3681 
3684  static constexpr std::uint32_t orientation_since_version = 6;
3685 
3689  bool can_orientation() const;
3690 
3691 };
3692 
3694 
3695 
3706 class output_t : public resource_t
3707 {
3708 private:
3709  struct events_t : public resource_t::events_base_t
3710  {
3711  std::function<void()> release;
3712  };
3713 
3714  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
3715 
3716 protected:
3717  static constexpr const wl_interface *interface = &wayland::server::detail::output_interface;
3718  static constexpr const unsigned int max_version = 4;
3719 
3720  friend class global_t<output_t>;
3721  friend class global_base_t;
3722 
3723 public:
3724  output_t() = default;
3725  output_t(const client_t& client, uint32_t id, int version = 4);
3726  output_t(const resource_t &resource);
3727 
3728  static const std::string interface_name;
3729 
3730  operator wl_output*() const;
3731 
3738  std::function<void()> &on_release();
3739 
3768  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);
3769 
3772  static constexpr std::uint32_t geometry_since_version = 1;
3773 
3815  void mode(output_mode const& flags, int32_t width, int32_t height, int32_t refresh, bool post = true);
3816 
3819  static constexpr std::uint32_t mode_since_version = 1;
3820 
3830  void done(bool post = true);
3831 
3834  static constexpr std::uint32_t done_since_version = 2;
3835 
3839  bool can_done() const;
3840 
3866  void scale(int32_t factor, bool post = true);
3867 
3870  static constexpr std::uint32_t scale_since_version = 2;
3871 
3875  bool can_scale() const;
3876 
3910  void name(std::string const& name, bool post = true);
3911 
3914  static constexpr std::uint32_t name_since_version = 4;
3915 
3919  bool can_name() const;
3920 
3940  void description(std::string const& description, bool post = true);
3941 
3944  static constexpr std::uint32_t description_since_version = 4;
3945 
3949  bool can_description() const;
3950 
3951 };
3952 
3954 
3961 enum class output_subpixel : uint32_t
3962  {
3964  unknown = 0,
3966  none = 1,
3968  horizontal_rgb = 2,
3970  horizontal_bgr = 3,
3972  vertical_rgb = 4,
3974  vertical_bgr = 5
3975 };
3976 
3992 struct output_transform : public wayland::detail::bitfield<3, 21>
3993 {
3994  output_transform(const wayland::detail::bitfield<3, 21> &b)
3995  : wayland::detail::bitfield<3, 21>(b) {}
3996  output_transform(const uint32_t value)
3997  : wayland::detail::bitfield<3, 21>(value) {}
3999  static const wayland::detail::bitfield<3, 21> normal;
4001  static const wayland::detail::bitfield<3, 21> _90;
4003  static const wayland::detail::bitfield<3, 21> _180;
4005  static const wayland::detail::bitfield<3, 21> _270;
4007  static const wayland::detail::bitfield<3, 21> flipped;
4009  static const wayland::detail::bitfield<3, 21> flipped_90;
4011  static const wayland::detail::bitfield<3, 21> flipped_180;
4013  static const wayland::detail::bitfield<3, 21> flipped_270;
4014 };
4015 
4022 struct output_mode : public wayland::detail::bitfield<2, 22>
4023 {
4024  output_mode(const wayland::detail::bitfield<2, 22> &b)
4025  : wayland::detail::bitfield<2, 22>(b) {}
4026  output_mode(const uint32_t value)
4027  : wayland::detail::bitfield<2, 22>(value) {}
4029  static const wayland::detail::bitfield<2, 22> current;
4031  static const wayland::detail::bitfield<2, 22> preferred;
4032 };
4033 
4034 
4043 class region_t : public resource_t
4044 {
4045 private:
4046  struct events_t : public resource_t::events_base_t
4047  {
4048  std::function<void()> destroy;
4049  std::function<void(int32_t, int32_t, int32_t, int32_t)> add;
4050  std::function<void(int32_t, int32_t, int32_t, int32_t)> subtract;
4051  };
4052 
4053  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4054 
4055 protected:
4056  static constexpr const wl_interface *interface = &wayland::server::detail::region_interface;
4057  static constexpr const unsigned int max_version = 1;
4058 
4059  friend class global_t<region_t>;
4060  friend class global_base_t;
4061 
4062 public:
4063  region_t() = default;
4064  region_t(const client_t& client, uint32_t id, int version = 1);
4065  region_t(const resource_t &resource);
4066 
4067  static const std::string interface_name;
4068 
4069  operator wl_region*() const;
4070 
4076  std::function<void()> &on_destroy();
4077 
4087  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_add();
4088 
4098  std::function<void(int32_t, int32_t, int32_t, int32_t)> &on_subtract();
4099 
4100 };
4101 
4103 
4104 
4128 class subcompositor_t : public resource_t
4129 {
4130 private:
4131  struct events_t : public resource_t::events_base_t
4132  {
4133  std::function<void()> destroy;
4134  std::function<void(subsurface_t, surface_t, surface_t)> get_subsurface;
4135  };
4136 
4137  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4138 
4139 protected:
4140  static constexpr const wl_interface *interface = &wayland::server::detail::subcompositor_interface;
4141  static constexpr const unsigned int max_version = 1;
4142 
4143  friend class global_t<subcompositor_t>;
4144  friend class global_base_t;
4145 
4146 public:
4147  subcompositor_t() = default;
4148  subcompositor_t(const client_t& client, uint32_t id, int version = 1);
4149  subcompositor_t(const resource_t &resource);
4150 
4151  static const std::string interface_name;
4152 
4153  operator wl_subcompositor*() const;
4154 
4162  std::function<void()> &on_destroy();
4163 
4186  std::function<void(subsurface_t, surface_t, surface_t)> &on_get_subsurface();
4187 
4190  void post_bad_surface(std::string const& msg);
4191 
4192 };
4193 
4195 
4199 enum class subcompositor_error : uint32_t
4200  {
4202  bad_surface = 0
4203 };
4204 
4205 
4259 class subsurface_t : public resource_t
4260 {
4261 private:
4262  struct events_t : public resource_t::events_base_t
4263  {
4264  std::function<void()> destroy;
4265  std::function<void(int32_t, int32_t)> set_position;
4266  std::function<void(surface_t)> place_above;
4267  std::function<void(surface_t)> place_below;
4268  std::function<void()> set_sync;
4269  std::function<void()> set_desync;
4270  };
4271 
4272  static int dispatcher(int opcode, const std::vector<wayland::detail::any>& args, const std::shared_ptr<resource_t::events_base_t>& e);
4273 
4274 protected:
4275  static constexpr const wl_interface *interface = &wayland::server::detail::subsurface_interface;
4276  static constexpr const unsigned int max_version = 1;
4277 
4278  friend class global_t<subsurface_t>;
4279  friend class global_base_t;
4280 
4281 public:
4282  subsurface_t() = default;
4283  subsurface_t(const client_t& client, uint32_t id, int version = 1);
4284  subsurface_t(const resource_t &resource);
4285 
4286  static const std::string interface_name;
4287 
4288  operator wl_subsurface*() const;
4289 
4299  std::function<void()> &on_destroy();
4300 
4323  std::function<void(int32_t, int32_t)> &on_set_position();
4324 
4345  std::function<void(surface_t)> &on_place_above();
4346 
4354  std::function<void(surface_t)> &on_place_below();
4355 
4373  std::function<void()> &on_set_sync();
4374 
4398  std::function<void()> &on_set_desync();
4399 
4402  void post_bad_surface(std::string const& msg);
4403 
4404 };
4405 
4407 
4411 enum class subsurface_error : uint32_t
4412  {
4414  bad_surface = 0
4415 };
4416 
4417 
4418 
4419 }
4420 }
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