+ break;
+ case ST_SHOW:
+ printf("sys_show: show %p\n", win);
+ if (win->state == ST_FULL)
+ sys_move(win, win->x, win->y, win->w, win->h);
+ XSetWindowBorderWidth(win->sys->dpy, win->sys->xid, border);
+ XMapWindow(win->sys->dpy, win->sys->xid);
+ XSync(win->sys->dpy, False);
+ break;
+ case ST_MAX:
+ printf("sys_show: max %p\n", win);
+ XMapWindow(win->sys->dpy, win->sys->xid);
+ break;
+ case ST_FULL:
+ printf("sys_show: full %p\n", win);
+ win_t *screen = NULL;
+ for (list_t *cur = screens; cur; cur = cur->next) {
+ screen = cur->data;
+ if (win->x >= screen->x && win->x <= screen->x+screen->w &&
+ win->y >= screen->y && win->y <= screen->y+screen->h)
+ break;
+ }
+ XSetWindowBorderWidth(win->sys->dpy, win->sys->xid, 0);
+ XMapWindow(win->sys->dpy, win->sys->xid);
+ XMoveResizeWindow(win->sys->dpy, win->sys->xid,
+ screen->x - screen->sys->strut.left,
+ screen->y - screen->sys->strut.top,
+ screen->w + screen->sys->strut.left + screen->sys->strut.right,
+ screen->h + screen->sys->strut.top + screen->sys->strut.bottom);
+ XRaiseWindow(win->sys->dpy, win->sys->xid);
+ break;
+ case ST_SHADE:
+ printf("sys_show: shade %p\n", win);
+ XMapWindow(win->sys->dpy, win->sys->xid);
+ break;
+ case ST_ICON:
+ printf("sys_show: icon %p\n", win);
+ break;
+ case ST_CLOSE:
+ printf("sys_show: close %p\n", win);
+ if (!win_msg(win, WM_DELETE)) {
+ XGrabServer(win->sys->dpy);
+ XSetErrorHandler(xnoerror);
+ XSetCloseDownMode(win->sys->dpy, DestroyAll);
+ XKillClient(win->sys->dpy, win->sys->xid);
+ XSync(win->sys->dpy, False);
+ XSetErrorHandler(xerror);
+ XUngrabServer(win->sys->dpy);
+ }
+ XDestroyWindow(win->sys->dpy, win->sys->xid);
+ break;