shift.c (1334B)
1 static Arg 2 shift(const Arg *arg, int clients) 3 { 4 Arg shifted; 5 Client *c; 6 unsigned int tagmask = 0; 7 8 #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH 9 shifted.ui = selmon->tagset[selmon->seltags] & ~SPTAGMASK; 10 #else 11 shifted.ui = selmon->tagset[selmon->seltags]; 12 #endif // SCRATCHPADS_PATCH 13 14 #if TAGSYNC_PATCH 15 Monitor *origselmon = selmon; 16 for (selmon = mons; selmon; selmon = selmon->next) 17 #endif // TAGSYNC_PATCH 18 for (c = selmon->clients; c && clients; c = c->next) { 19 if (c == selmon->sel) 20 continue; 21 #if STICKY_PATCH 22 if (c->issticky) 23 continue; 24 #endif // STICKY_PATCH 25 #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH 26 if (!(c->tags & SPTAGMASK)) 27 tagmask |= c->tags; 28 #elif SCRATCHPAD_ALT_1_PATCH 29 if (!(c->tags & SCRATCHPAD_MASK)) 30 tagmask |= c->tags; 31 #else 32 tagmask |= c->tags; 33 #endif // SCRATCHPADS_PATCH 34 } 35 #if TAGSYNC_PATCH 36 selmon = origselmon; 37 #endif // TAGSYNC_PATCH 38 39 do { 40 if (arg->i > 0) // left circular shift 41 shifted.ui = (shifted.ui << arg->i) | (shifted.ui >> (NUMTAGS - arg->i)); 42 else // right circular shift 43 shifted.ui = (shifted.ui >> -arg->i) | (shifted.ui << (NUMTAGS + arg->i)); 44 #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH 45 shifted.ui &= ~SPTAGMASK; 46 #endif // SCRATCHPADS_PATCH 47 } while (tagmask && !(shifted.ui & tagmask)); 48 49 return shifted; 50 }