- };
- XSetInputFocus(win->sys->dpy, win->sys->xid,
- RevertToPointerRoot, CurrentTime);
- //XSetInputFocus(win->sys->dpy, PointerRoot,
- // RevertToPointerRoot, CurrentTime);
- XSendEvent(win->sys->dpy, win->sys->xid, False, NoEventMask, &ev);
+ });
+
+ /* Set border on focused window */
+ static win_t *last = NULL;
+ if (last)
+ XSetWindowBorder(last->sys->dpy, last->sys->xid, colors[CLR_UNFOCUS]);
+ XSync(win->sys->dpy, False);
+ XSetWindowBorder(win->sys->dpy, win->sys->xid, colors[CLR_FOCUS]);
+ last = win;
+}
+
+void sys_show(win_t *win, state_t state)
+{
+ /* Restore from fullscreen */
+ switch (state) {
+ case ST_SHOW:
+ printf("sys_show: show\n");
+ if (win->sys->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_FULL:
+ printf("sys_show: full\n");
+ 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\n");
+ XMapWindow(win->sys->dpy, win->sys->xid);
+ break;
+ case ST_ICON:
+ printf("sys_show: icon\n");
+ break;
+ case ST_HIDE:
+ printf("sys_show: hide\n");
+ XUnmapWindow(win->sys->dpy, win->sys->xid);
+ break;
+ case ST_CLOSE:
+ printf("sys_show: close\n");
+ XDestroyWindow(win->sys->dpy, win->sys->xid);
+ break;
+ }
+ win->sys->state = state;