| 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 | |