Commit Graph

4532 Commits

Author SHA1 Message Date
Frank Praznik
06cfea6a03 wayland: Improve pointer confinement reliability
If the pointer should be confined, keep trying until a confine/lock signal is received. This considerably improves locking/confinement reliability on compositors where confining can be a racy operation, or may not take effect until the pointer is actually in the confinement region.

A pointer lock is used to special-case 1x1 confinement regions, as otherwise, the pointer can still exhibit jitter at the subpixel level, particularly on scaled desktops.
2025-07-01 13:01:09 -04:00
Frank Praznik
9ff0438863 wayland: Send motion events in a frame
Pointer events in seat version 5 and higher should be grouped and sent together when a pointer frame event occurs. Store pending pointer motion events and dispatch them together when a frame event is received.

This helps avoid spurious pointer motion events that some compositors generate with no associated frame (e.g. from some tablet events).
2025-07-01 13:01:09 -04:00
Ryan C. Gordon
4217d62fa2 Some small fixes and corrections: comment typos, a wrong return value.
Just a few things I stumbled upon this week.
2025-06-29 03:07:51 -04:00
Ryan C. Gordon
279dabfc96 cocoa: Don't use trick of briefly focusing the Dock on newer macOS releases.
On newer systems, the trick isn't necessary, and if you do it, if the user is
moving the mouse when launching the app, it'll show a hidden Dock.

Fixes #10340.
2025-06-26 14:24:53 -04:00
Caleb Heuer
cd98b66114 Allow overriding SDL_FORK_MESSAGEBOX in build environment 2025-06-26 10:49:31 -07:00
Frank Praznik
0ac1241b7a x11: Always update the borders on frame extent events
Always update the border sizes on frame extent events, or they can incorrectly still be zero if followed by a PropertyNotify event when leaving fullscreen.

