diff options
author | Luke Smith <luke@lukesmith.xyz> | 2020-11-07 06:59:38 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-07 06:59:38 -0500 |
commit | 231e403ad0f0217e805db1a233ad75ba2e5d0efc (patch) | |
tree | 48c756ae8a059406a4df82c1bb0da19bee118d56 | |
parent | ad08183a60d259387955c8e5f5f319cc5b8a19c9 (diff) | |
parent | 5a4e8618d05527967e020787babde1b7e116ba91 (diff) |
Merge pull request #129 from dawidpotocki/shiftview-scratchpads
Fix shiftview behavior with scratchpads patch
-rw-r--r-- | shiftview.c | 42 |
1 files changed, 19 insertions, 23 deletions
diff --git a/shiftview.c b/shiftview.c index a52ccd7..3d2706b 100644 --- a/shiftview.c +++ b/shiftview.c @@ -6,33 +6,29 @@ void shiftview(const Arg *arg) { - Arg a; + Arg shifted; Client *c; - unsigned visible = 0; - int i = arg->i; - int count = 0; - int nextseltags, curseltags = selmon->tagset[selmon->seltags]; + unsigned int tagmask = 0; - do { - if(i > 0) // left circular shift - nextseltags = (curseltags << i) | (curseltags >> (LENGTH(tags) - i)); - - else // right circular shift - nextseltags = curseltags >> (- i) | (curseltags << (LENGTH(tags) + i)); + for (c = selmon->clients; c; c = c->next) + if (!(c->tags & SPTAGMASK)) + tagmask = tagmask | c->tags; - // Check if tag is visible - for (c = selmon->clients; c && !visible; c = c->next) - if (nextseltags & c->tags) { - visible = 1; - break; - } - i += arg->i; - } while (!visible && ++count < 10); + shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; + if (arg->i > 0) /* left circular shift */ + do { + shifted.ui = (shifted.ui << arg->i) + | (shifted.ui >> (LENGTH(tags) - arg->i)); + shifted.ui &= ~SPTAGMASK; + } while (tagmask && !(shifted.ui & tagmask)); + else /* right circular shift */ + do { + shifted.ui = (shifted.ui >> (- arg->i) + | shifted.ui << (LENGTH(tags) + arg->i)); + shifted.ui &= ~SPTAGMASK; + } while (tagmask && !(shifted.ui & tagmask)); - if (count < 10) { - a.i = nextseltags; - view(&a); - } + view(&shifted); } void |