Remove redundant state variables, remove trivial helper functions, and guard against the unlikely case where a compositor may set the repeat rate to zero while a repeat is active, which would result in a divide-by-zero error.
Key repeat is increasingly handled server-side with seat v10 and above, so consider that the most common path for the future.
Third party wireless controllers use the full Switch Pro protocol over Bluetooth and third party wired controllers use the input-only protocol.
The PDP Afterglow Wave Controller for Switch uses the same VID/PID for both wired and wireless variants, so we need to look at the connection type to determine what protocol to use.
Try harder to keep a valid aspect ratio, considering the window size limits, and in cases where the window size limits prevent achieving the desired aspect ratio, the window size limits should win overall.
e.g.
SDL3/src/hidapi/libusb/hid.c:636:31: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
636 | static void start_event_thread()
Query the natively compiled-in subsystems at runtime so the Java side
only registers and initializes the managers that exist, fixing
UnsatisfiedLinkError when SDL is built with a subsystem disabled
(e.g. -DSDL_AUDIO_DISABLED).
- Add SDL.setupJNI(int subsystems) plus SDL_INIT_* Java constants;
SDLActivity passes an overridable getInitSubsystems() mask so custom
activities can skip Java-side setup for unused subsystems.
- Distinguish compiled from requested subsystems: JNI registration
follows nativeGetCompiledSubsystems(), while manager initialization
and surface/layout creation follow the requested-and-compiled mask.
- Gate HIDDeviceManager.acquire() (USB/BLE device scanning) on a new
nativeIsHIDAPIEnabled() query so HIDAPI-less builds never touch it.
- Gate SDLControllerManager.initializeDeviceListener() and the
joystick key-event path on the controller subsystem; gate the
clipboard handler on video, mirroring the native guards.
- Guard the SDLControllerManager JNI bindings with
SDL_ANDROID_NEED_CONTROLLER_MANAGER (joystick or haptic enabled).
- Skip layout updates in ShowTextInputTask when no layout exists
(video disabled).
- Reorganize SDL_android.h/.c into guarded per-subsystem groups with
matching ordering.
Now it does _not_ call SDL_SetError(), since that would allocate memory with
the system in a weird state, and setting all four functions to NULL will
restore the original memory functions, as a shortcut vs having to query
SDL_GetOriginalMemoryFunctions() first.
Fixes#15914.