Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
spectrwm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
search_win's key binding should be M-f on the manpage.
[spectrwm.git]
/
scrotwm.c
diff --git
a/scrotwm.c
b/scrotwm.c
index
9beaa18
..
37cdf48
100644
(file)
--- a/
scrotwm.c
+++ b/
scrotwm.c
@@
-2446,6
+2446,7
@@
focus(struct swm_region *r, union arg *args)
struct ws_win *cur_focus = NULL;
struct ws_win_list *wl = NULL;
struct workspace *ws = NULL;
struct ws_win *cur_focus = NULL;
struct ws_win_list *wl = NULL;
struct workspace *ws = NULL;
+ int all_iconics;
if (!(r && r->ws))
return;
if (!(r && r->ws))
return;
@@
-2471,6
+2472,17
@@
focus(struct swm_region *r, union arg *args)
return;
ws = r->ws;
wl = &ws->winlist;
return;
ws = r->ws;
wl = &ws->winlist;
+ if (TAILQ_EMPTY(wl))
+ return;
+ /* make sure there is at least one uniconified window */
+ all_iconics = 1;
+ TAILQ_FOREACH(winfocus, wl, entry)
+ if (winfocus->iconic == 0) {
+ all_iconics = 0;
+ break;
+ }
+ if (all_iconics)
+ return;
winlostfocus = cur_focus;
winlostfocus = cur_focus;
@@
-2489,9
+2501,13
@@
focus(struct swm_region *r, union arg *args)
/* skip iconics */
if (winfocus && winfocus->iconic) {
/* skip iconics */
if (winfocus && winfocus->iconic) {
- TAILQ_FOREACH_REVERSE(winfocus, wl, ws_win_list, entry)
+ while (winfocus != cur_focus) {
+ if (winfocus == NULL)
+ winfocus = TAILQ_LAST(wl, ws_win_list);
if (winfocus->iconic == 0)
break;
if (winfocus->iconic == 0)
break;
+ winfocus = TAILQ_PREV(winfocus, ws_win_list, entry);
+ }
}
break;
}
break;
@@
-2503,9
+2519,13
@@
focus(struct swm_region *r, union arg *args)
/* skip iconics */
if (winfocus && winfocus->iconic) {
/* skip iconics */
if (winfocus && winfocus->iconic) {
- TAILQ_FOREACH(winfocus, wl, entry)
+ while (winfocus != cur_focus) {
+ if (winfocus == NULL)
+ winfocus = TAILQ_FIRST(wl);
if (winfocus->iconic == 0)
break;
if (winfocus->iconic == 0)
break;
+ winfocus = TAILQ_NEXT(winfocus, entry);
+ }
}
break;
}
break;
@@
-3110,7
+3130,7
@@
send_to_ws(struct swm_region *r, union arg *args)
unsigned char ws_idx_str[SWM_PROPLEN];
union arg a;
unsigned char ws_idx_str[SWM_PROPLEN];
union arg a;
- if (r && r->ws)
+ if (r && r->ws && r->ws->focus)
win = r->ws->focus;
else
return;
win = r->ws->focus;
else
return;
@@
-3138,6
+3158,8
@@
send_to_ws(struct swm_region *r, union arg *args)
unmap_window(win);
TAILQ_REMOVE(&ws->winlist, win, entry);
TAILQ_INSERT_TAIL(&nws->winlist, win, entry);
unmap_window(win);
TAILQ_REMOVE(&ws->winlist, win, entry);
TAILQ_INSERT_TAIL(&nws->winlist, win, entry);
+ if (TAILQ_EMPTY(&ws->winlist))
+ r->ws->focus = NULL;
win->ws = nws;
/* Try to update the window's workspace property */
win->ws = nws;
/* Try to update the window's workspace property */