+ /* Hide other tags */
+ for (list_t *tag = wm ->tags; tag; tag = tag->next)
+ if (tag->data != wm_tag) {
+ tag_foreach_col(TAG(tag), dpy, col, row, win)
+ sys_show(win, ST_HIDE);
+ tag_foreach_flt(TAG(tag), dpy, flt, win)
+ sys_show(win, ST_HIDE);
+ }
+
+ /* Set focused window */
+ if (wm_focus)
+ set_focus(wm_focus);
+}
+
+/*******************************
+ * Window management functions *
+ *******************************/
+int wm_handle_event(win_t *win, event_t ev, mod_t mod, ptr_t ptr)
+{
+ if (!win || win == wm_dpy->geom) return 0;
+ //printf("wm_handle_event: %p - %x %c%c%c%c%c\n", win, ev,
+ // mod.up ? '^' : 'v',
+ // mod.alt ? 'a' : '-',
+ // mod.ctrl ? 'c' : '-',
+ // mod.shift ? 's' : '-',
+ // mod.win ? 'w' : '-');
+
+ /* Mouse events */
+ if (EV_MOUSE0 <= ev && ev <= EV_MOUSE7) {
+ if (ev == EV_MOUSE1 && !mod.MODKEY && !mod.up)
+ return raise_float(win), 0;
+ if ((ev == EV_MOUSE3 && mod.MODKEY && !mod.up) ||
+ (ev == EV_MOUSE1 && mod.MODKEY && !mod.up && mod.shift))
+ return set_move(win,ptr,RESIZE), 1;
+ if (ev == EV_MOUSE1 && mod.MODKEY && !mod.up)
+ return set_move(win,ptr,MOVE), 1;
+ if (move_mode != NONE && mod.up)
+ return set_move(win,ptr,NONE), 1;
+ if (ev == EV_MOUSE1 && !mod.up && win->state == ST_SHADE)
+ return set_focus(win), wm_update(), 0;
+ return 0;
+ }
+
+ /* Only handle key-down */
+ if (mod.up)
+ return 0;
+
+ /* Misc */
+ if (mod.MODKEY) {
+#ifdef DEBUG
+ if (ev == EV_F1) return raise_float(win), 1;
+ if (ev == EV_F2) return set_focus(win), 1;
+ if (ev == EV_F3) return sys_show(win, ST_SHOW), 1;
+ if (ev == EV_F4) return sys_show(win, ST_HIDE), 1;
+ if (ev == EV_F7) return sys_show(win, ST_SHADE), 1;
+#endif
+ if (ev == EV_F5) return wm_update(), 1;
+ if (ev == EV_F6) return print_txt(), 1;
+ if (ev == 'q') return sys_exit(), 1;
+ if (ev == 'f') return wm_handle_state(win, win->state,
+ win->state == ST_FULL ? ST_SHOW : ST_FULL);
+ if (ev == 'g') return wm_handle_state(win, win->state,
+ win->state == ST_MAX ? ST_SHOW : ST_MAX);
+ }
+ if (mod.MODKEY && mod.shift) {
+ if (ev == 'c') return sys_show(win, ST_CLOSE), 1;
+ }
+
+ /* Floating layer */
+ if (ev == ' ') {
+ if (mod.MODKEY && mod.shift)
+ return set_layer(win), 1;
+ if (mod.MODKEY)
+ return switch_layer(), 1;
+ }