diff --git a/src/internal.h b/src/internal.h index 4f097aa8..11bdbdc2 100644 --- a/src/internal.h +++ b/src/internal.h @@ -539,6 +539,7 @@ struct _GLFWwindow GLFWbool focusOnShow; GLFWbool mousePassthrough; GLFWbool shouldClose; + GLFWbool visible; void* userPointer; GLFWbool doublebuffer; GLFWvidmode videoMode; diff --git a/src/x11_window.c b/src/x11_window.c index 322349f0..40a88a48 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -149,7 +149,7 @@ static GLFWbool waitForVisibilityNotify(_GLFWwindow* window) if (!waitForX11Event(&timeout)) return GLFW_FALSE; } - + window->visible = GLFW_TRUE; return GLFW_TRUE; } @@ -1828,6 +1828,12 @@ static void processEvent(XEvent *event) return; } + case VisibilityNotify : + { + if (event->xvisibility.state == VisibilityFullyObscured) window->visible = GLFW_FALSE; + else window->visible = GLFW_TRUE; + } + case DestroyNotify: return; } @@ -2541,7 +2547,7 @@ GLFWbool _glfwWindowVisibleX11(_GLFWwindow* window) { XWindowAttributes wa; XGetWindowAttributes(_glfw.x11.display, window->x11.handle, &wa); - return wa.map_state == IsViewable; + return wa.map_state == IsViewable && window->visible == GLFW_TRUE; } GLFWbool _glfwWindowMaximizedX11(_GLFWwindow* window)