Commit graph

13411 commits

Author SHA1 Message Date
Eddy Jansson
3d354eeaad Prefer SDL_arraysize()
Replace uses of (sizeof(arr)/sizeof(arr[0]), and similar,
with the SDL_arraysize() macro.
2025-12-30 12:22:03 -08:00
Sam Lantinga
d33642b710 Filter libusb devices early in enumeration
Some device drivers crash if you query things like manufacturer and product name, so make sure we only touch devices that we're really interested in.
2025-12-30 10:52:56 -08:00
Frank Praznik
95ac0ff4d6
wayland: Center non-square icon images
Center icon images instead of scaling to preserve the aspect ratio.
2025-12-29 13:35:18 -05:00
MAJigsaw77
cb04dcd6f8 android: Add RGB LED support for joysticks. 2025-12-29 10:32:02 -08:00
Frank Praznik
4fcb92e0df wayland: Scale non-square icon images
Wayland icons must be square, so scale non-square images to fit a square region instead of failing. This matches X11 behavior.

A warning that the image will be scaled will be logged.
2025-12-29 12:56:42 -05:00
Sam Lantinga
d10fe8bf2f Added a Linux mapping for the Nacon GC100 controller (thanks @elkabyliano!) 2025-12-29 09:43:47 -08:00
Sam Lantinga
38345adff0 Don't set the active texture when creating a palette
Fixes https://github.com/libsdl-org/SDL/issues/14705
2025-12-29 09:36:13 -08:00
Simon McVittie
370e9407b5 wayland: If GTK is disabled, try to avoid libdecor's GTK plugin
As in the previous commit, loading GTK while setuid or setgid would
result in the process exiting. This is equally true if it's loaded
indirectly, for a libdecor plugin.

libdecor doesn't currently have any API by which it can be asked to
avoid specific plugins, but its GTK plugin declines to initialize if it
detects a non-main thread (because GTK documents that it must only be
used from the main thread), resulting in libdecor falling back to the
lower-priority Cairo plugin. We can make use of this by intentionally
initializing libdecor on another thread if we have been asked to avoid
GTK. This is a bit of a hack, but at worst it should be harmless.

Resolves: https://github.com/libsdl-org/sdl2-compat/issues/564
Signed-off-by: Simon McVittie <smcv@debian.org>
2025-12-28 10:19:33 -08:00
Simon McVittie
b6f4e10bf9 unix: If setuid or setgid, don't use GTK
GTK explicitly doesn't support being used setuid or setgid, and if SDL
loads and initializes GTK, GTK will exit the process if it
detects a setgid executable. This is incompatible with the historical
practice of making game executables setgid in order to write out a
shared high-score table on multi-user systems (which is security theatre
at best, because typical game runtime libraries are not hardened against
an untrusted caller, but making it regress would be a user-observable
regression in sdl2-compat).

Helps: https://github.com/libsdl-org/sdl2-compat/issues/564
Signed-off-by: Simon McVittie <smcv@debian.org>
2025-12-28 10:19:33 -08:00
Simon McVittie
9e0b31b297 unix: Factor out the check for GTK into an internal function
This will allow the same check to be done by the libdecor integration.

Helps: https://github.com/libsdl-org/sdl2-compat/issues/564
Signed-off-by: Simon McVittie <smcv@debian.org>
2025-12-28 10:19:33 -08:00
Frank Praznik
1fee2a9ae0
wayland: Remove redundant mouse button releases
Any pressed buttons are released in the loop when the pointer leaves a surface, so no need to release them again.
2025-12-28 12:42:09 -05:00
Sam Lantinga
9fe5c1512f Added support for extended buttons on Wayland
Fixes https://github.com/libsdl-org/SDL/issues/14681
2025-12-27 14:50:43 -08:00
anonymix007
89dd2426cf Add SDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER 2025-12-27 10:23:12 -08:00
Frank Praznik
8c54961de0
wayland: Send mouse coordinates after warping
Currently, no compositor that supports the warp protocol sends a motion event after doing so, so SDL must synthesize one when using the warp protocol, as it did with the locking protocol.

This can be avoided once
https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/340 is completed.
2025-12-26 17:22:42 -05:00
Anonymous Maarten
9dd3e2305e dlnote: embed trailing semicolon in SDL_ELF_NOTE_DLOPEN macro 2025-12-24 23:45:50 +03:00
Nintorch
5c03796ac7 Fix Emscripten joysticks having the same name 2025-12-24 07:19:10 -08:00
Nintorch
0f1a705fda Fix Emscripten joystick rumble being swapped 2025-12-24 07:18:07 -08:00
Edgar San Martin, Jr.
bd29d60d3c
GPU: Add bounds validation for slot bindings and uniform data pushes. (#14692) 2025-12-23 08:36:06 -08:00
Sam Lantinga
0b9946d7bf Fixed crash when using the NVIDIA Shield controller 2025-12-22 11:29:47 -08:00
Frank Praznik
9094395b13 wayland: Use the implicit grab serial when clearing the clipboard
Some compositors won't clear the selection without a valid serial.
2025-12-22 13:29:28 -05:00
999pingGG
5a257202d2 GPU: Better detection of surface destruction 2025-12-21 17:16:34 -08:00
Sam Lantinga
efc33633e3 Allow the offscreen and dummy drivers to be used as fallback 2025-12-21 16:18:07 -08:00
Frank Praznik
37fca1fdcf video: Unload GL/Vulkan when shutting down the video subsystem
If GL/Vulkan was loaded manually via a SDL_X_LoadLibrary() call instead of via window flags or through the GPU or renderer system, and there is no matching SDL_X_UnloadLibrary() call, the library instance won't be automatically unloaded while shutting down the video system, as the refcount won't go to zero, which can cause problems with some backends, and leaves a leaked DLL/SO handle when the global video object is destroyed.

Ensure that the libraries are unloaded after destroying the windows, but before shutting down the video backend, to prevent a leak and possible driver errors when shutting down the video backend.
2025-12-21 12:44:19 -05:00
Kaleb Reid
341f60555f Fix building joystick for OpenBSD 2025-12-21 07:58:41 -08:00
Sam Lantinga
0d705ca275 Use the aggregate upower device for power status when available 2025-12-19 17:42:33 -08:00
999pingGG
190b902fac
GPU: Fix Android surface and swapchain recreation on app resume (#14676) 2025-12-19 09:54:08 -08:00
Ryan C. Gordon
2c3657a0ce
egl: Patched to compile.
Yeehaw, cowboy committer!  🤦
2025-12-17 17:27:51 -05:00
Ryan C. Gordon
46df9ea92a
egl: Call SDL_EGL_SetSwapInterval during context creation, not the GL version.
The `GL` version returns early because the context isn't set yet, whereas the
`EGL` version works out here.

Fixes #14642.
2025-12-17 17:16:39 -05:00
Frank Praznik
235f417616 wayland: Update the HDR data on placeholder displays
Update the HDR data on a placeholder display if it hasn't been finalized and added yet, or the HDR data on the added display will be incorrect.
2025-12-17 15:12:27 -05:00
Sam Lantinga
63636c8403 Fixed warning: implicit conversion loses integer precision 2025-12-16 14:51:19 -08:00
Sam Lantinga
c7508ca2e9 Fixed warning: no previous prototype for function 'ParseDescriptor' 2025-12-16 14:51:19 -08:00
Sam Lantinga
d583fc88be Updated to version 3.3.7 for development 2025-12-16 09:38:05 -08:00
Sam Lantinga
ef0a604d44 Updated to version 3.3.6 for preview release 2025-12-16 08:54:04 -08:00
Sam Lantinga
aeb4b3d2fc Reverted Vita cliprect changes
Temporarily backing out cliprect changes which caused logical presentation regressions.

Fixes https://github.com/libsdl-org/SDL/issues/14645
Reopens https://github.com/libsdl-org/SDL/issues/13034
2025-12-16 08:47:45 -08:00
Frank Praznik
78d008fcd2 x11: Don't poll the map state when the window was unmapped and borders are toggled
An event flush while a window is being hidden may try to toggle the window borders. Don't poll the mapping state when toggling borders if the window is in the process of being hidden, or the window may already be unmapped, and the wait loop will hang forever.
2025-12-16 11:45:36 -05:00
Nuno Silva
d94cd1efad
GPU: Ensure Vulkan doesn't pass unsupported feature structures for requested vulkan version (#14662) 2025-12-15 17:57:49 -08:00
Edgar J San Martin
09a2283b53 Fix SDL_EnumerateDirectory(/) failing on POSIX and Windows. 2025-12-15 17:01:02 -08:00
Anonymous Maarten
6665ebaa2e SDL_test: allow disabling colorized output 2025-12-15 23:19:25 +01:00
Susko3
765a2e9118 Fix using wrong variable by mistake 2025-12-15 13:57:40 -08:00
Evan Hemsley
1260c10aab
GPU Vulkan: Only modify surface on window claim or release (#14659) 2025-12-15 12:54:16 -08:00
Jakub Wasilewski
73c9f25867 GPU: Metal: Rebind storage buffers when changing the pipeline moves them. 2025-12-15 11:45:29 -08:00
Frank Praznik
9092ddff3c
wayland: Update the color management protocol
No functional changes, just minor updates to track the latest upstream version.
2025-12-15 13:54:31 -05:00
Ryan C. Gordon
db84b948f9
egl: Default to a swap interval of 0.
This matches other platforms.

Also make sure Android explicitly sets vsync on restore, regardless of the
specific setting, to make sure it's consistent.

Fixes #14642.
2025-12-15 12:44:57 -05:00
Ryan C. Gordon
deb85d1fa8
emscripten: find the right SDL_Window during fullscreen events.
Fixes #14629.
2025-12-15 12:08:44 -05:00
Sam Lantinga
bcaedd5781 Fixed messageboxes when using window scenes on Apple platforms 2025-12-15 08:56:11 -08:00
Sam Lantinga
518c98ea01 Pass the window along with evdev touch events
Fixes https://github.com/libsdl-org/SDL/issues/14644
2025-12-15 08:29:36 -08:00
Sam Lantinga
517a3d20e8 Support calling SteamAPI_InitEx() before SDL_Init(SDL_INIT_GAMEPAD)
Calling SteamAPI_InitEx() will set environment variables that SDL uses to properly support the Steam virtual gamepad. Make sure that we fall back to the real environment for the variables that Steam sets.
2025-12-13 23:46:27 -08:00
Sam Lantinga
d780fa144a Don't create the SDL environment in SDL_setenv_unsafe()
We might be setting an environment variable along with other application code setting environment variables (like code in SteamAPI_InitEx()) before initializing SDL.
2025-12-13 21:28:05 -08:00
Frank Praznik
5fe69e73ba x11: Use XInput2 to handle pointer input while grabbed and touches are active
Core X11 events are used for absolute motion while the mouse is grabbed, as XInput doesn't receive motion events from the master pointer, and the position from the slave devices lags one report behind. However, pointer events emulated from multitouch events can't be filtered out when using core events, as the XInput flags are not passed through.

Use the absolute position from slave devices in XInput motion events while the mouse is grabbed and touch events are active to allow filtering out pointer events emulated from touch events. Pointer events in this case may be a report behind the master device, but receiving input from both the pointer and touches simultaneously is not likely to be a common occurrence.
2025-12-13 11:15:11 -05:00
Sam Lantinga
ec19f1e12f Use Uint32 instead of unsigned int for descriptor values 2025-12-12 13:02:39 -08:00