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 mousePassthrough;
GLFWbool shouldClose;
GLFWbool visible;
void* userPointer;
GLFWvidmode videoMode;
_GLFWmonitor* monitor;

View File

@ -119,7 +119,7 @@ static GLFWbool waitForVisibilityNotify(_GLFWwindow* window)
if (!waitForEvent(&timeout))
return GLFW_FALSE;
}
window->visible = GLFW_TRUE;
return GLFW_TRUE;
}
@ -1838,6 +1838,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;
}
@ -2529,7 +2535,7 @@ int _glfwPlatformWindowVisible(_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;
}
int _glfwPlatformWindowMaximized(_GLFWwindow* window)