diff options
author | Devin J. Pohly <djpohly@gmail.com> | 2020-04-23 00:38:09 -0500 |
---|---|---|
committer | Devin J. Pohly <djpohly@gmail.com> | 2020-04-23 00:38:09 -0500 |
commit | 59b09576b934c8837a90312fc8e7723640733172 (patch) | |
tree | 01e4a107b7be441d01febe7ee7dc47ebe7d47631 | |
parent | a634b3f2e46361aa394dc2582023fe499f520d4a (diff) |
restrict focusnext to the same monitor
-rw-r--r-- | dwl.c | 15 |
1 files changed, 9 insertions, 6 deletions
@@ -411,15 +411,18 @@ focus(Client *c, struct wlr_surface *surface) void focusnext(const Arg *arg) { + /* Focus the client on the selected monitor which comes first in tiling + * order after the currently selected client */ Client *sel = selclient(); if (!sel) return; - /* Find the selected client (top of fstack) and focus the client - * following it in tiling order */ - Client *c = wl_container_of(sel->link.next, c, link); - /* Skip the sentinel node if we wrap around the end of the list */ - if (&c->link == &clients) - c = wl_container_of(c->link.next, c, link); + Client *c; + wl_list_for_each(c, &sel->link, link) { + if (&c->link == &clients) + continue; /* wrap past the sentinel node */ + if (VISIBLEON(c, selmon)) + break; /* found it */ + } focus(c, c->xdg_surface->surface); } |