handle VisibilityNotify on x11 so that a window that is mapped but covered by another window is considered as not visible

This commit is contained in:
MALET Jean-Luc 2021-02-28 18:52:09 +01:00
parent 2c7f3ce91b
commit 58de77fc49
2 changed files with 9 additions and 2 deletions

View File

@ -383,6 +383,7 @@ struct _GLFWwindow
GLFWbool focusOnShow; GLFWbool focusOnShow;
GLFWbool mousePassthrough; GLFWbool mousePassthrough;
GLFWbool shouldClose; GLFWbool shouldClose;
GLFWbool visible;
void* userPointer; void* userPointer;
GLFWvidmode videoMode; GLFWvidmode videoMode;
_GLFWmonitor* monitor; _GLFWmonitor* monitor;

View File

@ -119,7 +119,7 @@ static GLFWbool waitForVisibilityNotify(_GLFWwindow* window)
if (!waitForEvent(&timeout)) if (!waitForEvent(&timeout))
return GLFW_FALSE; return GLFW_FALSE;
} }
window->visible = GLFW_TRUE;
return GLFW_TRUE; return GLFW_TRUE;
} }
@ -1838,6 +1838,12 @@ static void processEvent(XEvent *event)
return; return;
} }
case VisibilityNotify :
{
if (event->xvisibility.state == VisibilityFullyObscured) window->visible = GLFW_FALSE;
else window->visible = GLFW_TRUE;
}
case DestroyNotify: case DestroyNotify:
return; return;
} }
@ -2529,7 +2535,7 @@ int _glfwPlatformWindowVisible(_GLFWwindow* window)
{ {
XWindowAttributes wa; XWindowAttributes wa;
XGetWindowAttributes(_glfw.x11.display, window->x11.handle, &wa); XGetWindowAttributes(_glfw.x11.display, window->x11.handle, &wa);
return wa.map_state == IsViewable; return wa.map_state == IsViewable && window->visible == GLFW_TRUE;
} }
int _glfwPlatformWindowMaximized(_GLFWwindow* window) int _glfwPlatformWindowMaximized(_GLFWwindow* window)