Hi, I'm trying to get VisibilityNotify events to check whether a given window is obscured.
However, I only get VisibilityNotify events after mapping the window. Obscuring it with any other window (be it a sibling or not) does not trigger a VisibilityNotify event, nor when I unobscure it. And when I get such event, the value of `ev.xvisibility.state` is always `VisibilityUnobscured`, even when mapping the window below others. Here's a sample program: #include <stdio.h> #include <X11/Xlib.h> int main(void) { Display *dpy; Window win; XEvent ev; if ((dpy = XOpenDisplay(NULL)) == NULL) return 1; win = XCreateWindow( dpy, XDefaultRootWindow(dpy), 0, 0, 100, 100, 0, CopyFromParent, InputOutput, CopyFromParent, CWEventMask | CWBackPixel, &(XSetWindowAttributes){ .event_mask = VisibilityChangeMask, .background_pixel = BlackPixel(dpy, DefaultScreen(dpy)), } ); XMapWindow(dpy, win); while (!XNextEvent(dpy, &ev)) if (ev.type == VisibilityNotify) printf("visibility: %d\n", ev.xvisibility.state); return 0; } Is that how VisibilityNotify is supposed to work?