From 1d5d948ccf2b02cad806c56395cdc36c00f24599 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Sun, 8 Dec 2024 15:31:19 +0100 Subject: [PATCH] Fix building SDL3 without dialog support --- CMakeLists.txt | 2 +- include/build_config/SDL_build_config.h.cmake | 13 ++++---- src/dialog/SDL_dialog.c | 30 ++++++++++++++++++- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d60fca5ef2..9db20705f4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2872,9 +2872,9 @@ elseif(N3DS) sdl_glob_sources("${SDL3_SOURCE_DIR}/src/file/n3ds/*.c") endif() +sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog.c) if (SDL_DIALOG) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog_utils.c) - sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/SDL_dialog.c) if(ANDROID) sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/android/SDL_androiddialog.c) set(HAVE_SDL_DIALOG TRUE) diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake index 2a5bdf1035..561836a998 100644 --- a/include/build_config/SDL_build_config.h.cmake +++ b/include/build_config/SDL_build_config.h.cmake @@ -257,16 +257,17 @@ /* Allow disabling of major subsystems */ #cmakedefine SDL_AUDIO_DISABLED @SDL_AUDIO_DISABLED@ +#cmakedefine SDL_VIDEO_DISABLED @SDL_VIDEO_DISABLED@ +#cmakedefine SDL_GPU_DISABLED @SDL_GPU_DISABLED@ +#cmakedefine SDL_RENDER_DISABLED @SDL_RENDER_DISABLED@ +#cmakedefine SDL_CAMERA_DISABLED @SDL_CAMERA_DISABLED@ #cmakedefine SDL_JOYSTICK_DISABLED @SDL_JOYSTICK_DISABLED@ #cmakedefine SDL_HAPTIC_DISABLED @SDL_HAPTIC_DISABLED@ #cmakedefine SDL_HIDAPI_DISABLED @SDL_HIDAPI_DISABLED@ -#cmakedefine SDL_SENSOR_DISABLED @SDL_SENSOR_DISABLED@ -#cmakedefine SDL_RENDER_DISABLED @SDL_RENDER_DISABLED@ -#cmakedefine SDL_THREADS_DISABLED @SDL_THREADS_DISABLED@ -#cmakedefine SDL_VIDEO_DISABLED @SDL_VIDEO_DISABLED@ #cmakedefine SDL_POWER_DISABLED @SDL_POWER_DISABLED@ -#cmakedefine SDL_CAMERA_DISABLED @SDL_CAMERA_DISABLED@ -#cmakedefine SDL_GPU_DISABLED @SDL_GPU_DISABLED@ +#cmakedefine SDL_SENSOR_DISABLED @SDL_SENSOR_DISABLED@ +#cmakedefine SDL_DIALOG_DISABLED @SDL_DIALOG_DISABLED@ +#cmakedefine SDL_THREADS_DISABLED @SDL_THREADS_DISABLED@ /* Enable various audio drivers */ #cmakedefine SDL_AUDIO_DRIVER_ALSA @SDL_AUDIO_DRIVER_ALSA@ diff --git a/src/dialog/SDL_dialog.c b/src/dialog/SDL_dialog.c index 938666b210..4831362ba3 100644 --- a/src/dialog/SDL_dialog.c +++ b/src/dialog/SDL_dialog.c @@ -28,7 +28,10 @@ void SDL_ShowFileDialogWithProperties(SDL_FileDialogType type, SDL_DialogFileCal if (!callback) { return; } - +#ifdef SDL_DIALOG_DISABLED + SDL_SetError("SDL not built with dialog support"); + callback(userdata, NULL, -1); +#else SDL_DialogFileFilter *filters = SDL_GetPointerProperty(props, SDL_PROP_FILE_DIALOG_FILTERS_POINTER, NULL); int nfilters = (int) SDL_GetNumberProperty(props, SDL_PROP_FILE_DIALOG_NFILTERS_NUMBER, -1); @@ -58,10 +61,18 @@ void SDL_ShowFileDialogWithProperties(SDL_FileDialogType type, SDL_DialogFileCal callback(userdata, NULL, -1); break; }; +#endif } void SDL_ShowOpenFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location, bool allow_many) { +#ifdef SDL_DIALOG_DISABLED + if (!callback) { + return; + } + SDL_SetError("SDL not built with dialog support"); + callback(userdata, NULL, -1); +#else SDL_PropertiesID props = SDL_CreateProperties(); SDL_SetPointerProperty(props, SDL_PROP_FILE_DIALOG_FILTERS_POINTER, (void *) filters); @@ -73,10 +84,18 @@ void SDL_ShowOpenFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL SDL_ShowFileDialogWithProperties(SDL_FILEDIALOG_OPENFILE, callback, userdata, props); SDL_DestroyProperties(props); +#endif } void SDL_ShowSaveFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location) { +#ifdef SDL_DIALOG_DISABLED + if (!callback) { + return; + } + SDL_SetError("SDL not built with dialog support"); + callback(userdata, NULL, -1); +#else SDL_PropertiesID props = SDL_CreateProperties(); SDL_SetPointerProperty(props, SDL_PROP_FILE_DIALOG_FILTERS_POINTER, (void *) filters); @@ -87,10 +106,18 @@ void SDL_ShowSaveFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL SDL_ShowFileDialogWithProperties(SDL_FILEDIALOG_SAVEFILE, callback, userdata, props); SDL_DestroyProperties(props); +#endif } void SDL_ShowOpenFolderDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const char *default_location, bool allow_many) { +#ifdef SDL_DIALOG_DISABLED + if (!callback) { + return; + } + SDL_SetError("SDL not built with dialog support"); + callback(userdata, NULL, -1); +#else SDL_PropertiesID props = SDL_CreateProperties(); SDL_SetPointerProperty(props, SDL_PROP_FILE_DIALOG_WINDOW_POINTER, window); @@ -100,4 +127,5 @@ void SDL_ShowOpenFolderDialog(SDL_DialogFileCallback callback, void *userdata, S SDL_ShowFileDialogWithProperties(SDL_FILEDIALOG_OPENFOLDER, callback, userdata, props); SDL_DestroyProperties(props); +#endif }