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