diff --git a/src/wl_window.c b/src/wl_window.c index 12ec96be..dcd5e4e0 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -271,6 +271,9 @@ static void destroyDecoration(_GLFWdecorationWayland* decoration) wl_subsurface_destroy(decoration->subsurface); if (decoration->viewport) wp_viewport_destroy(decoration->viewport); + decoration->surface = NULL; + decoration->subsurface = NULL; + decoration->viewport = NULL; } static void destroyDecorations(_GLFWwindow* window) @@ -476,6 +479,7 @@ static void setFullscreen(_GLFWwindow* window, _GLFWmonitor* monitor, int refres monitor->wl.output); } setIdleInhibitor(window, GLFW_TRUE); + destroyDecorations(window); } static GLFWbool createShellSurface(_GLFWwindow* window) @@ -1073,6 +1077,8 @@ void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, else if (window->wl.shellSurface) wl_shell_surface_set_toplevel(window->wl.shellSurface); setIdleInhibitor(window, GLFW_FALSE); + if (window->decorated) + createDecorations(window); } _glfwInputWindowMonitor(window, monitor); }