1 #ifndef DS_BACKEND_WAYLAND_H
2 #define DS_BACKEND_WAYLAND_H
4 #include "libds/interfaces/backend.h"
5 #include "libds/interfaces/output.h"
6 #include "libds/interfaces/input_device.h"
7 #include "libds/interfaces/pointer.h"
8 #include "libds/interfaces/keyboard.h"
9 #include "libds/interfaces/touch.h"
11 struct ds_wl_backend_server
13 struct ds_wl_backend *backend;
14 struct wl_display *display;
15 struct wl_registry *registry;
16 struct wl_compositor *compositor;
17 struct xdg_wm_base *xdg_wm_base;
18 struct wl_event_source *event_source;
24 struct ds_backend base;
26 struct wl_display *display;
27 struct wl_listener display_destroy;
29 struct wl_list outputs; // ds_wl_output.link
30 struct wl_list buffers; // ds_wl_buffer.link
31 struct wl_list seats; // ds_wl_seat.link
33 struct wl_event_source *server_event_source;
34 struct ds_wl_backend_server server;
36 size_t requested_outputs;
41 struct ds_buffer *buffer;
42 struct wl_buffer *wl_buffer;
43 struct wl_list link; // ds_wl_backend.buffers
44 struct wl_listener buffer_destroy;
51 struct ds_output base;
53 struct ds_wl_backend *backend;
55 struct wl_surface *surface;
56 struct xdg_surface *xdg_surface;
57 struct xdg_toplevel *xdg_toplevel;
58 struct wl_callback *frame_callback;
63 struct ds_wl_pointer *pointer;
64 struct wl_surface *surface;
65 int32_t hotspot_x, hotspot_y;
66 uint32_t enter_serial;
72 struct ds_wl_backend *backend;
73 struct ds_wl_output *output;
75 struct wl_seat *wl_seat;
78 struct ds_input_device *pointer_dev;
79 struct ds_input_device *keyboard_dev;
80 struct ds_input_device *touch_dev;
82 struct wl_callback *initial_info_cb;
84 struct wl_list link; // ds_wl_backend.seats
86 enum wl_seat_capability caps;
89 uint32_t enter_serial;
94 struct ds_wl_input_device
96 struct ds_input_device base;
98 struct ds_wl_backend *backend;
99 struct ds_wl_seat *seat;
104 struct ds_pointer base;
106 struct ds_wl_input_device *input_device;
107 struct wl_pointer *wl_pointer;
110 struct ds_wl_keyboard
112 struct ds_keyboard base;
114 struct wl_keyboard *wl_keyboard;
119 struct ds_touch base;
121 struct wl_touch *wl_touch;
124 struct ds_wl_backend *
125 wl_backend_from_backend(struct ds_backend *backend);
127 struct ds_wl_output *create_wl_output(struct ds_wl_backend *backend);
130 destroy_wl_buffer(struct ds_wl_buffer *buffer);
132 struct ds_wl_seat *create_wl_seat(struct ds_wl_backend *backend, uint32_t id,
133 uint32_t available_version);
135 void destroy_wl_seat(struct ds_wl_seat *seat);
137 void output_enter_pointer(struct ds_wl_output *output,
138 struct ds_wl_pointer *pointer, uint32_t serial);
140 void output_leave_pointer(struct ds_wl_output *output);