This risks blocking the thread if disaster ensues, and we can wait in the
thread's main loop for subscription as well anywhere else.
Reference Issue #7971.
(cherry picked from commit 956b18f50cc3794f253b025cca6e5e00c445fd67)
If there is only one controller slot available, assume that's the one matching new RAWINPUt devices. This will be right most of the time, and uncorrelation will fix any bad guesses.
(cherry picked from commit 41882a1acb6054dc7a56fd5ff7f0a279ba1144c0)
This report is for third party controllers only, and might be causing issues with fake PS4 controllers.
Reference https://github.com/libsdl-org/SDL/issues/7960
(cherry picked from commit 092a4b780ca464de71b89ffa5dc655ce256ce350)
The xpad kernel driver doesn't know about these controllers and ends up using BTN_C and BTN_Z and the automatic mapping doesn't work correctly.
It turns out VID 0x045e and PID 0x02e0 is used by the 8BitDo SN30 Pro when connecting via Bluetooth in XInput mode.
Fixes https://github.com/libsdl-org/SDL/issues/7925
(cherry picked from commit 80e1c75e1c6d330318478c1549a97aedb09e58bc)
Currently, SDL_CLIPBOARDUPDATE events are only sent when an SDL window
has its selection cleared. This change sends the event anytime the
XFixesSelectionNotify event is raised, and when the selection is either
the clipboard or the primary selection.
This fixes WGI correlation on startup when the WGI gamepad list isn't populated yet
(cherry picked from commit f047e178b610c6888212c3096c10eb3f64f31a15)
That will put the PS4 controller into enhanced mode, which breaks DirectInput games
(cherry picked from commit efed24850af2994802c28f7a257ea17c9ec97d0a)
Initializing "Windows.Gaming.Input.Gamepad" will put Bluetooth PS4 controllers into enhanced report mode, which breaks any game using DirectInput. Let's wait to do this until absolutely necessary.
(cherry picked from commit 785f57eb9102206e74ac7f9b363a37cbf037cf9d)
video(wayland): use both --icon and --icon-name for Zenity
Many distros ship an older version of Zenity that supports GTK3, while some distros ship newer version of Zenity which uses libadwaita.
This command tries to use --icon and fall back to --icon-name when it fails.
We don't necessarily know the size of the output characters, so do a full 32-bit zero termination on the output string.
This fixes garbage at the end of Windows clipboard text
(cherry picked from commit ecbbac7c7292300cf998a2ff04db3c721203b0b7)
Also, for some reason ID3D11DeviceContext_OMGetRenderTargets() was failing in the second read pixels call in the "testautomation --filter render_testViewport" test.
We already know the target view, so just use that.
(cherry picked from commit 619f65af0c390dd10bc0e6bf9dc1227e7ecee54d)
Don't use the viewport offset when setting the clip rect in the D3D12 renderer.
This fixes "testautomation --filter render_testViewport" on Windows
(cherry picked from commit 304d425f99b3b62e5f77ef869731bb702810a572)
This fixes 'testautomation --filter clipboard_testClipboardTextFunctions' on Windows
(cherry picked from commit c24496727cdd40d5c0ffdf7b6a61085ec3a2766d)
and we're statically linking to the library.
This fixes building SDL with -DSDL_WAYLAND_SHARED=OFF
(cherry picked from commit 5b5b67df203e9f8391e7e53aa5de54abf14c482e)
This used to create a context and mainloop for each device and the hotplug
thread, but this isn't correct use of PulseAudio's API. Now we have a
single context and a pa_threaded_mainloop, and all threads cooperate around
it.
This was originally from SDL3, in 35292d7dba88faa667f86e77c63651d19ef49178.
Reference Issue #7883.
Reference Issue #7427.
It is possible for retrieving the machine ID to fail, either because
dbus was installed incorrectly (machine ID absent or corrupt), or in
32-bit builds, because stat() on the machine ID fails with EOVERFLOW
if it has an out-of-range timestamp or inode number.
dbus has historically treated this as a faulty installation, raising
a warning which by default causes the process to crash. Unfortunately,
dbus_get_local_machine_id() never had a way to report errors, so it has
no alternative for that (bad) error handling.
In dbus >= 1.12.0, we can use dbus_try_get_local_machine_id() to get
the same information, but with the ability to cope gracefully with
errors. ibus won't work in this situation, but that's better than
crashing.
(cherry picked from commit 91198baed40d5709020c3001e9234f4580df696a)
Mitigates: https://github.com/ValveSoftware/steam-for-linux/issues/9605
Signed-off-by: Simon McVittie <smcv@collabora.com>
The hidraw device may take additional time to get the correct permissions for us to open it. In my tests on Steam Deck hardware, this ranges between 5-8ms.
(cherry picked from commit c6ee9780df4286f66c38f3fa9732daa9afe0a8a3)
We can't read device info or IMU calibration from this controller, and it has no gyro or accelerometer, but is otherwise perfectly functional.
(cherry picked from commit f168f9c81326ad374aade49d1dc46f245b20d07a)
Fixes DPI awareness of testdrawchessboard (previously, the surface was
being created in points instead of pixels, resulting in the demo app
only drawing in a corner of the screen on High-DPI displays)
*_CreateWindowFramebuffer()/*_UpdateWindowFramebuffer(): are updated
to use SDL_GetWindowSizeInPixels instead of SDL_GetWindowSize() or
window->w/window->h.
Most of the _CreateWindowFramebuffer backends are untested except
for Windows.
Fixes#7047
(cherry picked from commit 67c91353e01f6f2c0cc80c17eeddbad6def7cb01)
This controller shows up with a VID/PID of 0, but has full functionality over Bluetooth
(cherry picked from commit cdfc0c5a3314e4e0cd5152feddd8950c7eb797f1)
This is much more robust and able to dynamically create a mapping for Xbox One S, Xbox Series X, and Xbox Elite 2 controllers.
(cherry picked from commit 9567989eb3ce9c858f0fe76806c5ccad69da89ba)
We can't actually tell yet whether a controller has paddles, so this code isn't effective, but I'll file an upstream issue and see if we can get that resolved.
(cherry picked from commit b0677f476fa43f4a113b04a959228fd38f95d740)
This heuristic for gamepads without a more specific mapping already
tried two incompatible conventions for handling triggers: the Linux
Gamepad Specification uses hat switch 2 for the triggers (for whatever
reason), but the de facto standard set by the drivers for older Xbox
and Playstation controllers represents each trigger as the Z-axis of
the nearest analog stick.
Android documentation encourages Bluetooth gamepad manufacturers to use
a third incompatible convention where the left and right triggers are
represented as the brake and gas pedals of a driving simulator
controller. The Android convention also changes the representation of
the right stick: instead of using X and Y rotation as a second pair
of axes, Android uses Z position as a second horizontal axis, and
Z rotation as a second vertical axis.
Try to cope gracefully with all of these. This will hopefully resolve
the issue described in #5406 (when using unpatched kernels).
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit cf1dc66e2cfc7a65374c5fea681dd31c50363a2c)
The bitfield `mapped` has two different sets of meanings, depending
whether we're setting up the triggers or the d-pad. Represent them
as symbolic constants rather than opaque integers.
Signed-off-by: Simon McVittie <smcv@collabora.com>
(cherry picked from commit c4d49fadd4500cb522b2a98e5a42d024c566d8bf)
This prevents the case where the mouse might be at the edge of the
window when enabling relative mode, which confuses macOS, at it
might believe the user is attempting to resize the window.
Fixes#6994.
The query packet needs to contain valid rumble data in order to be accepted by the controller.
Fixes https://github.com/libsdl-org/SDL/issues/7788
(cherry picked from commit 5490873daa12a57ff4b36090f25f04530323c6e4)
This fixes the serial number for Nintendo Switch Pro, which is queried from the hardware in device initialization, and was later clobbered by the USB string which isn't correct.
(cherry picked from commit 2042e9c4e3cba6ffa9c34abac14828e31365f98b)
Before this, the function could not be used on buffers,
as it would not account for the zero-termination unless
it was included in the input.
(cherry picked from commit 5f5abb680523e1adedd3fca2a8e252db01fc1c52)
Raw input will not send game controller events while Remote Desktop is active, so dynamically switch between XInput and raw input when Remote Desktop state changes.
Fixes https://github.com/libsdl-org/SDL/issues/7759
(cherry picked from commit 767507fcf6f4607edb413acb53a6c029863701ed)