aboutsummaryrefslogtreecommitdiffstats
path: root/modules/windowmap/windowmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/windowmap/windowmap.c')
-rw-r--r--modules/windowmap/windowmap.c42
1 files changed, 42 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);
+}