From fe403220f06ed65cfc8993598049669b5eedf759 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 23 Jan 2026 10:55:17 -0800 Subject: [PATCH] Don't load libdecor if SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR is false Fixes https://github.com/libsdl-org/SDL/issues/14887 --- src/video/wayland/SDL_waylanddyn.c | 18 ++++++++++++------ src/video/wayland/SDL_waylandvideo.c | 4 ---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/video/wayland/SDL_waylanddyn.c b/src/video/wayland/SDL_waylanddyn.c index a32f1a09d4..f95404337a 100644 --- a/src/video/wayland/SDL_waylanddyn.c +++ b/src/video/wayland/SDL_waylanddyn.c @@ -71,23 +71,25 @@ typedef struct { SDL_SharedObject *lib; const char *libname; + const char *hint; + bool hint_default; } waylanddynlib; static waylanddynlib waylandlibs[] = { - { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC }, + { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC, NULL, false }, #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL - { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL }, + { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL, NULL, false }, #endif #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR - { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR }, + { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR, NULL, false }, #endif #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON - { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON }, + { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON, NULL, false }, #endif #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR - { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR }, + { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR, SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR, true }, #endif - { NULL, NULL } + { NULL, NULL, NULL, false } }; static void *WAYLAND_GetSym(const char *fnname, int *pHasModule, bool required) @@ -173,6 +175,10 @@ bool SDL_WAYLAND_LoadSymbols(void) int *thismod = NULL; for (i = 0; i < SDL_arraysize(waylandlibs); i++) { if (waylandlibs[i].libname) { + if (waylandlibs[i].hint && + !SDL_GetHintBoolean(waylandlibs[i].hint, waylandlibs[i].hint_default)) { + continue; + } waylandlibs[i].lib = SDL_LoadObject(waylandlibs[i].libname); } } diff --git a/src/video/wayland/SDL_waylandvideo.c b/src/video/wayland/SDL_waylandvideo.c index e7f41d8cf1..36ec2aca66 100644 --- a/src/video/wayland/SDL_waylandvideo.c +++ b/src/video/wayland/SDL_waylandvideo.c @@ -1397,10 +1397,6 @@ static bool should_use_libdecor(SDL_VideoData *data, bool ignore_xdg) return false; } - if (!SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR, true)) { - return false; - } - if (SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR, false)) { return true; }