Wayland++ 1.0.0
C++ Bindings for Wayland
Loading...
Searching...
No Matches
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
12struct wl_registry;
13struct wl_callback;
14struct wl_compositor;
15struct wl_shm_pool;
16struct wl_shm;
17struct wl_buffer;
18struct wl_data_offer;
19struct wl_data_source;
20struct wl_data_device;
21struct wl_data_device_manager;
22struct wl_shell;
23struct wl_shell_surface;
24struct wl_surface;
25struct wl_seat;
26struct wl_pointer;
27struct wl_keyboard;
28struct wl_touch;
29struct wl_output;
30struct wl_region;
31struct wl_subcompositor;
32struct wl_subsurface;
33
34namespace wayland
35{
36namespace server
37{
38class registry_t;
39class callback_t;
40class compositor_t;
41class shm_pool_t;
42class shm_t;
43enum class shm_error : uint32_t;
44enum class shm_format : uint32_t;
45class buffer_t;
46class data_offer_t;
47enum class data_offer_error : uint32_t;
48class data_source_t;
49enum class data_source_error : uint32_t;
50class data_device_t;
51enum class data_device_error : uint32_t;
52class data_device_manager_t;
53struct data_device_manager_dnd_action;
54class shell_t;
55enum class shell_error : uint32_t;
56class shell_surface_t;
57struct shell_surface_resize;
58struct shell_surface_transient;
59enum class shell_surface_fullscreen_method : uint32_t;
60class surface_t;
61enum class surface_error : uint32_t;
62class seat_t;
63struct seat_capability;
64enum class seat_error : uint32_t;
65class pointer_t;
66enum class pointer_error : uint32_t;
67enum class pointer_button_state : uint32_t;
68enum class pointer_axis : uint32_t;
69enum class pointer_axis_source : uint32_t;
70class keyboard_t;
71enum class keyboard_keymap_format : uint32_t;
72enum class keyboard_key_state : uint32_t;
73class touch_t;
74class output_t;
75enum class output_subpixel : uint32_t;
76struct output_transform;
77struct output_mode;
78class region_t;
79class subcompositor_t;
80enum class subcompositor_error : uint32_t;
81class subsurface_t;
82enum class subsurface_error : uint32_t;
83
84namespace 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
134class registry_t : public resource_t
135{
136private:
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
144protected:
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
151public:
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
220class callback_t : public resource_t
221{
222private:
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
229protected:
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
236public:
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
269class compositor_t : public resource_t
270{
271private:
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
280protected:
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
287public:
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
328class shm_pool_t : public resource_t
329{
330private:
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
340protected:
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
347public:
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
425class shm_t : public resource_t
426{
427private:
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
435protected:
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
442public:
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
500enum class shm_error : uint32_t
501 {
503 invalid_format = 0,
505 invalid_stride = 1,
507 invalid_fd = 2
508};
509
526enum 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
749class buffer_t : public resource_t
750{
751private:
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
759protected:
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
766public:
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
822class data_offer_t : public resource_t
823{
824private:
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
836protected:
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
843public:
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
1069enum 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
1090class data_source_t : public resource_t
1091{
1092private:
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
1102protected:
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
1109public:
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
1316enum class data_source_error : uint32_t
1317 {
1319 invalid_action_mask = 0,
1321 invalid_source = 1
1322};
1323
1324
1334class data_device_t : public resource_t
1335{
1336private:
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
1346protected:
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
1353public:
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
1543enum class data_device_error : uint32_t
1544 {
1546 role = 0
1547};
1548
1549
1564class data_device_manager_t : public resource_t
1565{
1566private:
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
1575protected:
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
1582public:
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
1639struct 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
1669class shell_t : public resource_t
1670{
1671private:
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
1679protected:
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
1686public:
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
1719enum class shell_error : uint32_t
1720 {
1722 role = 0
1723};
1724
1725
1741class shell_surface_t : public resource_t
1742{
1743private:
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
1760protected:
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
1767public:
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
2031struct 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
2063struct 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
2080enum class shell_surface_fullscreen_method : uint32_t
2081 {
2083 _default = 0,
2085 scale = 1,
2087 driver = 2,
2089 fill = 3
2090};
2091
2092
2138class surface_t : public resource_t
2139{
2140private:
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
2158protected:
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
2165public:
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
2588enum 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
2609class seat_t : public resource_t
2610{
2611private:
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
2622protected:
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
2629public:
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
2772struct 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
2791enum class seat_error : uint32_t
2792 {
2794 missing_capability = 0
2795};
2796
2797
2810class pointer_t : public resource_t
2811{
2812private:
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
2821protected:
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
2828public:
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
3219enum class pointer_error : uint32_t
3220 {
3222 role = 0
3223};
3224
3231enum class pointer_button_state : uint32_t
3232 {
3234 released = 0,
3236 pressed = 1
3237};
3238
3244enum class pointer_axis : uint32_t
3245 {
3247 vertical_scroll = 0,
3249 horizontal_scroll = 1
3250};
3251
3272enum class pointer_axis_source : uint32_t
3273 {
3275 wheel = 0,
3277 finger = 1,
3279 continuous = 2,
3281 wheel_tilt = 3
3282};
3283
3284
3291class keyboard_t : public resource_t
3292{
3293private:
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
3301protected:
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
3308public:
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
3458enum class keyboard_keymap_format : uint32_t
3459 {
3461 no_keymap = 0,
3463 xkb_v1 = 1
3464};
3465
3471enum class keyboard_key_state : uint32_t
3472 {
3474 released = 0,
3476 pressed = 1
3477};
3478
3479
3492class touch_t : public resource_t
3493{
3494private:
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
3502protected:
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
3509public:
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
3706class output_t : public resource_t
3707{
3708private:
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
3716protected:
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
3723public:
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
3961enum 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
3992struct 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
4022struct 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
4043class region_t : public resource_t
4044{
4045private:
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
4055protected:
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
4062public:
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
4128class subcompositor_t : public resource_t
4129{
4130private:
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
4139protected:
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
4146public:
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
4199enum class subcompositor_error : uint32_t
4200 {
4202 bad_surface = 0
4203};
4204
4205
4259class subsurface_t : public resource_t
4260{
4261private:
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
4274protected:
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
4281public:
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
4411enum 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