Fixes sending the correct restored window size when leaving fullscreen in fvwm.
2025-06-26 11:52:43 -04:00
Sam Lantinga
9ed83e71f6 Fixed memory leaks in KMSDRM property handling
Also cleaned up the code for consistency so it's easy to see memory leaks here.
2025-06-22 21:33:52 -07:00
Sasha Szpakowski
e80d084766 expose events originating from a live-resize set the data1 field to 1.
Fixes #13243.
2025-06-21 07:33:25 -07:00
Josh Dowell
6aedc488d3 win32: Invalidate window message mouse button flags when reading buttons from raw input or GameInput
SDL2 would set a high bit in the mouse button flags to indicate when raw input had been read from, without this, if you hold down a mouse button and left raw input mode (leaving relative mode) the button would remain partially stuck, and would require two clicks to start producing mouse down events again.
SDL3's raw input code was refactored to not use the mouse button flags, but forgot to invalidate the flags, causing this bug to manifest.
2025-06-21 07:28:14 -07:00
Sam Lantinga
d7939abf42 Use consistent style for pointer declarations and casts 2025-06-18 10:03:44 -07:00
Frank Praznik
ca9b7c8ea3 video: Explicitly disallow setting the parent of a window to itself
Doing so causes a cycle in the window hierarchy tree graph, which leads to infinite recursion when destroying the windows.
2025-06-18 09:26:08 -04:00
Frank Praznik
e2239c36d3 wayland: Ensure that the tablet tool list is always initialized to empty
Otherwise, it will be left in an uninitialized, non-empty state if the tablet protocol isn't present.
2025-06-13 15:57:31 -04:00
Xaver Hugl
ec1297199e wayland: Implement the pointer warp protocol
The pointer warp protocol allows us to warp the pointer to a different position on
the surface, without any hacks like locking and unlocking the pointer.
2025-06-13 15:40:49 -04:00
Cameron Cawley
f2bcfe3dd2 Correct the texture format used for the N-Gage (#13192) 2025-06-08 18:56:24 +02:00
Frank Praznik
45eb6310a8 x11: Resize fixed-size windows after mapping on xmonad
XMonad ignores size hints and shrinks the client area to overlay borders on fixed-size windows, even if no borders were requested, resulting in the window client area being smaller than requested. Calling XResizeWindow after mapping seems to fix it, even though resizing fixed-size windows in this manner doesn't work on any other window manager.
2025-06-06 11:35:31 -04:00
Frank Praznik
22fa45b3c1 win32: Ensure that text input is initially disabled when creating a window
Windows seems to implicitly enable IME text input on windows created while an IME is active, which causes the IME suggestion window to pop up when keys are pressed, even if a client never explicitly enabled it. Ensure that IME support is initially disabled on new windows; SDL will enable it at a later time, if required.
2025-06-05 12:20:35 -04:00
Ryan C. Gordon
9e0d9f30a7 x11: Be a little less aggressive with Xinput2IsInitialized checks.
Just in case this ever get deinitialized sooner, we'd still like to SDL_free()
things on shutdown, etc.

Reference PR #13148.
2025-06-01 10:14:01 -04:00
Mason Remaley
57b6e6c7f9 Checks if xinput is loaded before trying to call xinput functions 2025-06-01 10:11:23 -04:00
Ryan C. Gordon
47717f22fd cocoa: Always add a window-sized NSTrackingArea to each window.
Previously this was only done on older macOSes, but it seems to work on all
versions, afaict.

Reference Issue #12725.
2025-05-31 15:00:56 -04:00
Ryan C. Gordon
f61d956a04 cocoa: add explicit tracking areas to the window.
This makes sure we get reliable mouse enter/exit events from the system on
older macOS releases.

Newer releases don't have this problem--my assumption is that Cocoa has a
more aggressive default tracking area installed for some newer UI feature.

For 3.2.16, we'll use the explicit tracking area on older macOSes only, but
I'll remove that check in revision control for newer OSes and see what
happens.

Fixes #12725.
2025-05-31 14:40:12 -04:00
Frank Praznik
58afb0d8ae wayland: Update xkbcommon names and types
Use the proper types for xkb mod masks and layout indices, rename the mod masks to reflect that they are bitmasks and not indices, and use the 'layout' nomenclature instead of the deprecated 'group' nomenclature.
2025-05-31 13:40:58 -04:00
Frank Praznik
c764e8864b wayland: Update xkbcommon to avoid using deprecated modifier names
xkbcommon 1.10.0 declared certain modifier names to be deprecated, and the current plan is to remove them in 1.12.0. Use the new recommended names and modifier mask retrieval function when building against version 1.10.0 and higher.
2025-05-31 13:40:58 -04:00
Caleb Heuer
51dfca813b Pass text input rect to steam deck keyboard invocation 2025-05-30 09:54:33 -07:00
Sam Lantinga
fc1c0618de kmsdrm: fixed creating GBM surfaces on NVIDIA cards 2025-05-29 11:20:24 -07:00
Sam Lantinga
885e611f3c Added macros to push/pop error messages while cleaning up 2025-05-29 10:53:46 -07:00
Sam Lantinga
61d105247e Fixed typos 2025-05-29 10:53:30 -07:00
Everett Afton
ca988dbc2c Bail out if Xrandr returns zero CRTCs in the X11 messagebox implementation 2025-05-29 11:32:50 -04:00
Everett Afton
c147ddf3e3 Do not use Xrandr if the extension is not queryable in the X11 messagebox implementation 2025-05-29 11:32:50 -04:00
Everett Afton
df07c09f55 Use visuals and colormapsin the X11 messagebox implementation 2025-05-29 11:32:50 -04:00
Frank Praznik
e3d44cdd51 wayland: Use raw timestamps to calculate the elapsed repeat time on a key up event
Using processed timestamps can result in anomalies that cause excessive repeat events, and hard caps can cause issues.

In the key event handler, use the raw elapsed time to calculate any remaining repeat events to avoid the artifacts that can result from using processed timestamps.

The Wayland key repeat rate ranges from 0 to 1000 per second, so millisecond resolution doesn't lose any precision.
2025-05-27 10:59:03 -04:00
Sander Ledegen
9b025e3cab PSP fullscreen is the only mode (#13125) 2025-05-26 10:31:48 -07:00
Ozkan Sezer
25db127450 SDL_video.c: remove two stray line continuation chars . 2025-05-26 01:41:47 +03:00
Christian Kündig
168d1a9253 emscripten: Proxy Emscripten_GetSystemTheme and EMSCRIPTENAUDIO_OpenDevice to the main thread. 2025-05-25 13:50:02 -07:00
Frank Praznik
b70919ecd9 x11: Assume the window was mapped after showing
Not all window managers send a MapNotify or PropertyNotify event when the window is shown, so assume that it was mapped and set the flag accordingly.
2025-05-24 09:59:30 -04:00
Frank Praznik
0657ece55d x11: Always send fullscreen dimensions except on XWayland
More non-compositing window managers than just openbox seem to need this, so always force sending the window position and dimensions when entering/leaving fullscreen. If they are wrong, they will be immediately overwritten by the correct dimensions from a subsequent ConfigureNotify event.

This is disabled on XWayland, as it seems to cause hitching on some compositors.
2025-05-24 09:59:30 -04:00
Frank Praznik
fdc4f8fa39 x11: Include the XTest header when needed
Fixes building when statically linking.
2025-05-23 13:05:52 -04:00
Ivan Epifanov
2b4d61e4a6 VITA: support only fullscreen windows. Fixes #13079 2025-05-23 08:45:15 -07:00
Michael Fitzmayer
7ae64592c9 Restore support for the Nokia N-Gage (#12148) 2025-05-22 11:07:22 -07:00
Frank Praznik
abcfa1b7de wayland: Use SDL_memcpy instead of SDL_copyp to copy the repeated text string
SDL_copyp is not intended to copy arrays. Use SDL_memcpy with the explicit size instead.
2025-05-21 20:38:39 -04:00
Frank Praznik
05f779f61e wayland: Cap the max key repeat elapsed time
Cap the elapsed time to something sane in case the compositor sends a bad timestamp, which can result it in it looking like the key has been pressed for a *very* long time, bringing everything to a halt while it tries to enqueue all the repeat events.
2025-05-21 12:19:22 -04:00
Frank Praznik
20e8ac0075 wayland: Fix keymap changed event spam with non-latin keyboard layouts
The function SDL_GetCurrentKeymap() would return null instead of the actual bound keymap for non-latin layouts if certain mapping options were set. Add a parameter to ignore the keymap options and always return the actual bound keymap, which is needed in the Wayland backend to avoid spamming keymap changed events on every keystroke with certain layouts.
2025-05-21 11:54:56 -04:00
Frank Praznik
c7549eb0b6 wayland: Set the text input cursor rect properly
The text input cursor should reflect the cursor position, not the entire text input rect. Set it correctly so that IME chooser dialogs appear in the correct location.
2025-05-20 13:40:00 -04:00
Sam Lantinga
992e4c59bd Fixed rare crash trying to interrupt SDL_WaitEvent()
Fixes https://github.com/libsdl-org/SDL/issues/12797
2025-05-19 14:15:44 -07:00
Frank Praznik
6c61a94a4b wayland: Don't add the nanosecond timestamp offset to the pre-conversion millisecond value 2025-05-19 13:59:46 -04:00
Frank Praznik
b0a282e31f wayland: Enable relative pointer mode based on the window flag
This can be toggled per-window, so use the individual window flags instead of the global toggle to selectively enable it only for the relevant window in a multi-seat scenario, as is already done with keyboard and pointer grabs.
2025-05-16 13:12:45 -04:00
danginsburg
968222e74f Fix #13057 - fixes bug with NSEventTypeMouseMoved having a NULL window causing us to suppress future mouse move events because the window was considered out of focus. 2025-05-16 09:52:27 -07:00
Stéphane GINIER
945eb6dc87 MacOS: fix cocoa clipboard text
Adjust Cocoa_SetClipboardData so that SetClipboardText text can be pasted outside SDL
2025-05-15 10:54:04 -07:00
Frank Praznik
1eeffc5933 Revert "x11: Send key events for dead keys consumed by the IME"
This and its related commits introduced some bugs and quirks such as duplicated and delayed/missed key events that can't be easily worked around, so revert this for now.

This reverts commit 47162a4168.
2025-05-13 09:21:39 -07:00
Frank Praznik
3304d24bea Revert "x11: Filter out duplicate key presses when an IME is active"
This reverts commit f4813ca2cf.
2025-05-13 09:21:39 -07:00
Frank Praznik
83d4dce697 wayland: Remove all window references from seats when destroying a window
Compositors typically send keyboard, pointer, touch, and tablet leave events when a window is destroyed, however, this is not guaranteed behavior, and at least one compositor in widespread use doesn't always send pointer leave events immediately upon destroying a window. Ensure that all references held by seats to a focused window are removed before the underlying window surface and structs are destroyed to prevent potential segfaults if the seats are immediately destroyed after the window.
2025-05-13 11:32:02 -04:00