mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-05-24 21:49:10 +00:00
Added SDL_GetWindows()
This commit is contained in:
parent
2c745dbd3c
commit
0ff5c05486
6 changed files with 64 additions and 3 deletions
|
@ -384,7 +384,7 @@ extern SDL_DECLSPEC SDL_SystemTheme SDLCALL SDL_GetSystemTheme(void);
|
||||||
/**
|
/**
|
||||||
* Get a list of currently connected displays.
|
* Get a list of currently connected displays.
|
||||||
*
|
*
|
||||||
* \param count a pointer filled in with the number of displays returned.
|
* \param count a pointer filled in with the number of displays returned, may be NULL.
|
||||||
* \returns a 0 terminated array of display instance IDs which should be freed
|
* \returns a 0 terminated array of display instance IDs which should be freed
|
||||||
* with SDL_free(), or NULL on error; call SDL_GetError() for more
|
* with SDL_free(), or NULL on error; call SDL_GetError() for more
|
||||||
* details.
|
* details.
|
||||||
|
@ -783,6 +783,18 @@ extern SDL_DECLSPEC void *SDLCALL SDL_GetWindowICCProfile(SDL_Window *window, si
|
||||||
*/
|
*/
|
||||||
extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window *window);
|
extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window *window);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of valid windows.
|
||||||
|
*
|
||||||
|
* \param count a pointer filled in with the number of windows returned, may be NULL.
|
||||||
|
* \returns a 0 terminated array of window pointers which should be freed
|
||||||
|
* with SDL_free(), or NULL on error; call SDL_GetError() for more
|
||||||
|
* details.
|
||||||
|
*
|
||||||
|
* \since This function is available since SDL 3.0.0.
|
||||||
|
*/
|
||||||
|
extern SDL_DECLSPEC SDL_Window **SDLCALL SDL_GetWindows(int *count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a window with the specified dimensions and flags.
|
* Create a window with the specified dimensions and flags.
|
||||||
*
|
*
|
||||||
|
|
|
@ -480,6 +480,7 @@ SDL3_0.0.0 {
|
||||||
SDL_GetWindowSurface;
|
SDL_GetWindowSurface;
|
||||||
SDL_GetWindowSurfaceVSync;
|
SDL_GetWindowSurfaceVSync;
|
||||||
SDL_GetWindowTitle;
|
SDL_GetWindowTitle;
|
||||||
|
SDL_GetWindows;
|
||||||
SDL_GlobDirectory;
|
SDL_GlobDirectory;
|
||||||
SDL_GlobStorageDirectory;
|
SDL_GlobStorageDirectory;
|
||||||
SDL_HapticEffectSupported;
|
SDL_HapticEffectSupported;
|
||||||
|
|
|
@ -505,6 +505,7 @@
|
||||||
#define SDL_GetWindowSurface SDL_GetWindowSurface_REAL
|
#define SDL_GetWindowSurface SDL_GetWindowSurface_REAL
|
||||||
#define SDL_GetWindowSurfaceVSync SDL_GetWindowSurfaceVSync_REAL
|
#define SDL_GetWindowSurfaceVSync SDL_GetWindowSurfaceVSync_REAL
|
||||||
#define SDL_GetWindowTitle SDL_GetWindowTitle_REAL
|
#define SDL_GetWindowTitle SDL_GetWindowTitle_REAL
|
||||||
|
#define SDL_GetWindows SDL_GetWindows_REAL
|
||||||
#define SDL_GlobDirectory SDL_GlobDirectory_REAL
|
#define SDL_GlobDirectory SDL_GlobDirectory_REAL
|
||||||
#define SDL_GlobStorageDirectory SDL_GlobStorageDirectory_REAL
|
#define SDL_GlobStorageDirectory SDL_GlobStorageDirectory_REAL
|
||||||
#define SDL_HapticEffectSupported SDL_HapticEffectSupported_REAL
|
#define SDL_HapticEffectSupported SDL_HapticEffectSupported_REAL
|
||||||
|
|
|
@ -525,6 +525,7 @@ SDL_DYNAPI_PROC(int,SDL_GetWindowSizeInPixels,(SDL_Window *a, int *b, int *c),(a
|
||||||
SDL_DYNAPI_PROC(SDL_Surface*,SDL_GetWindowSurface,(SDL_Window *a),(a),return)
|
SDL_DYNAPI_PROC(SDL_Surface*,SDL_GetWindowSurface,(SDL_Window *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(int,SDL_GetWindowSurfaceVSync,(SDL_Window *a, int *b),(a,b),return)
|
SDL_DYNAPI_PROC(int,SDL_GetWindowSurfaceVSync,(SDL_Window *a, int *b),(a,b),return)
|
||||||
SDL_DYNAPI_PROC(const char*,SDL_GetWindowTitle,(SDL_Window *a),(a),return)
|
SDL_DYNAPI_PROC(const char*,SDL_GetWindowTitle,(SDL_Window *a),(a),return)
|
||||||
|
SDL_DYNAPI_PROC(SDL_Window**,SDL_GetWindows,(int *a),(a),return)
|
||||||
SDL_DYNAPI_PROC(char**,SDL_GlobDirectory,(const char *a, const char *b, SDL_GlobFlags c, int *d),(a,b,c,d),return)
|
SDL_DYNAPI_PROC(char**,SDL_GlobDirectory,(const char *a, const char *b, SDL_GlobFlags c, int *d),(a,b,c,d),return)
|
||||||
SDL_DYNAPI_PROC(char**,SDL_GlobStorageDirectory,(SDL_Storage *a, const char *b, const char *c, SDL_GlobFlags d, int *e),(a,b,c,d,e),return)
|
SDL_DYNAPI_PROC(char**,SDL_GlobStorageDirectory,(SDL_Storage *a, const char *b, const char *c, SDL_GlobFlags d, int *e),(a,b,c,d,e),return)
|
||||||
SDL_DYNAPI_PROC(SDL_bool,SDL_HapticEffectSupported,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return)
|
SDL_DYNAPI_PROC(SDL_bool,SDL_HapticEffectSupported,(SDL_Haptic *a, const SDL_HapticEffect *b),(a,b),return)
|
||||||
|
|
|
@ -1999,6 +1999,44 @@ void SDL_ToggleDragAndDropSupport(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_Window **SDLCALL SDL_GetWindows(int *count)
|
||||||
|
{
|
||||||
|
if (count) {
|
||||||
|
*count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_this) {
|
||||||
|
SDL_UninitializedVideo();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Window *window;
|
||||||
|
int num_added = 0;
|
||||||
|
int num_windows = 0;
|
||||||
|
for (window = _this->windows; window; window = window->next) {
|
||||||
|
++num_windows;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Window **windows = SDL_malloc((num_windows + 1) * sizeof(*windows));
|
||||||
|
if (!windows) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (window = _this->windows; window; window = window->next) {
|
||||||
|
windows[num_added++] = window;
|
||||||
|
if (num_added == num_windows) {
|
||||||
|
// Race condition? Multi-threading not supported, ignore it
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
windows[num_added] = NULL;
|
||||||
|
|
||||||
|
if (count) {
|
||||||
|
*count = num_added;
|
||||||
|
}
|
||||||
|
return windows;
|
||||||
|
}
|
||||||
|
|
||||||
static void ApplyWindowFlags(SDL_Window *window, SDL_WindowFlags flags)
|
static void ApplyWindowFlags(SDL_Window *window, SDL_WindowFlags flags)
|
||||||
{
|
{
|
||||||
if (!SDL_WINDOW_IS_POPUP(window)) {
|
if (!SDL_WINDOW_IS_POPUP(window)) {
|
||||||
|
@ -3955,7 +3993,7 @@ SDL_bool SDL_ScreenSaverEnabled(void)
|
||||||
int SDL_EnableScreenSaver(void)
|
int SDL_EnableScreenSaver(void)
|
||||||
{
|
{
|
||||||
if (!_this) {
|
if (!_this) {
|
||||||
return 0;
|
return SDL_UninitializedVideo();
|
||||||
}
|
}
|
||||||
if (!_this->suspend_screensaver) {
|
if (!_this->suspend_screensaver) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -3971,7 +4009,7 @@ int SDL_EnableScreenSaver(void)
|
||||||
int SDL_DisableScreenSaver(void)
|
int SDL_DisableScreenSaver(void)
|
||||||
{
|
{
|
||||||
if (!_this) {
|
if (!_this) {
|
||||||
return 0;
|
return SDL_UninitializedVideo();
|
||||||
}
|
}
|
||||||
if (_this->suspend_screensaver) {
|
if (_this->suspend_screensaver) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
static SDL_Window *createVideoSuiteTestWindow(const char *title)
|
static SDL_Window *createVideoSuiteTestWindow(const char *title)
|
||||||
{
|
{
|
||||||
SDL_Window *window;
|
SDL_Window *window;
|
||||||
|
SDL_Window **windows;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
int count;
|
||||||
SDL_WindowFlags flags;
|
SDL_WindowFlags flags;
|
||||||
SDL_bool needs_renderer = SDL_FALSE;
|
SDL_bool needs_renderer = SDL_FALSE;
|
||||||
SDL_bool needs_events_pumped = SDL_FALSE;
|
SDL_bool needs_events_pumped = SDL_FALSE;
|
||||||
|
@ -28,6 +30,12 @@ static SDL_Window *createVideoSuiteTestWindow(const char *title)
|
||||||
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%" SDL_PRIu64 ")", w, h, flags);
|
SDLTest_AssertPass("Call to SDL_CreateWindow('Title',%d,%d,%" SDL_PRIu64 ")", w, h, flags);
|
||||||
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
|
SDLTest_AssertCheck(window != NULL, "Validate that returned window struct is not NULL");
|
||||||
|
|
||||||
|
/* Check the window is available in the window list */
|
||||||
|
windows = SDL_GetWindows(&count);
|
||||||
|
SDLTest_AssertCheck(windows != NULL, "Validate that returned window list is not NULL");
|
||||||
|
SDLTest_AssertCheck(windows[0] == window, "Validate that the window is first in the window list");
|
||||||
|
SDL_free(windows);
|
||||||
|
|
||||||
/* Wayland and XWayland windows require that a frame be presented before they are fully mapped and visible onscreen.
|
/* Wayland and XWayland windows require that a frame be presented before they are fully mapped and visible onscreen.
|
||||||
* This is required for the mouse/keyboard grab tests to pass.
|
* This is required for the mouse/keyboard grab tests to pass.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue