Commit Graph

2754 Commits

Author SHA1 Message Date
Frank Praznik
e8076b78ef video: Move fullscreen windows via SDL_UpdateFullscreenMode()
Update the target display ID and use SDL_UpdateFullscreenMode() when moving a fullscreen window to handle the case where the target display has an existing fullscreen window.
2023-02-23 07:39:16 -08:00
Sam Lantinga
6c9e199f73 Use bridged pointers to Objective C objects in C structures
Fixes https://github.com/libsdl-org/SDL/issues/7244
2023-02-22 22:03:25 -08:00
Sam Lantinga
9eb19d2bf2 SDL_CheckWindowDisplayChanged() is a static function 2023-02-22 15:34:44 -08:00
Sam Lantinga
756921a049 Fixed float conversion warning 2023-02-22 15:33:47 -08:00
Sam Lantinga
e8091b8983 cocoa/gles: do not unload EGL when context is destroyed 2023-02-20 10:40:54 -08:00
Marc-André Lureau
93861e1de0 windows/gles: do not unload EGL when context is destroyed
It's legitimate to have multiple contexts.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2023-02-20 10:40:19 -08:00
Marc-André Lureau
654965a628 windows/gles: correct indentation
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2023-02-20 10:40:19 -08:00
Sam Lantinga
5d3cf61e8b Don't call SDL_GetDisplayIndex(0) when creating or positioning a window
Fixes https://github.com/libsdl-org/SDL/issues/7354
2023-02-20 10:38:13 -08:00
Anonymous Maarten
efdc92802f Fix -Wunused-function warning when configuring with -DSDL_X11_XINPUT2=OFF 2023-02-19 09:59:12 -08:00
Anonymous Maarten
0e2866f846 Fix -Wunused-variable warning when configuring with -DSDL_X11_XRANDR=OFF 2023-02-19 09:59:12 -08:00
Anonymous Maarten
cfadb4c106 Fix -Wunused-variable warning when configuring with -DSDL_X11_XSHAPE=OFF 2023-02-19 09:59:12 -08:00
Sam Lantinga
ced02319a6 Fixed typo (thanks @Iniquitatis!) 2023-02-19 09:57:35 -08:00
Lauri Kasanen
0123d6311d Fix GetGlobalMouseState when xi2 is not available at runtime 2023-02-19 09:56:08 -08:00
Ozkan Sezer
964a877eb3 SDL_x11dyn.h: include XInput2.h also for Xfixes
Fixes https://github.com/libsdl-org/SDL/issues/7343
2023-02-11 23:51:28 +03:00
Anonymous Maarten
18f38bef03 Remove include/SDL3/SDL_name.h 2023-02-18 12:33:54 -08:00
Le Philousophe
a67ae8eed5 Fix window size in X11 when window manager refuses to resize 2023-02-18 12:31:46 -08:00
Ozkan Sezer
b5a7bd72df minor tidy-up. 2023-02-18 11:29:10 +03:00
Sylvain
c88becc87a Fix kmsdrm build 2023-02-18 08:12:52 +01:00
Alexandros Koutroulis
a2251d1093 SDL_SetWindowIcon now reports errors. (#7081) 2023-02-17 16:17:27 -08:00
Frank Praznik
39e6d4a891 Set the window width and height when moving 2023-02-17 09:25:01 -05:00
Sam Lantinga
630c23ce17 You can move fullscreen desktop windows between displays using SDL_SetWindowPosition() 2023-02-16 17:28:56 -08:00
Sam Lantinga
64b88115ec SDL_SetWindowFullscreen() now takes a boolean value 2023-02-16 17:28:35 -08:00
Sam Lantinga
6c04c6f090 Fixed SDL_SetWindowSize() and SDL_SetWindowPosition()
The backend code expected window->x,y,w,h to be set when updating size and position
2023-02-16 16:59:15 -08:00
Frank Praznik
4187c6c08c video: Select the closest mode for the target refresh rate accounting for small variations
Use the delta of the target refresh rate and the refresh rate of the mode to select the closest matching display mode, as the actual closest mode may have a slightly lower rate than the target by a small fraction of a hz (e.g 59.98 vs 60.0).
2023-02-15 10:07:46 -05:00
Frank Praznik
3f5ef7dd42 video: Handle moving exclusive fullscreen windows between displays
Desktops can move windows, even exclusive fullscreen windows, from one display to another. To handle this, windows now hold two fullscreen modes: the desired mode, which is considered mutable only to the application, and the current mode. When a fullscreen request is made, the current mode is initially set to the desired mode for the initial fullscreen transition. If an exclusive fullscreen window is moved to a new display, the new display is checked to see if it has a mode compatible with the desired mode. If it does, the compatible mode is used so the windows will have the same properties on the new display. If no compatible mode is found, the window becomes desktop fullscreen. This occurs whenever the window is moved to ensure that an attempt will always be made to use the application's requested mode, if possible.

Exiting and reentering fullscreen results in the desired mode being restored on the display specified by it.
2023-02-15 10:07:46 -05:00
Frank Praznik
9370f9ca85 wayland: Deduplicate calls to position fullscreen windows already on the correct output 2023-02-13 13:25:16 -05:00
Frank Praznik
4a6f3cf47e x11: Set the window position when entering fullscreen
Set the window position when entering fullscreen as both real Xorg and XWayland need this in order for the window to be on the correct display.
2023-02-11 14:44:02 -05:00
Frank Praznik
d6a19c8cc6 video: Use the explicit fullscreen display for a window unless the window was moved
When an exclusive fullscreen display is specified, it overrides any positioning, including from driver specific functions. Allows for the proper placement of fullscreen windows on macOS and Windows when the floating window is on a display that differs from the one specified by the exclusive fullscreen mode.

 A specific position-only function has been split out for use when a window has been moved.
2023-02-11 14:44:02 -05:00
Sylvain
7c4ec1867b Remove some vim config lines 2023-02-10 11:00:48 +01:00
Bruce Mitchener
a8e89f2567 emscripten: Update deprecated calls to EM_ASM*.
`EM_ASM_` and `EM_ASM_INT_V` are calls that have been deprecated
for a long time.

Since the return value isn't used for the call to `EM_ASM_`, it
can be replaced with `EM_ASM`.

`EM_ASM_INT_V` is now (for the last few years) `EM_ASM_INT`.
2023-02-09 23:10:17 -08:00
Sylvain
cee245b6a9 SDL_*SceenSaver(): change return value to int. // add SDL_Unsupported() errors 2023-02-09 08:16:46 -08:00
Sylvain
e2e5e670bf Remove returns int from Destroy/Close/Unlock functions 2023-02-09 07:57:14 -08:00
Linus Probert
3bd737d44c Add error returns to void functions that can fail/set errors.
This takes care of the last set of void functions that could
potentially be shifted to instead return an int indicating success and
setting an error in case of an error.
2023-02-09 07:23:21 -08:00
Sam Lantinga
824b9b0a58 Removed SDL_GetDisplayDPI()
This function wasn't consistently correct across platforms and devices.

If you want the UI scale factor, you can use display_scale in the structure returned by SDL_GetDesktopDisplayMode(). If you need an approximate DPI, you can multiply this value times 160 on iPhone and Android, and 96 on other platforms.
2023-02-08 17:35:54 -08:00
Sylvain
c5c94a6be6 Change return type from void to int, for functions that set an error
(SDL_SetError(), SDL_OutOfMemory(), SDL_Unsupported(), SDL_InvalidParam())

Update prototype to forward errors to generic layer, for the functions:
MoveCursor, WarpMouse, GL_DeleteContext, GetDisplayModes.

Check invalid parameter in SDL_SetTextInputRect() generic layer.
2023-02-07 13:51:45 -08:00
Frank Praznik
6c37d5b57f x11: Cast the dot clock value to 64-bit when calculating the refresh rate
The Xrandr dot clock value is declared as an unsigned long and the result when multiplying by 100 can overflow on a 32-bit system. Explicitly cast it to Sint64 to ensure that no overflow will occur.
2023-02-07 13:39:38 -05:00
Sam Lantinga
20a4e31a12 Re-added the internal hint SDL_BORDERLESS_WINDOWED_STYLE
sdl2-compat should set this to "0"
2023-02-07 09:47:17 -08:00
Pierre Wendling
fa8fba3812 Add clang-tidy config and CMake/CI support. 2023-02-06 21:02:25 -08:00
Frank Praznik
d603371848 video: Try to get the display for fullscreen windows via the window position
Attempt to retrieve the display for fullscreen windows using the window position so that the correct display ID is returned if an exclusive fullscreen window is moved to another display.
2023-02-06 17:18:35 -08:00
Linus Probert
375bde8a4f [SDL3] Cleanup void functions (#7253)
Some functions that do call SDL_SetError but return void changed to instead return non-zero in case of errors.
2023-02-06 08:53:52 -08:00
Sylvain
6f0acca8bd Return the SDL_SetError value 2023-02-06 11:42:38 +01:00
Sean Ridenour
a077cc8e4d [SDL3] macOS SetCursor performance fix (fixes #7151) (#7249)
* Setting the same mouse cursor twice is a no-op

* Cocoa: Call [NSCursor set] to change mouse cursor

The previous way, changing the mouse cursor was handled by invalidating
the mouse cursor rectangles and then recreating them (with the new
cursor) the next event loop. This is extremely slow; sometimes it can
take over a millisecond! With [NSCursor set] it happens instantly and
very quick performance-wise.

The downside is that it sets the cursor for the whole screen, so we
have some guards in place to change it to the system cursor if
the mouse moves outside the window or the window loses focus.

* Cocoa: Remove unneeded resetCursorRects: function
2023-02-05 17:58:33 -08:00
Frank Praznik
b2d8a1a58c wayland: Transform mode values for native portrait displays
Portrait displays may have native, physical resolutions that are taller than wide. Reverse the mode dimensions when dealing with these displays as well as those rotated via software means.
2023-02-04 11:40:55 -05:00
Sam Lantinga
14a4ce8b59 Fixed SDL_ScaleMode values for consistency 2023-02-03 14:20:51 -08:00
Sylvain Becker
cb6b8b0132 Simplify flags testing (#7220) 2023-02-03 13:08:42 -08:00
Frank Praznik
0bf91e16b7 wayland: Fix non-floating libdecor window sizing 2023-02-03 11:07:31 -05:00
Frank Praznik
7d439b87b0 video: Don't switch display modes when emulating mode changes
SDL uses window minimization to determine fullscreen window visibility and hide windows before changing the video mode back to the desktop. Wayland, however, does not have the concept of a minimized window and doesn't set the minimized flag (minimization can be requested, but what actually happens to the window is implementation dependent, and if a window is minimized via a desktop shortcut or decoration control, the application is not notified of any state changes). Make the video core mode setting a no-op so that the Wayland backend can handle reporting the display dimensions using its own internal logic.
2023-02-02 18:25:18 -08:00
Frank Praznik
7def1438c3 wayland: Refactor for video core changes
Accommodate the new video core changes.

The new video core changes allow for some window geometry calculation refactoring that simplify the system:

- Removal of helper functions
- Eliminate some discrepancies between the libdecor and xdg-toplevel paths
- No need to short-circuit the video core window size event deduplication check
- Exclusive fullscreen windows will always end up on the correct output, even when fullscreen is initiated from the compositor
- Better handling of cases where the desktop is scaled, but does not expose the viewport protocol
- Return the display bounds for the emulated mode if an exclusive fullscreen window has focus
- Fixed cases where changing display properties during runtime wouldn't update the display mode lists
- General cleanup
2023-02-02 18:25:18 -08:00
Frank Praznik
47cdb532f1 video: Don't rely on memcpy undefined behavior
The C specification states that passing a size of 0 to functions like memcpy is valid, but even if the size is 0 and the function is essentially a no-op, the result when passing any invalid pointers is considered undefined behavior. Don't rely on undefined behavior when copying the display or mode lists.
2023-02-02 15:11:36 -08:00
Frank Praznik
166afebcad video: Update self-referential pointers when reallocating the display list
The display list can contain self-referential pointers if the current mode pointer points to the desktop mode or a fullscreen mode array element, and reallocating the display or fullscreen mode lists without updating the current mode pointer in these cases can leave them pointing to freed memory or garbage data. Manually copy the list items and update the self-referential pointers if necessary.
2023-02-02 09:46:01 -08:00