diff --git a/src/wl_platform.h b/src/wl_platform.h index c543d82c..656f0ef1 100644 --- a/src/wl_platform.h +++ b/src/wl_platform.h @@ -76,6 +76,7 @@ typedef struct _GLFWwindowWayland int width, height; GLFWbool visible; GLFWbool maximized; + GLFWbool transparent; struct wl_surface* surface; struct wl_egl_window* native; struct wl_shell_surface* shellSurface; diff --git a/src/wl_window.c b/src/wl_window.c index caa51d3a..32d5f404 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -212,8 +212,8 @@ static GLFWbool createSurface(_GLFWwindow* window, window->wl.height = wndconfig->height; window->wl.scale = 1; - // TODO: make this optional once issue #197 is fixed. - setOpaqueRegion(window); + if (!window->wl.transparent) + setOpaqueRegion(window); return GLFW_TRUE; } @@ -390,6 +390,8 @@ int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { + window->wl.transparent = fbconfig->transparent; + if (!createSurface(window, wndconfig)) return GLFW_FALSE; @@ -514,7 +516,8 @@ void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) window->wl.width = width; window->wl.height = height; wl_egl_window_resize(window->wl.native, scaledWidth, scaledHeight, 0, 0); - setOpaqueRegion(window); + if (!window->wl.transparent) + setOpaqueRegion(window); _glfwInputFramebufferSize(window, scaledWidth, scaledHeight); } @@ -656,9 +659,7 @@ int _glfwPlatformWindowMaximized(_GLFWwindow* window) int _glfwPlatformFramebufferTransparent(_GLFWwindow* window) { - _glfwInputError(GLFW_PLATFORM_ERROR, - "Wayland: Framebuffer transparency attribute not implemented yet"); - return GLFW_FALSE; + return window->wl.transparent; } void _glfwPlatformSetWindowResizable(_GLFWwindow* window, GLFWbool enabled)