src/video/wayland


Log

Author Commit Date CI Message
Ethan Lee 74162b74 2021-07-29T13:27:31 wayland: Add support for text-input-unstable-v3
Ethan Lee ad310d39 2021-07-28T12:31:25 wayland: libdecor support for SetWindowModalFor
Ethan Lee 93976ade 2021-07-28T12:22:09 wayland: libdecor support for GetWindowWMInfo
David Gow 1fb4429b 2021-07-28T21:50:48 wayland: Avoid a pointer→TouchID cast warning As of [1], SDL now compiles with a warning in SDL_waylandevents.c on 32-bit systems under gcc 10.3.0: /tmp/SDL/src/video/wayland/SDL_waylandevents.c: In function 'seat_handle_capabilities': /tmp/SDL/src/video/wayland/SDL_waylandevents.c:958:22: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 958 | SDL_AddTouch((SDL_TouchID)seat, SDL_TOUCH_DEVICE_DIRECT, "wayland_touch"); | ^ /tmp/SDL/src/video/wayland/SDL_waylandevents.c:964:22: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 964 | SDL_DelTouch((SDL_TouchID)seat); | ^ This is due to SDL_TouchID always being 32-bit, but seat being a pointer which is (obviously) only 32-bit on 32-bit systems. The conversion is therefore harmless, so silence it with an extra cast via intptr_t. This is what the cocoa backend does (and is similar to what the Win32 backend does, except with size_t). Fixes: 03c19efbd1 ("Added support for multiple seats with touch input on Wayland") [1]: https://github.com/libsdl-org/SDL/commit/03c19efbd17f72f70ee021de6d2549eb0be3bb56
David Gow 18303c92 2021-07-28T18:06:34 Wayland: Fix building with --disable-wayland-shared with libdecor. When wayland is not dynamically loaded (--enable-wayland-shared=no) libdecor.h is not included unless SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC is set, so it fails to build. We can't simply move the libdecor.h include above the #ifdef SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC block, as libdecor.h itself #includes wayland headers we need to replace with #defines. Instead, duplicate the #include. Fixes https://github.com/libsdl-org/SDL/issues/4543 Note that this doesn't fix any of the underlying issues of libdecor being treated as part of wayland, it just fixes the build. A better solution would probably be to decouple the wayland dynamic loading from the libdecor dynamic loading completely, though that is a lot more work...
David Gow 21cba924 2021-07-28T16:54:23 wayland: Don't create zxdg toplevel decoration twice Each window can have at most one zxdg toplevel decoration, but as of [1], we accidentally create two. (If libdecor is not in use). This causes wayland windows with server-side decorations (e.g. on KDE/KWin) to crash with the message: zxdg_decoration_manager_v1@7: error 1: decoration has been already constructed This extra zxdg_decoration_manager_v1.get_toplevel_decoration() call was introduced while deprecating wl-shell and xdg-shell-stable[1] support, and possibly was a bad interaction with [2], which moved the decoration creation around. Fixes: 6aae5b44f8 ("Remove wl-shell and xdg-shell-unstable-v6 support (#4323)") [1]: https://github.com/libsdl-org/SDL/pull/4323 [2]: https://github.com/libsdl-org/SDL/pull/4374
Ethan Lee 7b239edb 2021-07-28T01:00:00 wayland: Assign frame_callback on window creation. Fixes a crash when creating and destroying a window without calling SwapWindow.
Ethan Lee 03185e74 2021-07-27T18:35:00 wayland: Tag/Check wl_output objects as well, fixes crashes when libdecor is in use
Ryan C. Gordon 871c1119 2021-07-27T18:24:09 wayland: handle pending resizes immediately, not on SwapWindow. This was originally a workaround for an old Mesa bug, since fixed, apparently, and causes other problems. Fixes #4326.
Ethan Lee a3eb297e 2021-07-27T17:17:19 wayland: Rework enter/leave and update_scale_factor to avoid bogus wl_output data. Also remove get_window_scale_factor() which was just pointless indirection.
Simon Zeni 6aae5b44 2021-07-27T17:12:26 Remove wl-shell and xdg-shell-unstable-v6 support (#4323) * wayland-protocol: update wayland.xml to 1.19.0 * wayland: remove shell_surface field from SDL_SysWMinfo * wayland: remove wl_shell support * waypand-protocols: update xdg-shell.xml to 1.20 * wayland: remove xdg-shell-unstable-v6 support * wayland: deprecate wl shell surface syswm info, add xdg surface
Christian Rauch e5f9fae0 2021-05-16T23:19:45 wayland: don't flush after setting fullscreen
Christian Rauch ac904b8e 2021-06-21T01:25:25 wayland: ignore resize in fullscreen or maximised mode
Christian Rauch ee062c64 2021-05-19T00:13:39 wayland: implement toggling decorations
Christian Rauch 2b3cf36f 2021-05-22T00:49:10 wayland: forward window events
Christian Rauch 48066984 2021-04-05T14:09:03 wayland: enable/disable ACTION_RESIZE for fullscreen
Christian Rauch 9e6fcbe7 2020-06-11T22:10:28 wayland: client-side decoration
Sam Lantinga 03c19efb 2021-07-24T15:25:50 Added support for multiple seats with touch input on Wayland This fixes bug https://github.com/libsdl-org/SDL/issues/4517
Sam Lantinga f1633127 2021-07-24T13:41:55 Added a window flash operation to be explicit about window flash behavior
Sam Lantinga e1c3a250 2021-07-24T12:11:27 Changed SDL_FlashWindow() so it doesn't take a flash count, and added the hint SDL_HINT_WINDOW_FLASH_COUNT to control behavior on Windows
meyraud705 4ada14a2 2021-07-21T13:39:10 Replace libc functions to SDL equivalent in wayland video subsystem Wayland video subsystem uses a mix of libc and SDL function. This patch switches libc functions to SDL ones and fixes a mismatch in memory allocation/dealoccation of SDL_Cursor in SDL_waylandmouse.c (calloc on line 201 and SDL_free on line 313) which caused memory corruption if custom memory allocator where provided to SDL.
Ethan Lee 7f261d3b 2021-06-15T00:35:13 wayland: Fix returning to a window from fullscreen without calling SetWindowSize
Ethan Lee eb15b4e9 2021-06-11T23:40:09 wayland: Drop SwapWindow calls for hidden windows
Ethan Lee d956636c 2021-06-04T18:39:47 wayland: Implement FlashWindow
Ethan Lee 2af3f64e 2021-06-02T14:37:09 wayland: Activate the window on first ShowWindow, if possible
Ethan Lee 151f9538 2021-06-02T11:41:44 wayland: Implement RaiseWindow with xdg-activation
Ethan Lee d3244035 2021-05-17T01:24:35 wayland: Add support for maximized/restored events
Ethan Lee f2f451a5 2021-05-10T13:29:54 wayland: Call SetWindowBordered at the end of ShowWindow
Ethan Lee efbb6ff9 2021-05-10T12:42:28 wayland: Create the server decorations after the toplevel has been configured
Henk Kalkwater 889cebb7 2021-05-05T14:08:30 Wayland touch inputs send normalized coords Resolves #4361
Nicolas Caramelli 31637dde 2021-05-04T14:59:29 Generic check for desktop GL and EGL on Linux systems
Ethan Lee c69fde34 2021-05-02T16:43:01 wayland: Maximize/Restore should set the relevant window flags. Also, Maximize should be ignored for fixed-size windows.
Christian Rauch 006378b9 2021-05-02T18:30:32 fix NULL frame_callback access
Christian Rauch 424bbaec 2021-05-01T18:53:12 wayland: destroy frame callback when window is destroyed
Ethan Lee 20928550 2021-05-01T09:00:24 wayland: Guard surface_frame_listener for OpenGL, document why it exists
Ethan Lee 3d47ddc4 2021-05-01T08:57:37 wayland: Use refresh_rate to calculate max_wait in SwapWindow
Ryan C. Gordon c54c16d3 2021-04-30T13:19:36 wayland: don't hang in SDL_GL_SwapBuffers if the compositor is ghosting us. If you hide a window on Mutter, for example, the compositor never requests new frames, which will cause Mesa to block forever in eglSwapBuffers to satisfy the swap interval. We now always set the swap interval to 0 and manage this ourselves, handing the frame to Wayland when it requests a new one, and timing out at 10fps just to keep apps moving if the compositor wants no frames at all. My understanding is that other protocols are coming that might improve upon this solution, but for now it solves the total hang. Fixes #4335.
Ethan Lee 8e3ec34d 2021-04-20T12:40:40 wayland: Refactor toplevel mapping, implement HideWindow
Mathieu Eyraud a5825576 2021-04-21T13:39:31 Fix error handling of wayland message box Zenity return a small integer on success which may be the same as EXIT_FAILURE. Use a bigger integer for error reporting from child process.
Mathieu Eyraud 12dd412b 2021-04-21T13:31:15 Fix icon of wayland message box Also add some comments and silence a warning. Co-authored-by: Ethan Lee <flibitijibibo@gmail.com>
meyraud705 d0cf3b75 2021-04-20T18:26:02 Return correct button id
meyraud705 1fd95c53 2021-04-20T18:15:09 Disable pango markup in wayland massage box Zenity support pango markup, add --no-markup to disable it.
meyraud705 0cd0e9ba 2021-04-20T17:49:21 Reimplement wayland message box function with execvp. Previous version used 'popen' which required to sanitize user provided text. Not sanitizing text could cause failure if user provided text included a " or command injection with `cmd`.
Ethan Lee 509228c4 2021-04-18T22:26:27 wayland: Implement GetDisplayDPI
Ethan Lee fcbfe33c 2021-04-18T09:45:22 wayland: Implement SetWindowModalFor
Ethan Lee 213bfc19 2021-04-18T09:36:54 wayland: Implement RestoreWindow for xdg/zxdg
Ethan Lee 0f518002 2021-04-18T09:33:57 wayland: Removed unused GetDisplayModes/SetDisplayMode functions
Ethan Lee 46df195b 2021-04-18T09:33:06 wayland: Implement GetDisplayBounds
Ethan Lee ed24c345 2021-04-16T21:35:50 wayland: Implement basic window move events via wl_surface_listener. This unearthed an unspeakably large amount of bugs in the wl_output enumerator, notably the fact that the wl_output user pointer was to temporary memory! This was "fixed" in e862856, and was then pointed out as a leak in 4183211, which was undone in d9ba204. The busted fix was correct that the malloc was an issue, but wrong about _why_; SDL_AddVideoDisplay copies by value and does not reuse the pointer, so generally you want your VideoDisplay to be on the stack, but of course the callbacks don't allow that, so a malloc was a workaround. But we can do better and just host our temporary display inside WaylandOutputData because that will be persistent while also not leaking. Wait, wasn't I talking about move events? Right, that: wl_surface_listener does at least give us the ability to know what monitor we're on, even though we have no idea where we are on the monitor. All we need to do is check the wl_output against the display list and then push a move event that both indicates the correct display while also not being _too_ much of a lie (but enough of a lie to where our event doesn't get discarded as "undefined" or whatever). The index check for the video display is what spawned the great nightmare you see before you; aside from the bugfix this is actually a really basic patch.
Luis Cáceres 5c78df9c 2021-04-14T00:56:50 Support key composing (i.e. dead keys) in Wayland driver (#4296) Based on an old patch by chw from the old Bugzilla issue tracker. Authored-by: chw Co-authored-by: Sam Lantinga <slouken@libsdl.org>
Ethan Lee f88d91d5 2021-04-12T23:47:23 wayland: Minor whitespace fix
Ethan Lee d785dab5 2021-04-12T23:37:53 wayland: Add unscaled resolutions to the display mode list
Ethan Lee dfcd5fbc 2021-04-08T21:57:58 wayland: Set the keymap in keyboard_handle_modifiers
Ethan Lee c59d4dcd 2021-04-08T15:32:33 wayland: Dramatically lower the timeout when reading/writing pipes
Ethan Lee cf124963 2021-04-08T15:29:54 wayland: Fall back to clipboard source data if offer came up empty
Ethan Lee 282c0524 2021-04-08T14:59:04 wayland: Another strlen->SDL_strlen
Ethan Lee bec133d7 2021-04-08T14:16:32 wayland: Use SDL_strlen instead of strlen
Ethan Lee e28d9785 2021-04-08T14:16:21 wayland: Minor whitespace cleanup in clipboard.c
Ethan Lee 875f839d 2021-04-08T14:14:46 wayland: A bunch of clipboard safety fixes. Also removed Wayland_get_data_device because it was a pointless getter function.
Ethan Lee 7510245a 2021-04-08T14:08:35 wayland: Create the data_device only after both device_manager and input exist. There is no guarantee on what order the Wayland interfaces will come in, but the callbacks were assuming that wl_data_device_manager would could before wl_seat. This would cause certain desktops to not have any data_device to work with, meaning certain features like the clipboard would silently no-op.
David Edmundson 6fd37194 2021-04-07T16:03:41 wayland: Fix leaked zxdg_decoration_manager
David Edmundson f6a09ef1 2021-04-07T16:16:23 wayland: Drop support for kwin specific decoration management KWin has supported the shared and formalised zxdg_decoration since Plasma 5.16 which came out mid 2019. Whilst it made sense to support them both for a while, it should not be needed for future SDL releases.
Ethan Lee a92cca1a 2021-04-07T16:44:10 wayland: Use the window's display to get wl_output rather than fullscreen_mode. Because Wayland only supports FULLSCREEN_DESKTOP, fullscreen_mode never gets assigned at all, meaning driverdata is always NULL! Depending on what the compositor does this can lead to dramatically different results. GNOME was fine without this, but Plasma would trip an event that unintentionally unset the fullscreen mode and caused the game to fire a configure event _every frame_, and of course the configure would send the fullscreen_mode output which was still empty. The fix is to just use the SDL_VideoDisplay directly, which will always have a valid wl_output.
Ethan Lee c7e29a9e 2021-04-06T18:10:40 wayland: Fix toggling fullscreen with fixed-size windows
meyraud705 413a2306 2021-04-04T10:47:06 NULL passed to strcmp in Wayland_ShowMessageBox
Ryan C. Gordon dbdbae44 2021-04-02T14:35:11 linux: (de)initialize d-bus at init and quit. Previously we had different subsystems quitting it, in conflict, and risked multiple threads racing to init it at the same time. Fixes #3643.
Ethan Lee eeee7308 2021-03-29T16:57:03 wayland: Implement IME support. Note that this is purely to make it possible to enter text that requires composition - for example, before this commit Kanji input didn't work at all. The big problem this still has is that we need the window position, and this is still not implemented. Once we have this information we can do the equivalent of XTranslateCoordinates to put the rectangle where we want it.
Ethan Lee 07ba13b7 2021-03-26T00:40:05 wayland: Pass --no-wrap to Zenity. There seems to be a bug where it can wrap the text based on the minimum possible window size, which can be worked around with --no-wrap. This technically uncaps the width entirely, but this isn't wildly different from what other backends do.
Ethan Lee 54719a9d 2021-03-25T23:58:12 wayland: Assign output_len in ShowMessageBox
Ethan Lee 27b74d33 2021-03-25T23:25:34 Implement Wayland_ShowMessageBox using Zenity
Ethan Lee 57a927e8 2021-02-12T14:27:58 wayland: Explicitly set min/max size for xdg-shell
Cameron Gutman 8c5b7af2 2021-02-25T19:30:47 Wayland: Fix mouse pointer hiding on Plasma Wayland Unlike Mutter and Sway, KWin actually checks the serial passed in wl_pointer_set_cursor(). The serial provided is supposed to be the serial of the pointer enter event, but We were always passing 0. This caused KWin to drop our requests to hide the cursor. Thanks to the KDE folks for spotting this in my debug logs. Fixes #3576
Ethan Lee a99eec77 2021-02-12T14:31:43 wayland: Minor whitespace fix
Ethan Lee cad67082 2021-02-04T19:04:56 wayland: Check for both _WAYLAND_CLIENT_H and WAYLAND_CLIENT_H
Sam Lantinga 629334f2 2021-02-09T15:02:55 Fixed bug 5543 - Wayland: Fix waylandvideo.h warnings wahil1976 This patch fixes the warnings seen when compiling the Wayland backend. This will also be required in the future to avoid issues with compilation.
Sam Lantinga d9ba2044 2021-02-08T16:55:01 Backed out changeset 852a7bdbdf4b This causes a use-after-free memory error
Christian Rauch 4183211a 2021-02-08T16:01:37 free the 'display' after it was added to global list
Sam Lantinga ff297753 2021-02-04T10:46:34 Fixed compiler warning
Sebastian Krzyszkowiak e862856e 2021-02-01T08:57:39 wayland: Don't crash when the properties of already existing wl_output change
Christian Rauch 0ed16ced 2021-01-31T19:10:02 free 'outputs' in 'Wayland_DestroyWindow'
Christian Rauch a4467846 2021-01-31T19:09:44 free the 'data_device_manager'
Sebastian Krzyszkowiak 3ae2ec34 2021-01-31T19:06:37 wayland: Fix transform and scale handling when setting display mode
Cameron Gutman a0d3c6c6 2021-01-25T21:42:14 Rename SetWindowGrab() to SetWindowMouseGrab()
Cameron Gutman d133a5f6 2021-01-24T17:19:48 wayland: cancel key repeat when keyboard focus is lost SDL_SetKeyboardFocus(NULL) will lift any keys still pressed when keyboard focus leaves the window, but then key repeat comes behind our backs and presses the key down again. This results in an infinite stream of SDL_KEYDOWN events when focus leaves the window with a key down (particularly noticeable with Alt+Tab).
Cameron Gutman e1f73e64 2021-01-23T16:22:44 Refactor keyboard grab to be managed by the video core This gives us flexibility to add others hints to control keyboard grab behavior without having to touch all of the backends. It also allows us to possibly expose keyboard grab separately from mouse grab for applications that want to manage those independently.
Ethan Lee e787282b 2021-01-23T15:40:22 Implement Wayland_SetWindowResizable
Simon McVittie c16cfc0e 2021-01-23T11:22:35 waylandtouch: Don't export interface structs These are explicitly written in C code rather than generated at build time, so they weren't affected by changing how we invoke wayland-scanner. Signed-off-by: Simon McVittie <smcv@collabora.com>
Cameron Gutman bd553ea8 2021-01-20T21:17:20 Implement support for inhibiting the screensaver on Wayland We support both the org.freedesktop.ScreenSaver D-Bus API (same as the X11 backend) and the Wayland idle_inhibit_unstable_v1 protocol. Some Wayland compositors only support one or the other, so we need both to for broad compatibility.
Cameron Gutman 7ff3832e 2021-01-22T19:22:17 Fix continuous scrolling speed on Wayland Wayland compositors seem to have standardized on 10 units per "wheel tick" for continuous scroll events, so we need to convert these axis values to ticks by dividing by 10 before reporting them in SDL_MOUSEWHEEL events.
Cameron Gutman 19236b46 2021-01-21T21:49:13 Implement support for minimizing windows on Wayland This required a bit of extra code to deal with the transition from minimized back to fullscreen
Cameron Gutman cf84ec44 2021-01-20T23:19:24 Improve reliability of cursor hiding on GNOME Wayland Hiding the cursor doesn't appear to work reliably on GNOME when another window steals mouse focus right as we call SDL_ShowCursor(SDL_DISABLE). This can happen when the keyboard shortcut inhibition permission prompt appears in response to a call to SDL_SetRelativeMouseMode() with SDL_HINT_GRAB_KEYBOARD=1. The result is that the default cursor is stuck locked in position and visible on screen indefinitely. By redrawing the cursor on pointer focus enter, the cursor now disappears upon the first mouse motion event. It's not perfect but it's way better than the current behavior.
Cameron Gutman d789ba83 2021-01-19T18:20:07 Implement keyboard grab support for Wayland Use zwp_keyboard_shortcuts_inhibit_manager_v1 to allow SDL applications to capture system keyboard shortcuts like Alt+Tab when keyboard grab is enabled via SDL_HINT_GRAB_KEYBOARD.
Sam Lantinga 6a342954 2021-01-14T14:42:53 Fixed bug 5451 - Can't create EGLSurface in Wayland from SDLWindow (no EGLNativeWindow pointer) sashikknox In some cases, need create EGLWindow with SDLWindow. In X11 i can get pointer to NativeWindow from **struct SDL_SysWMinfo wmInfo** ```C++ struct SDL_SysWMinfo wmInfo; SDL_GetWindowWMInfo(ptSDLWindow, &wmInfo) #if defined(__unix__) && defined(SDL_VIDEO_DRIVER_X11) nativeWindow=(EGLNativeWindowType)wmInfo.info.x11.window; nativeDisplay=(EGLNativeDisplayType)wmInfo.info.x11.display; #endif ``` than i can create EGLSurface ``` eglCreateWindowSurface(nativeDisplay, EGL_CONFIG, nativeWindow, SURFACE_ATTRIBUTES); ``` in Wayland i can do it with same way, just need pointer to **EGLWindow**, we already have pointer to **wl_display** from **SDL_sysWMInfo**, need add to **wl** struct in SDL_SysWMInfo another pointer to **struct wl_egl_window *egl_window;**. And in wayland backend, in function **Wayland_GetWindowWMInfo** return pointer to **egl_window** from **SDL_WindowData** Now i use patched statically built SDL2 in port of Quake 2 GLES2 for SailfishOS (it use QtWayland): link to SDL2 commit and changed string for patch: - https://github.com/savegame/lp-public/commit/6858a618cd179b766fe3cab36055f07cb03ad0ea - https://github.com/savegame/lp-public/blob/b1e29e87b9d15780e47f04918b329ac15554fc69/SDL2/src/video/wayland/SDL_waylandwindow.c#L463 link to use in Quake2 port: 1. here i get pointer to EGLNativeWindowType: https://github.com/savegame/lp-public/blob/6d94fedb1b720da24999ae6286a1809cd3d55ff5/Engine/Sources/Compatibility/OpenGLES/EGLWrapper.c#L319 2. then use it for create EGLSurface: https://github.com/savegame/lp-public/blob/6d94fedb1b720da24999ae6286a1809cd3d55ff5/Engine/Sources/Compatibility/OpenGLES/EGLWrapper.c#L391
Sam Lantinga 9130f7c3 2021-01-02T10:25:38 Updated copyright for 2021
Sam Lantinga cb361896 2020-12-09T07:16:22 Fixed bug 5235 - All internal sources should include SDL_assert.h Ryan C. Gordon We should really stick this in SDL_internal.h or something so it's always available.
Sam Lantinga f311e0a8 2020-10-19T17:29:16 Removed debug log message
Ozkan Sezer 93e14497 2020-10-14T15:50:04 SDL_waylanddatamanager.c (mime_data_list_add): constify the buffer param Fixes -Wdiscarded-qualifiers warnings from Wayland_data_source_add_data()
Sam Lantinga 76980e30 2020-10-08T16:42:20 Added events for dynamically connecting and disconnecting displays, with an iOS implementation
Yiding Jia f31ad57f 2020-10-05T19:17:52 Implement keyboard repeat in wayland video driver
Sam Lantinga 8709f67e 2020-09-08T08:42:30 Fixed bug 5215 - Fixing filenames passed to dlopen for OpenBSD Brad Smith Attached is a patch to use the proper filenames when trying to dlopen the respective shared libraries on OpenBSD.