if (win->ws->r == NULL)
return;
- grabbuttons(win, 0);
- XSetWindowBorder(display, win->id,
- win->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);
-
if (win->ws->focus == win) {
win->ws->focus = NULL;
win->ws->focus_prev = win;
}
+
+ grabbuttons(win, 0);
+ XSetWindowBorder(display, win->id,
+ win->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color);
}
void
if (win->ws->r != NULL) {
XSetWindowBorder(display, win->id,
win->ws->r->s->c[SWM_S_COLOR_FOCUS].color);
- grabbuttons(win, 1);
if (win->ws->cur_layout->flags & SWM_L_MAPONFOCUS)
XMapRaised(display, win->id);
XSetInputFocus(display, win->id,
RevertToPointerRoot, CurrentTime);
- XSync(display, False);
+ grabbuttons(win, 1);
}
}
void
cyclescr(struct swm_region *r, union arg *args)
{
- struct swm_region *rr;
- int i;
+ struct swm_region *rr = NULL;
+ struct workspace *ws = NULL;
+ struct ws_win *winfocus = NULL;
+ int i, x, y;
/* do nothing if we don't have more than one screen */
if (!(ScreenCount(display) > 1 || outputs > 1))
default:
return;
};
+ if (rr == NULL)
+ return;
+
+ ws = rr->ws;
+ winfocus = ws->focus;
+ if (winfocus == NULL)
+ winfocus = ws->focus_prev;
+ if (winfocus) {
+ /* use window coordinates */
+ x = winfocus->g.x + 1;
+ y = winfocus->g.y + 1;
+ } else {
+ /* use region coordinates */
+ x = rr->g.x + 1;
+ y = rr->g.y + 1 + bar_enabled ? bar_height : 0;
+ }
+
unfocus_all();
XSetInputFocus(display, PointerRoot, RevertToPointerRoot, CurrentTime);
- XWarpPointer(display, None, rr->s[i].root, 0, 0, 0, 0, rr->g.x + 1,
- rr->g.y + bar_enabled + 1 ? bar_height : 0);
+ XWarpPointer(display, None, rr->s[i].root, 0, 0, 0, 0, x, y);
+
+ focus_win(winfocus);
}
void
}
if (font_adjusted)
font_adjusted--;
- XSync(display, False);
}
void
if (ScreenCount(display) > 1 || outputs > 1)
winfocus = win;
-
unmap_window(win);
TAILQ_REMOVE(&ws->winlist, win, entry);
TAILQ_INSERT_TAIL(&nws->winlist, win, entry);