src/video/wayland


Log

Author Commit Date CI Message
rohlem b085c182 2022-07-04T16:38:05 make SDL_SetTextInputRect take a pointer to const The documentation doesn't state that the argument is ever modified, and no implementation does so currently. This is a non-breaking change to guarantee as much to callers.
Cameron Cawley 78089e65 2022-07-01T13:08:31 Remove unused internal header SDL_sysevents.h
Frank Praznik c11bdeeb 2022-06-21T13:28:14 wayland: Round fractional backbuffer sizes halfway away from zero Use SDL_lroundf() to round fractional backbuffer sizes halfway away from zero, as this is the rounding method recommended by the forthcoming Wayland fractional scaling protocol.
Sam Lantinga 5f6d0abe 2022-06-18T12:57:27 SDL_SendEditingText() has int parameters, so use that type for parameter calculation We might want to use ssize_t as @Guldoman suggested, but that's a larger internal API change, and still requires casting of the SDL_utf8strnlen() result. Fixes https://github.com/libsdl-org/SDL/pull/5821
Sam Lantinga adc68758 2022-06-17T10:22:28 Added SDL_copyp to avoid size mismatch when copying values (thanks @1bsyl!) Closes https://github.com/libsdl-org/SDL/pull/5811
takase1121 f8ae3ef1 2022-06-15T22:01:59 wayland: use libdecor resize edge enums for libdecor
Frank Praznik e427e80b 2022-06-14T10:41:18 wayland: Use the output descriptions from xdg-output when available Some compositors will provide 'nicer' / 'human readable' output descriptions via the xdg-output protocol. Use these description strings, when available, instead of the model name provided by wl-output. On compositors such as GNOME where this is provided, the display names provided to applications by SDL will now match those in the desktop display settings panel. On compositors where this data isn't provided, the old behavior of using the model string provided by wl-output will remain unchanged. Additionally, per the protocol spec, output data provided by xdg-output should supersede wl-output data, so this is the recommended behavior in general.
Frank Praznik 4a3277b0 2022-05-19T15:13:02 wayland: Always commit window constraints before entering fullscreen XDG-toplevel min/max size values are double-buffered data and must be committed before entering the fullscreen state, or a max window size value smaller than the display dimensions may cause the compositor to incorrectly configure the fullscreen window size. This fixes windowed->fullscreen transitions on GNOME, where, previously, certain combinations of window flags and min/max size values could cause entering fullscreen mode to fail with odd window sizes and/or offsets due to the new max size values not being committed before entering fullscreen, causing the compositor to clamp to the old values. In the case of libdecor, it has its own layer of buffering on top of the xdg-toplevel surface for the min/max window dimensions, so both a frame commit and surface commit are required to set the state properly.
Frank Praznik 78698a0b 2022-05-17T12:37:16 wayland: Use a separate frame callback for setting the surface damage region Previously, the surface damage region was being set in the same callback used for preventing render hangs in the GL backend when the surface was not visible. This was not ideal, as the callback was never fired in the case of using a different render backend or having a swap interval of 0. Use a separate frame callback for setting the surface damage region to ensure that it fires reliably, regardless of the backend being used or swap interval.
Frank Praznik 146ea9b0 2022-05-16T18:18:55 wayland: Only set the surface opaque region if EGL transparency is disabled Check if the "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" hint is enabled and don't mark surfaces as opqaue if it is.
Frank Praznik a20516d4 2022-05-16T10:35:56 wayland: Swap emulated mode dimensions in more cases Some compositors (GNOME for example) don't set the transform flag when dealing with portrait mode displays, so the video modes won't have the width/height swapped in all cases where they should be. Check for both the 90/270 degree transform flag and if the display is taller than it is wide when determining whether to swap the width and height of the emulated video modes, and adjust the comparison logic when size testing against the native mode to account for this.
Frank Praznik e1c83504 2022-05-15T10:35:59 wayland: Add a hint to disable video mode emulation under Wayland Add the hint "SDL_VIDEO_WAYLAND_MODE_EMULATION", which can be used to disable mode emulation under Wayland. When disabled, only the desktop and/or native display resolution is exposed.
Frank Praznik e9d3dcea 2022-05-14T18:32:05 wayland: Unify integer and fractional output scaling Previously, scale values used by the displays and surfaces were always integers, with fractional scale values only being calculated when the backbuffer and viewport sizes were being determined. Now, if xdg-output is available, the fractional scale of output displays is calculated when the displays are enumerated and the true scale values of the output devices are used whenever possible. This unifies the integer and fractional scaling systems, allows for the use of more accurate scale values that minimize overdraw when windows straddle multiple outputs, and lays the groundwork for the pending Wayland scaling protocols that will report the preferred scale values per-surface instead of per-output.
Frank Praznik 4fde7dd8 2022-05-14T14:42:52 wayland: Refactor the Wayland mode emulation and viewport logic Compartmentalize the fullscreen mode emulation code blocks, unify the windowed/fullscreen viewport logic, consolidate all window geometry code into a central function to eliminate blocks of duplicate code and rename related variables and functions to more explicitly reflect their purpose.
Guldoman d11702ce 2022-05-05T02:34:16 ime: wayland: Make use of `SDL_TEXTEDITING_EXT` Because we were sending multiple chunks of preedit strings, `SDL_SendEditingText` was using the old `SDL_TEXTEDITING` event only. Now if `SDL_HINT_IME_SUPPORT_EXTENDED_TEXT` is enabled, we send the full string and correctly set the cursor position and selection size.
David Gow 847539af 2022-06-01T23:06:19 wayland: Only call libdecor_dispatch() if we've loaded libdecor As of #5703, we call libdecor_dispatch() in Wayland_WaitEventTimeout(), but this will crash if we don't load libdecor, as SDL_VideoData::shell.libdecor will be NULL. Since we don't load libdecor if we don't intend to use it (i.e., if should_use_libdecor returns false), this results in a crash under KDE in almost all circumstances.
Christian Rauch e59cba95 2022-05-21T13:50:56 add libdecor_dispatch
Pierre Wendling 501a4991 2022-05-05T18:44:32 Add clang-format on/off comments where necessary. Comments were added in places where INDENT-ON/OFF comments are. Places like stdlib's asm don't need it as clang-format doesn't try to indent it.
Ethan Lee e4bb3c86 2022-05-11T18:13:44 wayland: Fix build for configs without libdecor
Ethan Lee 6222bd31 2022-05-11T16:26:43 wayland: Don't create a new libdecor context if one already exists
Ethan Lee 6f88cbe4 2022-05-11T16:04:34 wayland: Support xdg_decoration requesting client-side decorations. Don't be fooled by the diff size - this ended up being a big refactor of the shell surface management, masked only by some helper macros I wrote for the popup support. This change makes it so when xdg_decoration is supported, but CSD is requested, the system bails on xdg support entirely and resets all the windows to use libdecor instead. This transition isn't pretty, but once it's done it will be smooth if decorations are an OS toggle since libdecor will take things from there. In hindsight, we really should have designed libdecor to be passed a toplevel, having it manage that for us keeps causing major refactors for _every_ change.
Frank Praznik aeadbdd7 2022-04-20T09:00:00 Remove an unused function prototype
Frank Praznik c8c59a21 2022-04-20T08:58:58 Fix a -Wshadow warning
Ethan Lee c37090f9 2022-04-18T12:30:08 wayland: Add support for TOOLTIP/POPUP_MENU
Frank Praznik edb473cf 2022-04-15T15:03:28 video: Wayland: Always round scaled pointer coordinates down Rounding up can cause the pointer coordinates to exceed the window boundaries at the right and bottom edges.
Frank Praznik 13393a1c 2022-04-15T14:28:07 video: Wayland: Clamp fullscreen window dimensions to desktop A scaled fullscreen window may exceed the bounds of the desktop. Clamp the window size to the desktop dimensions in fullscreen mode.
David Gow 9c2f46b0 2022-04-12T15:23:22 Wayland: Add SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR This hint allows libdecor to be used even when xdg-decoration is available. It's mostly useful for debugging libdecor, but could in theory be used by applications which want to (for example) bundle their own libdecor plugins.
Frank Praznik c2093fab 2022-04-08T13:58:45 video: wayland: Set the surface damage region when using fullscreen viewports When using emulated display modes, the output size is often larger than the drawable buffer. As the surface damage region is automatically calculated from the smaller drawable buffer size, the damage region needs to be manually set to cover the entire viewport region or visual repaint artifacts can result.
Ethan Lee d1f7f9e3 2022-04-06T11:18:46 wayland: Pin the fake window position at (0, 0). I kind of thought it'd be nice to have it in the center, but this is an issue for applications that still assume global mouse and window positions are accessible. For example, this fixes cursor offset issues in UE5.
Ethan Lee 279aeb59 2022-04-06T01:32:57 wayland: Add a bug link for the detach FIXME
Ethan Lee 3ada694e 2022-04-06T01:18:03 wayland: Try to detach at the beginning of ShowWindow, just in case. It's possible that an external component (probably a GL/VK context) committed, so we need to cover our bases and detach in both HideWindow and ShowWindow. Fixes a crash in UE5 editor's pop-ups.
Ethan Lee dcfb7fff 2022-04-06T00:55:32 wayland: Evaluate WINDOWPOS_CENTERED_DISPLAY for move events Partially fixes the mouse cursor in UE5 editor. Imperfect because UE5 uses window position and global mouse state to get position, but of course we don't have global mouse and this is just to get the right display index so this still fails overall. We really need to make global mouse support a feature query...
Weng Xuetian 138d96c8 2022-04-05T19:30:25 Send key release event to input method. (#5281) Co-authored-by: Ethan Lee <flibitijibibo@gmail.com>
Frank Praznik 4d1905c9 2022-03-29T13:34:14 video: wayland: Use viewports for non-fullscreen windows with fractional scaling Use viewports for non-fullscreen windows when the desktop uses fractional scaling and the window is flagged as DPI-aware to provide a backbuffer mapped as close to 1:1 output as possible. In the cases of odd window sizes the backbuffer may be a pixel off of scaling perfectly into the window size due to its scaled size being rounded off, but a minute amount of scaling during output is likely preferable to the large amounts of overdraw needed with integer scaled buffers.
Frank Praznik fa4c5198 2022-03-28T21:32:30 video: wayland: Expose more resolutions for mode emulation Expose as many emulated display modes as possible. They will currently display stretched to the display's native desktop aspect, but if an application requires a hardcoded resolution, it will work at minimum. Aside from the change in the emulated display mode list, the Wayland event handling code had to be updated to support separate scaling for the x and y axes, as square pixels are no longer guaranteed.
Ethan Lee d875416a 2022-03-28T15:32:30 wayland: Minor fix for old compilers
Frank Praznik 4d76c9cb 2022-03-25T20:35:07 video: wayland: Use wp-viewporter for fullscreen with non-native resolutions Wayland doesn't support mode switching, however Wayland compositors can support the wp_viewporter protocol, which allows for the mapping of arbitrarily sized buffer regions to output surfaces. Use this functionality, when available, for fullscreen output when using non-native display modes and/or when dealing with scaled desktops, which can incur significant overdraw without this extension. This also allows for the exposure of arbitrarily sized, emulated display modes, which can be useful for legacy compatability.
Ethan Lee 713a6754 2022-03-26T22:26:15 wayland: Relax the check for mismatching output scales
Ethan Lee 5655be15 2022-03-26T19:57:39 wayland: Avoid overwriting xdg_output position with wl_output position
Ethan Lee 40417b18 2022-03-26T19:55:04 wayland: Work around a GNOME xdg_output scaling issue
Ethan Lee 7a1c45bd 2022-03-25T12:51:38 wayland: Optimize keyboard_handle_modifiers. 1. Mod index values are (mostly) constant, so can be done with xkb_state_new 2. Mods can change without the group changing, avoid remap events if possible Lastly, as a bonus, I added braces to the locale check, because I was nearby.
Ethan Lee 2891f082 2022-03-25T02:49:49 wayland: Use xkb_keymap_mod to set mod state
Ethan Lee 6d9ca926 2022-03-25T01:36:39 wayland: Enforce text capitalization manually, for remapped keymods
Ethan Lee a75c6150 2022-03-25T01:33:40 wayland: Add an xkb_keysym_t->SDL_Keycode mapping for backspace
Ethan Lee ab74b6a3 2022-03-24T15:34:29 wayland: Remove some now-redundant casts
Ethan Lee ee52ad08 2022-03-24T15:32:25 wayland: Minor fixes for old compilers
Simon McVittie b4d28085 2022-03-24T18:30:32 wayland: Don't overwrite error message from SDL_EGL_CreateSurface SDL_EGL_CreateSurface sets a more specific error message, so overwriting it would lose information. Signed-off-by: Simon McVittie <smcv@collabora.com>
Simon McVittie d5bbbd3f 2022-03-24T18:23:35 Avoid depending on libwayland 1.20 unnecessarily When using shared linking (linking in the normal way with -lwayland-client) rather than loading Wayland libraries dynamically at runtime, listing symbols that don't exist in the current version results in a build failure. We don't actually call wl_proxy_marshal_flags() or wl_proxy_marshal_array_flags() directly; the reason we need them is that they're called by the code generated by wayland-scanner >= 1.20. If we're building against an older Wayland library, then we'll have its corresponding version of wayland-scanner (mismatched versions are not supported), so we won't need those two symbols, and can avoid generating a dependency on them. Conversely, if we're building against a newer Wayland library, the generated code will call them unconditionally, so we cannot treat them as optional and gracefully fall back: that would result in a crash. Instead, treat them as a mandatory part of the Wayland library, so that if they are not found at runtime, we can fall back to X11 without crashing. libwayland 1.18 is in several LTS distributions (Ubuntu 20.04, Debian 11, RHEL 8) so avoiding a hard dependency on 1.20 is quite useful. Signed-off-by: Simon McVittie <smcv@collabora.com> Resolves: https://github.com/libsdl-org/SDL/issues/5376
Frank Praznik 0dae35bf 2022-03-19T15:58:47 video: wayland: Use xdg-output for retrieving the desktop dimensions Using wl-output to get the desktop display dimensions and dividing by the integer scale factor will not return the correct result when using a desktop with fractional scaling (e.g. a 3840x2160 display at 150% will incorrectly report the scaled desktop area as 1920x1080 instead of 2560x1440). Use the xdg-output protocol, if available, to retrieve the correct desktop dimensions and offset. Versions 1 through 3 of the protocol are supported.
Florian "sp1rit"​ 9125b244 2022-03-23T13:46:25 wayland: Basic support for zwp_tablet_*v2 protocol
Ethan Lee 13337e17 2022-03-23T13:27:01 wayland: The rest of the wayland-client 1.18 requirement... Git, please
Weng Xuetian b11dfd76 2022-02-01T14:43:26 Only generate key repetition for keys that should repeat on wayland. This fix repetition on modifier keys, e.g. Control.
Weng Xuetian a90a2e75 2022-01-30T16:44:44 Fix text_input_v3 preedit string For every batch of text_input_v3 updates, if there is no preedit in this batch, preedit should be cleared.
Cameron Gutman cc40f732 2022-01-26T21:09:39 wayland: Round the refresh rate rather than truncating it A 59999 mHz monitor should be reported as 60 Hz, not 59 Hz.
Cameron Gutman 77a9ca6b 2022-01-26T18:26:07 wayland: Fix SDL_SetWindowSize() being dropped right after exiting fullscreen If we get a SDL_SetWindowSize() call right after SDL_SetWindowFullscreen() but before we've gotten a new configure event from the compositor, the attempt to set our window size will silently fail (when libdecor is enabled). Fix this by remembering that we need to commit a new size, so we can do that in decoration_frame_configure().
Ethan Lee 68a71f91 2022-01-25T11:18:04 wayland: Try to avoid committing before the window is shown
Ethan Lee f0e768da 2022-01-25T13:07:00 wayland: Call SetFullscreen directly in ShowWindow. This cuts out an extra flush when getting the first configure event.
Ethan Lee e2d74bcb 2022-01-25T11:16:09 wayland: Detach hidden surfaces in HideWindow, not ShowWindow
Ethan Lee e1b4761c 2022-01-20T14:10:56 wayland: Avoid calling SetFullscreen in libdecor ShowWindow. This caused some weird stuff to happen in the libdecor path, probably because the window hasn't actually been mapped yet. It ends up calling stuff that should not yet apply, and so fullscreen in particular would have a really messed up titlebar. The good news is, libdecor is good about tracking fullscreen state, so we can let the callback do this for us. Keep this for xdg_shell because we actually map the window ourselves, so we know this call is valid for that path.
Ethan Lee ed3442d7 2022-01-19T15:47:52 wayland: Fix building with SDL_OPENGL=OFF
Cameron Gutman d3952a8a 2022-01-16T15:14:33 wayland: Avoid spurious resize events
Ethan Lee 9a2bbd8a 2022-01-12T13:01:05 wayland: Convert URI to local path for DropFile
Ethan Lee 3e1b3bc3 2022-01-10T10:07:44 wayland: Horizontal wheel values do not need to be inverted
Joan Bruguera 9e6249fa 2022-01-08T19:24:47 wayland: Avoid spurious key repeats when not pumping events Previous to this commit, key repeats events were typically generated when pumping events, based on the time of when the events are pumped. However, if an application doesn't call `SDL_PumpEvents` for some seconds, this time can be multiple seconds in the future compared to the actual key up event time, and generates key repeats even if a key was pressed only for an instant. In practice, this can happen when the user presses a key which causes the application to do something without pumping events (e.g. load a level). In Crispy Doom & PrBoom+, when the user presses the key bound to "Restart level/demo", the game doesn't pump events during the "screen melt" effect, and the level is restarted multiple times due to spurious repeats. To fix this, if the key up event is among the events to be pumped, we generate the key repeats there, since in the Wayland callback we receive the time when the key up event happened. Otherwise, we know no key up event happened and we can generate as many repeats as necessary after pumping. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
Joan Bruguera 461724d2 2022-01-08T19:09:35 wayland: Refactor time fields in SDL_WaylandKeyboardRepeat Refactorization with no functional changes. Instead of `next_repeat_ms` containing a timestamp based on SDL ticks, we make it zero-based relative to the key press time, and we store the key press time in SDL ticks in a new field. This refactorization is groundwork for future commits which need to use the key press and release timestamps provided by the Wayland API, which are also expressed in milliseconds, but whose base does not match the one for SDL ticks. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
Joan Bruguera fb0c3040 2022-01-08T21:10:14 wayland: Avoid infinite loop in keyboard_repeat_handle If `repeat_info->next_repeat_ms` overflows, many key presses will be generated. In the worst case, `now = 0xFFFFFFFFU` and the loop will never terminate. Rearrange the comparison in order to gracefully handle the overflow case. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
Sam Lantinga 120c76c8 2022-01-03T09:40:00 Updated copyright for 2022
Ethan Lee 4c9966ee 2021-12-16T10:22:27 wayland: Add a note for why we check 0,0 for fullscreen configurations
David Redondo e2ade2bf 2021-12-10T16:22:34 Fix build against wayland 1.20 Fixes #5088
Valentin Hăloiu cb8fa5f9 2021-12-04T03:50:12 wayland: fix keycodes of swapped xkb modifier keys
David Gow a709b5b6 2021-12-04T14:14:47 video: wayland: Handle 0x0 xdg_toplevel_configure in fullscreen The xdg_shell spec seems to state[1] that xdg_toplevel_configure events can always provide a 0×0 width/height to signal that the compositor doesn't care. SDL previously assumed the provided width/height was always valid for fullscreen windows, and so applied it as-is. This broke SDL applications on KDE/KWin 5.23, which now sends 0×0 configure events (and, in 5.23.3, 1×1 events for some reason), breaking all SDL applications in fullscreen[2]. [1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/6 [2]: https://bugs.kde.org/show_bug.cgi?id=444962#c6
Ethan Lee 72e53e4b 2021-11-28T19:25:22 wayland: Clear driverdata before calling ResetDisplayModes
Sam Lantinga 57366285 2021-11-23T20:14:18 Only send display events for hotplugged displays, not the initial state
Sylvain 381f99a3 2021-11-23T10:58:04 Fix warnings: re-add enum forward declaration
Sylvain dd6817b3 2021-11-23T10:47:34 Fix warnings: static function, {} initializier, un-needed enum forward declaration
Sylvain fae70349 2021-11-23T10:33:12 Fix warnings: static, include, un-initialized vairables
Sylvain cb9f85e8 2021-11-22T11:18:01 Don't use "round", so that it's doesn't show up while searching for the function
Sylvain d31251b0 2021-11-21T22:30:48 use SDL's functions version inplace of libc version
Sam Lantinga c97b7218 2021-11-21T12:18:10 Added SDL_PremultiplyAlpha() to premultiply alpha on a block of SDL_PIXELFORMAT_ARGB8888 pixels
Ethan Lee a7a54e64 2021-11-18T00:43:55 wayland: Add support for display connect/disconnect events
Ethan Lee 5cc23868 2021-11-15T11:52:43 wayland: Add support for SDL_DisplayOrientation
Ozkan Sezer 781caec2 2021-11-15T00:55:24 SDL_waylandevents.c (keyboard_handle_keymap): silenced -Wwrite-strings .
Cameron Gutman 674f361d 2021-11-13T11:44:04 wayland: Fix memory leaks in clipboard code
Ethan Lee 63ae103c 2021-11-11T13:16:34 wayland: QTWAYLAND_CONTENT_ORIENTATION can support multiple values as bitmasks
Ethan Lee ae67c7d2 2021-11-09T01:30:00 Implemented SDL_SetWindowMouseRect() on Wayland
Sam Lantinga d95a52c9 2021-11-08T09:39:21 Fixed comment typo
Ethan Lee fc998b8e 2021-11-08T12:37:10 wayland: Return true for HasScreenKeyboardSupport only if no physical keyboard exists
Cameron Gutman a5598649 2021-10-30T19:30:34 x11/wayland: Fix signal handling while blocking in WaitEventTimeout() Add a new flag to avoid suppressing EINTR in SDL_IOReady(). Pass the flag in WaitEventTimeout() to ensure that a SIGINT will wake up SDL_WaitEvent() without another event coming in.
Cameron Gutman c97c4687 2021-10-30T15:56:54 core: Convert SDL_IOReady()'s 2nd parameter to flags
Cameron Gutman 2bf36bfa 2021-10-24T21:28:04 wayland: Implement WaitEventTimeout() and SendWakeupEvent() We can have spurious wakeups in WaitEventTimeout() due to Wayland events that don't end up causing us to generate an SDL event. Fortunately for us, SDL_WaitEventTimeout_Device() handles this situation properly by calling WaitEventTimeout() again with an adjusted timeout.
Cameron Gutman 408a93a1 2021-10-23T15:43:04 wayland: Use multi-thread event reading APIs Wayland provides the prepare_read()/read_events() family of APIs for reading from the display fd in a deadlock-free manner across multiple threads in a multi-threaded application. Let's use those instead of trying to roll our own solution using a mutex. This fixes an issue where a call to SDL_GL_SwapWindow() doesn't swap buffers if it happens to collide with SDL_PumpEvents() in the main thread. It also allows coexistence with other code or toolkits in our process that may want read and dispatch events themselves.
David Gow b528d484 2021-10-22T16:59:46 wayland: Wayland cursors should use premultiplied alpha It turns out that Wayland's WL_SHM_FORMAT_ARGB8888 format (and, indeed, all wayland RGBA formats) should be treated as premultiplied. SDL surfaces tend not to be premultiplied, and this is assumed by other backends when dealing with cursors. This change premultiplies the cursor surface in Wayland_CreateCursor() using the new SDL_PremultiplySurfaceAlphaToARGB8888(). In so doing, it also adds support for a wider range of input surfaces, including those with non-ARGB8888 pixel formats, and those which don't have pitch==width. This should fix #4856
Väinö Mäkelä ad520573 2021-10-06T09:52:06 wayland: Only dispatch frame events in Wayland_GLES_SwapWindow Dispatching all events in Wayland_GLES_SwapWindow leads to resizes being acked before the program has a chance to handle the resize. This change reduces jumping on fullscreen transition with apps that call SDL_PollEvent before issuing any render calls.
David Gow eadc8f93 2021-10-02T23:08:39 wayland: Cleanup some SDL_TryLockMutex() calls. Check the result of these against 0 explicitly, so that it's obvious we're bailing out on failure, not success.
David Gow 25f9e32b 2021-10-02T16:52:43 wayland: Don't let multiple threads dispatch wayland events at once wl_display_dispatch() will block if there are no events available, and while we try to avoid this by using SDL_IOReady() to verify there are events before calling it, there is a race condition between SDL_IOReady() and wl_display_dispatch() if multiple threads are involved. This is made more likely by the fact that SDL_GL_SwapWindow() calls wl_display_dispatch() if vsync is enabled, in order to wait for frame events. Therefore any program which pumps events on a different thread from SDL_GL_SwapWindow() could end up blocking in one or other of them until another event arrives. This change fixes this by wrapping wl_display_dispatch() in a new mutex, which ensures only one thread can compete for wayland events at a time, and hence the SDL_IOReady() check should successfully prevent either from blocking.
Ethan Lee 0fc43504 2021-09-27T16:41:43 wayland: Add support for XCURSOR_THEME/SIZE
David Gow 35d04558 2021-09-27T16:57:09 video: wayland: Support displays with a 0 refresh rate Some wayland compositors report the refresh rate as 0. Since we want to force a minimum refresh rate of 10 frames worth, we were dividing by the reported refresh rate, causing a divide-by-zero. If the refresh rate is 0, instead force a frame every second if no frame callbacks are received. This fixes bug #4785
Sam Lantinga 9672d581 2021-09-26T14:22:11 Need to check structure version before setting xdg_toplevel to NULL
Cacodemon345 b592e78f 2021-09-25T12:55:41 wayland: Expose xdg_toplevel to SysWM
Ethan Lee 7ed415d2 2021-09-23T14:07:38 wayland: Reuse KeySymToUcs4 to replicate X11 keymap behavior