Don't load libdecor if SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR is false

Fixes https://github.com/libsdl-org/SDL/issues/14887
This commit is contained in:
Sam Lantinga
2026-01-23 10:55:17 -08:00
parent 79b40ad397
commit fe403220f0
2 changed files with 12 additions and 10 deletions
+12 -6
View File
@@ -71,23 +71,25 @@ typedef struct
{ {
SDL_SharedObject *lib; SDL_SharedObject *lib;
const char *libname; const char *libname;
const char *hint;
bool hint_default;
} waylanddynlib; } waylanddynlib;
static waylanddynlib waylandlibs[] = { static waylanddynlib waylandlibs[] = {
{ NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC }, { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC, NULL, false },
#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL
{ NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL }, { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL, NULL, false },
#endif #endif
#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR
{ NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR }, { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR, NULL, false },
#endif #endif
#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON
{ NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON }, { NULL, SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON, NULL, false },
#endif #endif
#ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR #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 #endif
{ NULL, NULL } { NULL, NULL, NULL, false }
}; };
static void *WAYLAND_GetSym(const char *fnname, int *pHasModule, bool required) static void *WAYLAND_GetSym(const char *fnname, int *pHasModule, bool required)
@@ -173,6 +175,10 @@ bool SDL_WAYLAND_LoadSymbols(void)
int *thismod = NULL; int *thismod = NULL;
for (i = 0; i < SDL_arraysize(waylandlibs); i++) { for (i = 0; i < SDL_arraysize(waylandlibs); i++) {
if (waylandlibs[i].libname) { 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); waylandlibs[i].lib = SDL_LoadObject(waylandlibs[i].libname);
} }
} }
-4
View File
@@ -1397,10 +1397,6 @@ static bool should_use_libdecor(SDL_VideoData *data, bool ignore_xdg)
return false; return false;
} }
if (!SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR, true)) {
return false;
}
if (SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR, false)) { if (SDL_GetHintBoolean(SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR, false)) {
return true; return true;
} }