- printf("map_req: %d\n", type);
- if ((win = win_find(dpy,xe->xmaprequest.window,1))) {
- if (!strut_add(root, win))
- wm_insert(win);
- else
- wm_update();
+ printf("map_req: %lx\n", xe->xmaprequest.window);
+ win = win_find(dpy,xe->xmaprequest.window,1);
+ // fixme, for hide -> max, etc
+ if (win->state == ST_HIDE)
+ win->state = ST_SHOW;
+ sys_show(win, win->state);
+ }
+ else if (type == ClientMessage) {
+ XClientMessageEvent *cme = &xe->xclient;
+ printf("client_msg: %lx - %ld %ld,%ld,%ld,%ld,%ld\n",
+ cme->window, cme->message_type,
+ cme->data.l[0], cme->data.l[1], cme->data.l[2],
+ cme->data.l[3], cme->data.l[4]);
+ if ((win = win_find(dpy,cme->window,0)) &&
+ (cme->message_type == atoms[NET_STATE]) &&
+ (cme->data.l[1] == atoms[NET_FULL] ||
+ cme->data.l[2] == atoms[NET_FULL])) {
+ state_t next = (cme->data.l[0] == 1 || /* _NET_WM_STATE_ADD */
+ (cme->data.l[0] == 2 && /* _NET_WM_STATE_TOGGLE */
+ win->state != ST_FULL)) ? ST_FULL : ST_SHOW;
+ printf("client_msg: fullscreen %x -> %x", win->state, next);
+ wm_handle_state(win, win->state, next);
+ sys_show(win, next);