On Sat, 17 Sep 2022 11:30:39 -0300 Lucas de Sena <lu...@seninha.org> said:

> 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?

should i assume you're running in a composited environment? (i.e. a compositor
is running redirecting your window rendering to a pixmap)?



-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
Carsten Haitzler - ras...@rasterman.com

Reply via email to