When showing the window we loop in the wayland backend using a
temporary buffer of blank pixels to force the compositor to finish
setting up the top level surface pronto.
TODO: Set the color of the temmporary buffer to the background color
Avoids a bunch of SIGIWNCH during child startup as not all programs
handle these correctly. Sadly adds about 0.1 seconds of latency to
startup. Will have to look into reducing that. The Wayland protocol is
*so badly* designed.
kwin in Plasma 6 now requires usage of pointer_enter_serial instead of
last received serial for wl_set_cursor_image(). Hopefully, this wont
break any other compositors.
Fixes#7265
It is currently disabled because no compositor seems to support it.
Hyprland reports it as available but using it causes Hyprland to crash.
Plasma 6 is supposed to have it but I am not installing a beta just for
this.
Typical Wayland.
Now can use the full range of standard mouse cursor shapes similar to
those supported by browsers via the CSS cursor property.
Still needs to be fully implemented for cocoa backend.
Also disable live resize begin/end events on Wayland since they are not
reliable.
On platforms that support live resize begin/end use a separately
configurable pause time before the screen is redrawn.
Fixes#6341
Only call wl_surface_commit() after a resize when the correct size buffer is
attached to the surface. This is ensured by setting a flag on the window that prevents
all surface commits till it is cleared. The flag is cleared at next
eglSwapBuffers().
I dont actually understand if this guarantees that the
buffer size is always correct. For example, if the back buffer is
latched when wl_egl_resize_window() is called, the backbuffer will be
correct only after two swaps (I think). Or maybe the old back buffer is
discarded, I cant find any documentation about it.
All I can say is that doing it this way seems to fix the issue.
Thanks to @jadahl for his help with tracking down the root cause.
Fixes#4802