+int wm_handle_state(win_t *win, state_t prev, state_t next)
+{
+ row_t *row = NULL;
+ flt_t *flt = NULL;
+
+ printf("wm_handle_state - %p %x -> %x\n", win, prev, next);
+
+ search(wm_tag, win, NULL, NULL, &row, &flt);
+
+ if (!row && !flt && next == ST_SHOW)
+ return wm_insert(win), 1;
+ if ((row || flt) && (next == ST_HIDE || next == ST_ICON))
+ return wm_remove(win), 1;
+
+ if (row) row->state = next;
+ if (flt) flt->state = next;
+
+ if (prev == ST_MAX || prev == ST_FULL ||
+ next == ST_MAX || next == ST_FULL)
+ wm_update();
+
+ return 1;
+}
+