- for(i = 0; i < LENGTH(tags); i++)
- tmp[i] = (NULL == arg) ? selview->id : 0;
- tmp[idxoftag(arg)] = selview->id;
- if(memcmp(seltags, tmp, sizeof initags) != 0) {
- memcpy(prevtags, seltags, sizeof initags);
- memcpy(seltags, tmp, sizeof initags);
+ memcpy(tmp, seltags, TAGSZ);
+ if(arg == NULL) {
+ for(i = 0; i < LENGTH(tags); i++)
+ tmp[i] = (vtags[i] == selview->id);
+ }
+ else {
+ i = idxoftag(arg);
+ for(j = 0; j < LENGTH(tags); j++)
+ if(selview->id == vtags[i]) {
+ /* view tag of selview */
+ if(selview->id == vtags[j])
+ tmp[j] = False;
+ }
+ else {
+ /* only touch the view the focus should go */
+ if(vtags[j] == vtags[i])
+ tmp[j] = False;
+ }
+ selview = &views[vtags[i]];
+ tmp[i] = True;
+ }
+ if(memcmp(seltags, tmp, TAGSZ) != 0) {
+ memcpy(prevtags, seltags, TAGSZ);
+ memcpy(seltags, tmp, TAGSZ);