diff options
| author | Nikita Langer <nikitalanger@icloud.com> | 2026-04-06 22:13:26 +0200 |
|---|---|---|
| committer | Nikita Langer <nikitalanger@icloud.com> | 2026-04-06 22:13:26 +0200 |
| commit | dad6dc77433e661b54458978cb888fd38ae15a97 (patch) | |
| tree | ed0ea2232063526124609e8e1fde67bdff72031d /modules/windowmap | |
| download | vxwm-master.tar.gz vxwm-master.tar.bz2 vxwm-master.tar.xz vxwm-master.zip | |
Diffstat (limited to 'modules/windowmap')
| -rw-r--r-- | modules/windowmap/windowmap.c | 42 | ||||
| -rw-r--r-- | modules/windowmap/windowmap.h | 3 |
2 files changed, 45 insertions, 0 deletions
diff --git a/modules/windowmap/windowmap.c b/modules/windowmap/windowmap.c new file mode 100644 index 0000000..ef76153 --- /dev/null +++ b/modules/windowmap/windowmap.c @@ -0,0 +1,42 @@ +void +window_set_state(Display *dpy, Window win, long state) +{ + long data[] = { state, None }; + + XChangeProperty(dpy, win, wmatom[WMState], wmatom[WMState], 32, + PropModeReplace, (unsigned char*)data, 2); +} + +void +window_map(Display *dpy, Client *c, int deiconify) +{ + Window win = c->win; + + if (deiconify) + window_set_state(dpy, win, NormalState); + + XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); + XMapWindow(dpy, win); + focus(NULL); +} + +void +window_unmap(Display *dpy, Window win, Window root, int iconify) +{ + static XWindowAttributes ca, ra; + + XGetWindowAttributes(dpy, root, &ra); + XGetWindowAttributes(dpy, win, &ca); + + /* Prevent UnmapNotify events */ + XSelectInput(dpy, root, ra.your_event_mask & ~SubstructureNotifyMask); + XSelectInput(dpy, win, ca.your_event_mask & ~StructureNotifyMask); + + XUnmapWindow(dpy, win); + focus(NULL); + if (iconify) + window_set_state(dpy, win, IconicState); + + XSelectInput(dpy, root, ra.your_event_mask); + XSelectInput(dpy, win, ca.your_event_mask); +} diff --git a/modules/windowmap/windowmap.h b/modules/windowmap/windowmap.h new file mode 100644 index 0000000..993b83a --- /dev/null +++ b/modules/windowmap/windowmap.h @@ -0,0 +1,3 @@ +static void window_set_state(Display *dpy, Window win, long state); +static void window_map(Display *dpy, Client *c, int deiconify); +static void window_unmap(Display *dpy, Window win, Window root, int iconify); |
