X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=a6aa81fc17e54f5f2e7d750d1d0c0c90e88e946f;hb=840c2ac2b668265acfd06f73ac2863c3ea111bbe;hp=da7e130abfd6a9044e8496f1e3a6958ab8a7ea99;hpb=75821e934ed90ec6f39ff0a3e20d3eb286b918a8;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index da7e130..a6aa81f 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -1419,14 +1419,19 @@ void cycle_layout(struct swm_region *r, union arg *args) { struct workspace *ws = r->ws; + struct ws_win *winfocus; DNPRINTF(SWM_D_EVENT, "cycle_layout: workspace: %d\n", ws->idx); + winfocus = ws->focus; + ws->cur_layout++; if (ws->cur_layout->l_stack == NULL) ws->cur_layout = &layouts[0]; + ignore_enter = 1; stack(); + focus_win(winfocus); } void @@ -1857,7 +1862,7 @@ void send_to_ws(struct swm_region *r, union arg *args) { int wsid = args->id; - struct ws_win *win = r->ws->focus; + struct ws_win *win = r->ws->focus, *winfocus = NULL; struct workspace *ws, *nws; Atom ws_idx_atom = 0; unsigned char ws_idx_str[SWM_PROPLEN]; @@ -1870,14 +1875,20 @@ send_to_ws(struct swm_region *r, union arg *args) ws = win->ws; nws = &win->s->ws[wsid]; - XUnmapWindow(display, win->id); - /* find a window to focus */ - ws->focus = TAILQ_PREV(win, ws_win_list, entry); - if (ws->focus == NULL) - ws->focus = TAILQ_FIRST(&ws->winlist); - if (ws->focus == win) - ws->focus = NULL; + winfocus = TAILQ_PREV(win, ws_win_list, entry); + if (TAILQ_FIRST(&ws->winlist) == win) + winfocus = TAILQ_NEXT(win, entry); + else { + winfocus = TAILQ_PREV(ws->focus, ws_win_list, entry); + if (winfocus == NULL) + winfocus = TAILQ_LAST(&ws->winlist, ws_win_list); + } + /* out of windows in ws so focus on nws instead */ + if (winfocus == NULL) + winfocus = win; + + XUnmapWindow(display, win->id); TAILQ_REMOVE(&ws->winlist, win, entry); @@ -1900,6 +1911,7 @@ send_to_ws(struct swm_region *r, union arg *args) nws->restack = 1; stack(); + focus_win(winfocus); } void