When the swap interval was nonzero, EGL on Wayland would wait
indefinitely for a frame callback on a suspended window, causing
applications that call eglSwapBuffers to halt.
This re-implements the wait for a surface frame so that we can add
a reasonable timeout, while setting the EGL swap interval to zero. That
allows applications to make progress despite the window being suspended.
Some insights for how to structure this workaround were gleaned from
dri2_wl_swap_buffers_with_damage in Mesa.
This initial implementation still has a race between glfwHideWindow and
glfwSwapBuffers when rendering on a separate thread. This could lead to
a window becoming visible again after being hidden on the main thread.
Related to #1350Fixes#2582Fixes#2640Fixes#2719Fixes#2723Fixes#2800Fixes#2827
The shared function for reading back context attributes,
_glfwRefreshContextAttribs, did not check whether the newly created
context had been successfully made current. This violated the invariant
that the context TLS slot always points to a valid window and that its
context is current whenever _glfw.platform.getProcAddress is called.
Related to #2327
This skips the buffer swap after the initial glClear performed during
window creation, if the window is single-buffered. This call confused
apitrace into thinking the window was double-buffered.
Fixes#1873.
This completes support for window framebuffer transparency on Windows,
macOS and X11. Note that the hint/attribute may be renamed before
release to clarify its relationship to GLFW_OPACITY.
Fixes#197.
Closes#1079.
Related to #663.
Related to #715.
Related to #723.
Related to #1078.
If the expected constants are defined in hexadecimal in the header then
the error string should also use hexadecimal.
Idea by IntellectualKitty.
Related to #970.
Add separate strings for each client API to make it easier to grep.
Remove 'client' from fallback error messages as API-related error tokens
are used for non-client APIs as well.