annotate SDL3/SDL_dialog.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 * # CategoryDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 * File dialog support.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 * SDL offers file dialogs, to let users select files with native GUI
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * interfaces. There are "open" dialogs, "save" dialogs, and folder selection
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 * dialogs. The app can control some details, such as filtering to specific
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 * files, or whether multiple files can be selected by the user.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 * Note that launching a file dialog is a non-blocking operation; control
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 * returns to the app immediately, and a callback is called later (possibly in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 * another thread) when the user makes a choice.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 #ifndef SDL_dialog_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #define SDL_dialog_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 #include <SDL3/SDL_error.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 #include <SDL3/SDL_properties.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 #include <SDL3/SDL_video.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 /* Set up for C function definitions, even when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 * An entry for filters for file dialogs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 * `name` is a user-readable label for the filter (for example, "Office
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 * document").
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 * `pattern` is a semicolon-separated list of file extensions (for example,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 * "doc;docx"). File extensions may only contain alphanumeric characters,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 * hyphens, underscores and periods. Alternatively, the whole string can be a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 * single asterisk ("*"), which serves as an "All files" filter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 * \since This struct is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 * \sa SDL_DialogFileCallback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 * \sa SDL_ShowOpenFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 * \sa SDL_ShowSaveFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 * \sa SDL_ShowOpenFolderDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 typedef struct SDL_DialogFileFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 const char *name;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 const char *pattern;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 } SDL_DialogFileFilter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 * Callback used by file dialog functions.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 * The specific usage is described in each function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 * If `filelist` is:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 * - NULL, an error occurred. Details can be obtained with SDL_GetError().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 * - A pointer to NULL, the user either didn't choose any file or canceled the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 * dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 * - A pointer to non-`NULL`, the user chose one or more files. The argument
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 * is a null-terminated array of pointers to UTF-8 encoded strings, each
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 * containing a path.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 * The filelist argument should not be freed; it will automatically be freed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 * when the callback returns.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 * The filter argument is the index of the filter that was selected, or -1 if
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 * no filter was selected or if the platform or method doesn't support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 * fetching the selected filter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 * In Android, the `filelist` are `content://` URIs. They should be opened
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 * using SDL_IOFromFile() with appropriate modes. This applies both to open
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 * and save file dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 * \param userdata an app-provided pointer, for the callback's use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 * \param filelist the file(s) chosen by the user.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 * \param filter index of the selected filter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 * \sa SDL_DialogFileFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 * \sa SDL_ShowOpenFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 * \sa SDL_ShowSaveFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 * \sa SDL_ShowOpenFolderDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 typedef void (SDLCALL *SDL_DialogFileCallback)(void *userdata, const char * const *filelist, int filter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 * Displays a dialog that lets the user select a file on their filesystem.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 * This is an asynchronous function; it will return immediately, and the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 * result will be passed to the callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 * The callback will be invoked with a null-terminated list of files the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 * chose. The list will be empty if the user canceled the dialog, and it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 * be NULL if an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 * Note that the callback may be called from a different thread than the one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 * the function was invoked on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 * Depending on the platform, the user may be allowed to input paths that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 * don't yet exist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 * On Linux, dialogs may require XDG Portals, which requires DBus, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 * requires an event-handling loop. Apps that do not use SDL to handle events
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 * should add a call to SDL_PumpEvents in their main loop.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 * \param callback a function pointer to be invoked when the user selects a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 * file and accepts, or cancels the dialog, or an error
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 * occurs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 * \param userdata an optional pointer to pass extra data to the callback when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 * it will be invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 * \param window the window that the dialog should be modal for, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 * Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 * \param filters a list of filters, may be NULL. See the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 * [`SDL_DialogFileFilter`](SDL_DialogFileFilter#code-examples)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 * documentation for examples]. Not all platforms support this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 * option, and platforms that do support it may allow the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 * to ignore the filters. If non-NULL, it must remain valid at
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 * least until the callback is invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 * \param nfilters the number of filters. Ignored if filters is NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 * \param default_location the default folder or file to start the dialog at,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 * may be NULL. Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 * \param allow_many if non-zero, the user will be allowed to select multiple
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 * entries. Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 * \threadsafety This function should be called only from the main thread. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 * callback may be invoked from the same thread or from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 * different one, depending on the OS's constraints.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 * \sa SDL_DialogFileCallback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 * \sa SDL_DialogFileFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 * \sa SDL_ShowSaveFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 * \sa SDL_ShowOpenFolderDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 extern SDL_DECLSPEC void SDLCALL SDL_ShowOpenFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location, bool allow_many);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 * Displays a dialog that lets the user choose a new or existing file on their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 * filesystem.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 * This is an asynchronous function; it will return immediately, and the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 * result will be passed to the callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 * The callback will be invoked with a null-terminated list of files the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 * chose. The list will be empty if the user canceled the dialog, and it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 * be NULL if an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 * Note that the callback may be called from a different thread than the one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 * the function was invoked on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 * The chosen file may or may not already exist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 * On Linux, dialogs may require XDG Portals, which requires DBus, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 * requires an event-handling loop. Apps that do not use SDL to handle events
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 * should add a call to SDL_PumpEvents in their main loop.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 * \param callback a function pointer to be invoked when the user selects a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 * file and accepts, or cancels the dialog, or an error
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 * occurs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 * \param userdata an optional pointer to pass extra data to the callback when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 * it will be invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 * \param window the window that the dialog should be modal for, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 * Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 * \param filters a list of filters, may be NULL. Not all platforms support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 * this option, and platforms that do support it may allow the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 * user to ignore the filters. If non-NULL, it must remain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 * valid at least until the callback is invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 * \param nfilters the number of filters. Ignored if filters is NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 * \param default_location the default folder or file to start the dialog at,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 * may be NULL. Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 * \threadsafety This function should be called only from the main thread. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 * callback may be invoked from the same thread or from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 * different one, depending on the OS's constraints.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 * \sa SDL_DialogFileCallback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 * \sa SDL_DialogFileFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 * \sa SDL_ShowOpenFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 * \sa SDL_ShowOpenFolderDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 extern SDL_DECLSPEC void SDLCALL SDL_ShowSaveFileDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const SDL_DialogFileFilter *filters, int nfilters, const char *default_location);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 * Displays a dialog that lets the user select a folder on their filesystem.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 * This is an asynchronous function; it will return immediately, and the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 * result will be passed to the callback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 * The callback will be invoked with a null-terminated list of files the user
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 * chose. The list will be empty if the user canceled the dialog, and it will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 * be NULL if an error occurred.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 * Note that the callback may be called from a different thread than the one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 * the function was invoked on.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 * Depending on the platform, the user may be allowed to input paths that
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 * don't yet exist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 * On Linux, dialogs may require XDG Portals, which requires DBus, which
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 * requires an event-handling loop. Apps that do not use SDL to handle events
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 * should add a call to SDL_PumpEvents in their main loop.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 * \param callback a function pointer to be invoked when the user selects a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 * file and accepts, or cancels the dialog, or an error
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 * occurs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 * \param userdata an optional pointer to pass extra data to the callback when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 * it will be invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 * \param window the window that the dialog should be modal for, may be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 * Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 * \param default_location the default folder or file to start the dialog at,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 * may be NULL. Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 * \param allow_many if non-zero, the user will be allowed to select multiple
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 * entries. Not all platforms support this option.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 * \threadsafety This function should be called only from the main thread. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 * callback may be invoked from the same thread or from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 * different one, depending on the OS's constraints.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 * \sa SDL_DialogFileCallback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 * \sa SDL_ShowOpenFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 * \sa SDL_ShowSaveFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 extern SDL_DECLSPEC void SDLCALL SDL_ShowOpenFolderDialog(SDL_DialogFileCallback callback, void *userdata, SDL_Window *window, const char *default_location, bool allow_many);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 * Various types of file dialogs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 * This is used by SDL_ShowFileDialogWithProperties() to decide what kind of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 * dialog to present to the user.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 * \since This enum is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 * \sa SDL_ShowFileDialogWithProperties
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 typedef enum SDL_FileDialogType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 SDL_FILEDIALOG_OPENFILE,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 SDL_FILEDIALOG_SAVEFILE,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 SDL_FILEDIALOG_OPENFOLDER
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 } SDL_FileDialogType;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 * Create and launch a file dialog with the specified properties.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 * These are the supported properties:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 * - `SDL_PROP_FILE_DIALOG_FILTERS_POINTER`: a pointer to a list of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 * SDL_DialogFileFilter structs, which will be used as filters for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 * file-based selections. Ignored if the dialog is an "Open Folder" dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 * If non-NULL, the array of filters must remain valid at least until the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 * callback is invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 * - `SDL_PROP_FILE_DIALOG_NFILTERS_NUMBER`: the number of filters in the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 * array of filters, if it exists.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 * - `SDL_PROP_FILE_DIALOG_WINDOW_POINTER`: the window that the dialog should
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 * be modal for.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 * - `SDL_PROP_FILE_DIALOG_LOCATION_STRING`: the default folder or file to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 * start the dialog at.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 * - `SDL_PROP_FILE_DIALOG_MANY_BOOLEAN`: true to allow the user to select
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 * more than one entry.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 * - `SDL_PROP_FILE_DIALOG_TITLE_STRING`: the title for the dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 * - `SDL_PROP_FILE_DIALOG_ACCEPT_STRING`: the label that the accept button
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 * should have.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 * - `SDL_PROP_FILE_DIALOG_CANCEL_STRING`: the label that the cancel button
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 * should have.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 * Note that each platform may or may not support any of the properties.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 * \param type the type of file dialog.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 * \param callback a function pointer to be invoked when the user selects a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 * file and accepts, or cancels the dialog, or an error
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 * occurs.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 * \param userdata an optional pointer to pass extra data to the callback when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 * it will be invoked.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 * \param props the properties to use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 * \threadsafety This function should be called only from the main thread. The
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 * callback may be invoked from the same thread or from a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 * different one, depending on the OS's constraints.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 * \sa SDL_FileDialogType
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 * \sa SDL_DialogFileCallback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 * \sa SDL_DialogFileFilter
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 * \sa SDL_ShowOpenFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 * \sa SDL_ShowSaveFileDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 * \sa SDL_ShowOpenFolderDialog
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 extern SDL_DECLSPEC void SDLCALL SDL_ShowFileDialogWithProperties(SDL_FileDialogType type, SDL_DialogFileCallback callback, void *userdata, SDL_PropertiesID props);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 #define SDL_PROP_FILE_DIALOG_FILTERS_POINTER "SDL.filedialog.filters"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 #define SDL_PROP_FILE_DIALOG_NFILTERS_NUMBER "SDL.filedialog.nfilters"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 #define SDL_PROP_FILE_DIALOG_WINDOW_POINTER "SDL.filedialog.window"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 #define SDL_PROP_FILE_DIALOG_LOCATION_STRING "SDL.filedialog.location"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 #define SDL_PROP_FILE_DIALOG_MANY_BOOLEAN "SDL.filedialog.many"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 #define SDL_PROP_FILE_DIALOG_TITLE_STRING "SDL.filedialog.title"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 #define SDL_PROP_FILE_DIALOG_ACCEPT_STRING "SDL.filedialog.accept"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 #define SDL_PROP_FILE_DIALOG_CANCEL_STRING "SDL.filedialog.cancel"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 /* Ends C function definitions when using C++ */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 #endif /* SDL_dialog_h_ */