diff options
| author | Ivan Kanakarakis <ivan.kanak@gmail.com> | 2012-09-13 20:09:22 +0300 |
|---|---|---|
| committer | Ivan Kanakarakis <ivan.kanak@gmail.com> | 2012-09-20 13:03:11 +0300 |
| commit | 120645c98c9384db9d9b9c521e5b05c112a4059d (patch) | |
| tree | 0f2d200d03b396cd49830ff1af5c4870814f2ea4 | |
| parent | 0925b42d218163c13a8a09d9d0ca4d726682898c (diff) | |
add support for WM_STATE atom and WithdrawnState for windows
| -rw-r--r-- | monsterwm.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/monsterwm.c b/monsterwm.c index e992d31..1ac2b2a 100644 --- a/monsterwm.c +++ b/monsterwm.c @@ -20,7 +20,7 @@ enum { RESIZE, MOVE }; enum { TILE, MONOCLE, BSTACK, GRID, FLOAT, MODES }; -enum { WM_PROTOCOLS, WM_DELETE_WINDOW, WM_COUNT }; +enum { WM_PROTOCOLS, WM_STATE, WM_DELETE_WINDOW, WM_COUNT }; enum { NET_SUPPORTED, NET_FULLSCREEN, NET_WM_STATE, NET_ACTIVE, NET_COUNT }; /** @@ -971,6 +971,7 @@ void setup(void) { XFreeModifiermap(modmap); /* set up atoms for dialog/notification windows */ + wmatoms[WM_STATE] = XInternAtom(dis, "WM_STATE", False); wmatoms[WM_PROTOCOLS] = XInternAtom(dis, "WM_PROTOCOLS", False); wmatoms[WM_DELETE_WINDOW] = XInternAtom(dis, "WM_DELETE_WINDOW", False); netatoms[NET_SUPPORTED] = XInternAtom(dis, "_NET_SUPPORTED", False); @@ -1094,7 +1095,11 @@ void tile(Desktop *d) { void unmapnotify(XEvent *e) { Desktop *d = NULL; Client *c = NULL; - if (e->xunmap.send_event && wintoclient(e->xunmap.window, &c, &d)) removeclient(c, d); + int i; unsigned long l; unsigned char *state = NULL; Atom a; + + if (((XGetWindowProperty(dis, e->xunmap.window, wmatoms[WM_STATE], 0L, 2L, False, wmatoms[WM_STATE], + &a, &i, &l, &l, (unsigned char **)&state) == Success && state == WithdrawnState) || + e->xunmap.send_event) && wintoclient(e->xunmap.window, &c, &d)) removeclient(c, d); } /** |
