1 | /* |
2 | Simple DirectMedia Layer |
3 | Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> |
4 | |
5 | This software is provided 'as-is', without any express or implied |
6 | warranty. In no event will the authors be held liable for any damages |
7 | arising from the use of this software. |
8 | |
9 | Permission is granted to anyone to use this software for any purpose, |
10 | including commercial applications, and to alter it and redistribute it |
11 | freely, subject to the following restrictions: |
12 | |
13 | 1. The origin of this software must not be misrepresented; you must not |
14 | claim that you wrote the original software. If you use this software |
15 | in a product, an acknowledgment in the product documentation would be |
16 | appreciated but is not required. |
17 | 2. Altered source versions must be plainly marked as such, and must not be |
18 | misrepresented as being the original software. |
19 | 3. This notice may not be removed or altered from any source distribution. |
20 | */ |
21 | |
22 | /* *INDENT-OFF* */ // clang-format off |
23 | |
24 | #ifndef SDL_WAYLAND_MODULE |
25 | #define SDL_WAYLAND_MODULE(modname) |
26 | #endif |
27 | |
28 | #ifndef SDL_WAYLAND_SYM |
29 | #define SDL_WAYLAND_SYM(rc,fn,params) |
30 | #endif |
31 | |
32 | #ifndef SDL_WAYLAND_SYM_OPT |
33 | #define SDL_WAYLAND_SYM_OPT(rc,fn,params) |
34 | #endif |
35 | |
36 | #ifndef SDL_WAYLAND_INTERFACE |
37 | #define SDL_WAYLAND_INTERFACE(iface) |
38 | #endif |
39 | |
40 | SDL_WAYLAND_MODULE(WAYLAND_CLIENT) |
41 | SDL_WAYLAND_SYM(void, wl_proxy_marshal, (struct wl_proxy *, uint32_t, ...)) |
42 | SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_create, (struct wl_proxy *, const struct wl_interface *)) |
43 | SDL_WAYLAND_SYM(void, wl_proxy_destroy, (struct wl_proxy *)) |
44 | SDL_WAYLAND_SYM(int, wl_proxy_add_listener, (struct wl_proxy *, void (**)(void), void *)) |
45 | SDL_WAYLAND_SYM(void, wl_proxy_set_user_data, (struct wl_proxy *, void *)) |
46 | SDL_WAYLAND_SYM(void *, wl_proxy_get_user_data, (struct wl_proxy *)) |
47 | SDL_WAYLAND_SYM(uint32_t, wl_proxy_get_version, (struct wl_proxy *)) |
48 | SDL_WAYLAND_SYM(uint32_t, wl_proxy_get_id, (struct wl_proxy *)) |
49 | SDL_WAYLAND_SYM(const char *, wl_proxy_get_class, (struct wl_proxy *)) |
50 | SDL_WAYLAND_SYM(void, wl_proxy_set_queue, (struct wl_proxy *, struct wl_event_queue *)) |
51 | SDL_WAYLAND_SYM(void *, wl_proxy_create_wrapper, (void *)) |
52 | SDL_WAYLAND_SYM(void, wl_proxy_wrapper_destroy, (void *)) |
53 | SDL_WAYLAND_SYM(struct wl_display *, wl_display_connect, (const char *)) |
54 | SDL_WAYLAND_SYM(struct wl_display *, wl_display_connect_to_fd, (int)) |
55 | SDL_WAYLAND_SYM(void, wl_display_disconnect, (struct wl_display *)) |
56 | SDL_WAYLAND_SYM(int, wl_display_get_fd, (struct wl_display *)) |
57 | SDL_WAYLAND_SYM(int, wl_display_dispatch, (struct wl_display *)) |
58 | SDL_WAYLAND_SYM(int, wl_display_dispatch_queue, (struct wl_display *, struct wl_event_queue *)) |
59 | SDL_WAYLAND_SYM(int, wl_display_dispatch_queue_pending, (struct wl_display *, struct wl_event_queue *)) |
60 | SDL_WAYLAND_SYM(int, wl_display_dispatch_pending, (struct wl_display *)) |
61 | SDL_WAYLAND_SYM(int, wl_display_prepare_read, (struct wl_display *)) |
62 | SDL_WAYLAND_SYM(int, wl_display_prepare_read_queue, (struct wl_display *, struct wl_event_queue *)) |
63 | SDL_WAYLAND_SYM(int, wl_display_read_events, (struct wl_display *)) |
64 | SDL_WAYLAND_SYM(void, wl_display_cancel_read, (struct wl_display *)) |
65 | SDL_WAYLAND_SYM(int, wl_display_get_error, (struct wl_display *)) |
66 | SDL_WAYLAND_SYM(int, wl_display_flush, (struct wl_display *)) |
67 | SDL_WAYLAND_SYM(int, wl_display_roundtrip, (struct wl_display *)) |
68 | SDL_WAYLAND_SYM(struct wl_event_queue *, wl_display_create_queue, (struct wl_display *)) |
69 | SDL_WAYLAND_SYM(void, wl_event_queue_destroy, (struct wl_event_queue *)) |
70 | SDL_WAYLAND_SYM(void, wl_log_set_handler_client, (wl_log_func_t)) |
71 | SDL_WAYLAND_SYM(void, wl_list_init, (struct wl_list *)) |
72 | SDL_WAYLAND_SYM(void, wl_list_insert, (struct wl_list *, struct wl_list *) ) |
73 | SDL_WAYLAND_SYM(void, wl_list_remove, (struct wl_list *)) |
74 | SDL_WAYLAND_SYM(int, wl_list_length, (const struct wl_list *)) |
75 | SDL_WAYLAND_SYM(int, wl_list_empty, (const struct wl_list *)) |
76 | SDL_WAYLAND_SYM(void, wl_list_insert_list, (struct wl_list *, struct wl_list *)) |
77 | SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_marshal_constructor, (struct wl_proxy *, uint32_t opcode, const struct wl_interface *interface, ...)) |
78 | SDL_WAYLAND_SYM(struct wl_proxy *, wl_proxy_marshal_constructor_versioned, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, ...)) |
79 | SDL_WAYLAND_SYM(void, wl_proxy_set_tag, (struct wl_proxy *, const char * const *)) |
80 | SDL_WAYLAND_SYM(const char * const *, wl_proxy_get_tag, (struct wl_proxy *)) |
81 | |
82 | #if SDL_WAYLAND_CHECK_VERSION(1, 20, 0) |
83 | /* wayland-scanner 1.20 generates code that will call these, so these are |
84 | * non-optional when we are compiling against Wayland 1.20. We don't |
85 | * explicitly call them ourselves, though, so if we are only compiling |
86 | * against Wayland 1.18, they're unnecessary. */ |
87 | SDL_WAYLAND_SYM(struct wl_proxy*, wl_proxy_marshal_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interfac, uint32_t version, uint32_t flags, ...)) |
88 | SDL_WAYLAND_SYM(struct wl_proxy*, wl_proxy_marshal_array_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, uint32_t flags, union wl_argument *args)) |
89 | #endif |
90 | |
91 | #if 0 // TODO RECONNECT: See waylandvideo.c for more information! |
92 | #if SDL_WAYLAND_CHECK_VERSION(broken, on, purpose) |
93 | SDL_WAYLAND_SYM(int, wl_display_reconnect, (struct wl_display*)) |
94 | #endif |
95 | #endif // 0 |
96 | |
97 | SDL_WAYLAND_INTERFACE(wl_seat_interface) |
98 | SDL_WAYLAND_INTERFACE(wl_surface_interface) |
99 | SDL_WAYLAND_INTERFACE(wl_shm_pool_interface) |
100 | SDL_WAYLAND_INTERFACE(wl_buffer_interface) |
101 | SDL_WAYLAND_INTERFACE(wl_registry_interface) |
102 | SDL_WAYLAND_INTERFACE(wl_region_interface) |
103 | SDL_WAYLAND_INTERFACE(wl_pointer_interface) |
104 | SDL_WAYLAND_INTERFACE(wl_keyboard_interface) |
105 | SDL_WAYLAND_INTERFACE(wl_compositor_interface) |
106 | SDL_WAYLAND_INTERFACE(wl_output_interface) |
107 | SDL_WAYLAND_INTERFACE(wl_shm_interface) |
108 | SDL_WAYLAND_INTERFACE(wl_data_device_interface) |
109 | SDL_WAYLAND_INTERFACE(wl_data_source_interface) |
110 | SDL_WAYLAND_INTERFACE(wl_data_offer_interface) |
111 | SDL_WAYLAND_INTERFACE(wl_data_device_manager_interface) |
112 | |
113 | SDL_WAYLAND_MODULE(WAYLAND_EGL) |
114 | SDL_WAYLAND_SYM(struct wl_egl_window *, wl_egl_window_create, (struct wl_surface *, int, int)) |
115 | SDL_WAYLAND_SYM(void, wl_egl_window_destroy, (struct wl_egl_window *)) |
116 | SDL_WAYLAND_SYM(void, wl_egl_window_resize, (struct wl_egl_window *, int, int, int, int)) |
117 | SDL_WAYLAND_SYM(void, wl_egl_window_get_attached_size, (struct wl_egl_window *, int *, int *)) |
118 | |
119 | SDL_WAYLAND_MODULE(WAYLAND_CURSOR) |
120 | SDL_WAYLAND_SYM(struct wl_cursor_theme *, wl_cursor_theme_load, (const char *, int , struct wl_shm *)) |
121 | SDL_WAYLAND_SYM(void, wl_cursor_theme_destroy, (struct wl_cursor_theme *)) |
122 | SDL_WAYLAND_SYM(struct wl_cursor *, wl_cursor_theme_get_cursor, (struct wl_cursor_theme *, const char *)) |
123 | SDL_WAYLAND_SYM(struct wl_buffer *, wl_cursor_image_get_buffer, (struct wl_cursor_image *)) |
124 | SDL_WAYLAND_SYM(int, wl_cursor_frame, (struct wl_cursor *, uint32_t)) |
125 | |
126 | SDL_WAYLAND_MODULE(WAYLAND_XKB) |
127 | SDL_WAYLAND_SYM(int, xkb_state_key_get_syms, (struct xkb_state *, xkb_keycode_t, const xkb_keysym_t **)) |
128 | SDL_WAYLAND_SYM(int, xkb_keysym_to_utf8, (xkb_keysym_t, char *, size_t) ) |
129 | SDL_WAYLAND_SYM(struct xkb_keymap *, xkb_keymap_new_from_string, (struct xkb_context *, const char *, enum xkb_keymap_format, enum xkb_keymap_compile_flags)) |
130 | SDL_WAYLAND_SYM(struct xkb_state *, xkb_state_new, (struct xkb_keymap *) ) |
131 | SDL_WAYLAND_SYM(int, xkb_keymap_key_repeats, (struct xkb_keymap *keymap, xkb_keycode_t key) ) |
132 | SDL_WAYLAND_SYM(void, xkb_keymap_unref, (struct xkb_keymap *) ) |
133 | SDL_WAYLAND_SYM(void, xkb_state_unref, (struct xkb_state *) ) |
134 | SDL_WAYLAND_SYM(void, xkb_context_unref, (struct xkb_context *) ) |
135 | SDL_WAYLAND_SYM(struct xkb_context *, xkb_context_new, (enum xkb_context_flags flags) ) |
136 | SDL_WAYLAND_SYM(enum xkb_state_component, xkb_state_update_mask, (struct xkb_state *state,\ |
137 | xkb_mod_mask_t depressed_mods,\ |
138 | xkb_mod_mask_t latched_mods,\ |
139 | xkb_mod_mask_t locked_mods,\ |
140 | xkb_layout_index_t depressed_layout,\ |
141 | xkb_layout_index_t latched_layout,\ |
142 | xkb_layout_index_t locked_layout) ) |
143 | SDL_WAYLAND_SYM(struct xkb_compose_table *, xkb_compose_table_new_from_locale, (struct xkb_context *,\ |
144 | const char *locale, enum xkb_compose_compile_flags) ) |
145 | SDL_WAYLAND_SYM(void, xkb_compose_state_reset, (struct xkb_compose_state *) ) |
146 | SDL_WAYLAND_SYM(void, xkb_compose_table_unref, (struct xkb_compose_table *) ) |
147 | SDL_WAYLAND_SYM(struct xkb_compose_state *, xkb_compose_state_new, (struct xkb_compose_table *, enum xkb_compose_state_flags) ) |
148 | SDL_WAYLAND_SYM(void, xkb_compose_state_unref, (struct xkb_compose_state *) ) |
149 | SDL_WAYLAND_SYM(enum xkb_compose_feed_result, xkb_compose_state_feed, (struct xkb_compose_state *, xkb_keysym_t) ) |
150 | SDL_WAYLAND_SYM(enum xkb_compose_status, xkb_compose_state_get_status, (struct xkb_compose_state *) ) |
151 | SDL_WAYLAND_SYM(xkb_keysym_t, xkb_compose_state_get_one_sym, (struct xkb_compose_state *) ) |
152 | SDL_WAYLAND_SYM(void, xkb_keymap_key_for_each, (struct xkb_keymap *, xkb_keymap_key_iter_t, void*) ) |
153 | SDL_WAYLAND_SYM(int, xkb_keymap_key_get_syms_by_level, (struct xkb_keymap *, |
154 | xkb_keycode_t, |
155 | xkb_layout_index_t, |
156 | xkb_layout_index_t, |
157 | const xkb_keysym_t **) ) |
158 | SDL_WAYLAND_SYM(uint32_t, xkb_keysym_to_utf32, (xkb_keysym_t) ) |
159 | SDL_WAYLAND_SYM(uint32_t, xkb_keymap_mod_get_index, (struct xkb_keymap *, |
160 | const char *) ) |
161 | SDL_WAYLAND_SYM(const char *, xkb_keymap_layout_get_name, (struct xkb_keymap*, xkb_layout_index_t)) |
162 | |
163 | #ifdef HAVE_LIBDECOR_H |
164 | SDL_WAYLAND_MODULE(WAYLAND_LIBDECOR) |
165 | SDL_WAYLAND_SYM(void, libdecor_unref, (struct libdecor *)) |
166 | SDL_WAYLAND_SYM(struct libdecor *, libdecor_new, (struct wl_display *, struct libdecor_interface *)) |
167 | SDL_WAYLAND_SYM(struct libdecor_frame *, libdecor_decorate, (struct libdecor *,\ |
168 | struct wl_surface *,\ |
169 | struct libdecor_frame_interface *,\ |
170 | void *)) |
171 | SDL_WAYLAND_SYM(void, libdecor_frame_unref, (struct libdecor_frame *)) |
172 | SDL_WAYLAND_SYM(void, libdecor_frame_set_title, (struct libdecor_frame *, const char *)) |
173 | SDL_WAYLAND_SYM(void, libdecor_frame_set_app_id, (struct libdecor_frame *, const char *)) |
174 | SDL_WAYLAND_SYM(void, libdecor_frame_set_max_content_size, (struct libdecor_frame *frame,\ |
175 | int content_width,\ |
176 | int content_height)) |
177 | SDL_WAYLAND_SYM(void, libdecor_frame_set_min_content_size, (struct libdecor_frame *frame,\ |
178 | int content_width,\ |
179 | int content_height)) |
180 | SDL_WAYLAND_SYM(void, libdecor_frame_resize, (struct libdecor_frame *,\ |
181 | struct wl_seat *,\ |
182 | uint32_t,\ |
183 | enum libdecor_resize_edge)) |
184 | SDL_WAYLAND_SYM(void, libdecor_frame_move, (struct libdecor_frame *,\ |
185 | struct wl_seat *,\ |
186 | uint32_t)) |
187 | SDL_WAYLAND_SYM(void, libdecor_frame_commit, (struct libdecor_frame *,\ |
188 | struct libdecor_state *,\ |
189 | struct libdecor_configuration *)) |
190 | SDL_WAYLAND_SYM(void, libdecor_frame_set_minimized, (struct libdecor_frame *)) |
191 | SDL_WAYLAND_SYM(void, libdecor_frame_set_maximized, (struct libdecor_frame *)) |
192 | SDL_WAYLAND_SYM(void, libdecor_frame_unset_maximized, (struct libdecor_frame *)) |
193 | SDL_WAYLAND_SYM(void, libdecor_frame_set_fullscreen, (struct libdecor_frame *, struct wl_output *)) |
194 | SDL_WAYLAND_SYM(void, libdecor_frame_unset_fullscreen, (struct libdecor_frame *)) |
195 | SDL_WAYLAND_SYM(void, libdecor_frame_set_capabilities, (struct libdecor_frame *, \ |
196 | enum libdecor_capabilities)) |
197 | SDL_WAYLAND_SYM(void, libdecor_frame_unset_capabilities, (struct libdecor_frame *, \ |
198 | enum libdecor_capabilities)) |
199 | SDL_WAYLAND_SYM(bool, libdecor_frame_has_capability, (struct libdecor_frame *, \ |
200 | enum libdecor_capabilities)) |
201 | SDL_WAYLAND_SYM(void, libdecor_frame_set_visibility, (struct libdecor_frame *, bool)) |
202 | SDL_WAYLAND_SYM(bool, libdecor_frame_is_visible, (struct libdecor_frame *)) |
203 | SDL_WAYLAND_SYM(bool, libdecor_frame_is_floating, (struct libdecor_frame *)) |
204 | SDL_WAYLAND_SYM(void, libdecor_frame_set_parent, (struct libdecor_frame *,\ |
205 | struct libdecor_frame *)) |
206 | SDL_WAYLAND_SYM(void, libdecor_frame_show_window_menu, (struct libdecor_frame *, struct wl_seat *, uint32_t, int, int)) |
207 | SDL_WAYLAND_SYM(struct xdg_surface *, libdecor_frame_get_xdg_surface, (struct libdecor_frame *)) |
208 | SDL_WAYLAND_SYM(struct xdg_toplevel *, libdecor_frame_get_xdg_toplevel, (struct libdecor_frame *)) |
209 | SDL_WAYLAND_SYM(void, libdecor_frame_translate_coordinate, (struct libdecor_frame *, int, int, int *, int *)) |
210 | SDL_WAYLAND_SYM(void, libdecor_frame_map, (struct libdecor_frame *)) |
211 | SDL_WAYLAND_SYM(struct libdecor_state *, libdecor_state_new, (int, int)) |
212 | SDL_WAYLAND_SYM(void, libdecor_state_free, (struct libdecor_state *)) |
213 | SDL_WAYLAND_SYM(bool, libdecor_configuration_get_content_size, (struct libdecor_configuration *,\ |
214 | struct libdecor_frame *,\ |
215 | int *,\ |
216 | int *)) |
217 | SDL_WAYLAND_SYM(bool, libdecor_configuration_get_window_state, (struct libdecor_configuration *,\ |
218 | enum libdecor_window_state *)) |
219 | SDL_WAYLAND_SYM(int, libdecor_dispatch, (struct libdecor *, int)) |
220 | |
221 | #if defined(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR) || SDL_LIBDECOR_CHECK_VERSION(0, 2, 0) |
222 | // Only found in libdecor 0.1.1 or higher, so failure to load them is not fatal. |
223 | SDL_WAYLAND_SYM_OPT(void, libdecor_frame_get_min_content_size, (const struct libdecor_frame *,\ |
224 | int *,\ |
225 | int *)) |
226 | SDL_WAYLAND_SYM_OPT(void, libdecor_frame_get_max_content_size, (const struct libdecor_frame *,\ |
227 | int *,\ |
228 | int *)) |
229 | #endif |
230 | |
231 | #if defined(SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR) || SDL_LIBDECOR_CHECK_VERSION(0, 3, 0) |
232 | SDL_WAYLAND_SYM_OPT(enum libdecor_wm_capabilities, libdecor_frame_get_wm_capabilities, (struct libdecor_frame *)) |
233 | #endif |
234 | |
235 | #endif |
236 | |
237 | #undef SDL_WAYLAND_MODULE |
238 | #undef SDL_WAYLAND_SYM |
239 | #undef SDL_WAYLAND_SYM_OPT |
240 | #undef SDL_WAYLAND_INTERFACE |
241 | |
242 | /* *INDENT-ON* */ // clang-format on |
243 | |