unsigned int i;
const Rule *r;
Monitor *m;
- XClassHint ch = { 0 };
+ XClassHint ch = { NULL, NULL };
/* rule matching */
c->isfloating = c->tags = 0;
- if(XGetClassHint(dpy, c->win, &ch)) {
- class = ch.res_class ? ch.res_class : broken;
- instance = ch.res_name ? ch.res_name : broken;
- for(i = 0; i < LENGTH(rules); i++) {
- r = &rules[i];
- if((!r->title || strstr(c->name, r->title))
- && (!r->class || strstr(class, r->class))
- && (!r->instance || strstr(instance, r->instance)))
- {
- c->isfloating = r->isfloating;
- c->tags |= r->tags;
- for(m = mons; m && m->num != r->monitor; m = m->next);
- if(m)
- c->mon = m;
- }
+ XGetClassHint(dpy, c->win, &ch);
+ class = ch.res_class ? ch.res_class : broken;
+ instance = ch.res_name ? ch.res_name : broken;
+
+ for(i = 0; i < LENGTH(rules); i++) {
+ r = &rules[i];
+ if((!r->title || strstr(c->name, r->title))
+ && (!r->class || strstr(class, r->class))
+ && (!r->instance || strstr(instance, r->instance)))
+ {
+ c->isfloating = r->isfloating;
+ c->tags |= r->tags;
+ for(m = mons; m && m->num != r->monitor; m = m->next);
+ if(m)
+ c->mon = m;
}
- if(ch.res_class)
- XFree(ch.res_class);
- if(ch.res_name)
- XFree(ch.res_name);
}
+ if(ch.res_class)
+ XFree(ch.res_class);
+ if(ch.res_name)
+ XFree(ch.res_name);
c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags];
}
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
- focus(NULL);
if(m)
arrangemon(m);
else for(m = mons; m; m = m->next)
updatebars();
for(m = mons; m; m = m->next)
XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
+ focus(NULL);
arrange(NULL);
}
}
attach(c);
attachstack(c);
XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */
- XMapWindow(dpy, c->win);
setclientstate(c, NormalState);
+ if (c->mon == selmon)
+ unfocus(selmon->sel, False);
+ c->mon->sel = c;
arrange(c->mon);
+ XMapWindow(dpy, c->win);
+ focus(NULL);
}
void
}
else { /* hide clients bottom up */
showhide(c->snext);
- XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
+ XMoveWindow(dpy, c->win, c->w * -2, c->y);
}
}
tag(const Arg *arg) {
if(selmon->sel && arg->ui & TAGMASK) {
selmon->sel->tags = arg->ui & TAGMASK;
+ focus(NULL);
arrange(selmon);
}
}
newtags = selmon->sel->tags ^ (arg->ui & TAGMASK);
if(newtags) {
selmon->sel->tags = newtags;
+ focus(NULL);
arrange(selmon);
}
}
if(newtagset) {
selmon->tagset[selmon->seltags] = newtagset;
+ focus(NULL);
arrange(selmon);
}
}
Client *c;
XUnmapEvent *ev = &e->xunmap;
- if((c = wintoclient(ev->window)))
- unmanage(c, False);
+ if((c = wintoclient(ev->window))) {
+ if(ev->send_event)
+ setclientstate(c, WithdrawnState);
+ else
+ unmanage(c, False);
+ }
}
void
selmon->seltags ^= 1; /* toggle sel tagset */
if(arg->ui & TAGMASK)
selmon->tagset[selmon->seltags] = arg->ui & TAGMASK;
+ focus(NULL);
arrange(selmon);
}