|
|
@ -158,7 +158,7 @@ static void attachstack(Client *c);
|
|
|
|
static void buttonpress(XEvent *e);
|
|
|
|
static void buttonpress(XEvent *e);
|
|
|
|
static void checkotherwm(void);
|
|
|
|
static void checkotherwm(void);
|
|
|
|
static void cleanup(void);
|
|
|
|
static void cleanup(void);
|
|
|
|
static void cleanupmons(void);
|
|
|
|
static void cleanupmon(Monitor *mon);
|
|
|
|
static void clearurgent(Client *c);
|
|
|
|
static void clearurgent(Client *c);
|
|
|
|
static void configure(Client *c);
|
|
|
|
static void configure(Client *c);
|
|
|
|
static void configurenotify(XEvent *e);
|
|
|
|
static void configurenotify(XEvent *e);
|
|
|
@ -480,22 +480,25 @@ cleanup(void) {
|
|
|
|
XFreeCursor(dpy, cursor[CurNormal]);
|
|
|
|
XFreeCursor(dpy, cursor[CurNormal]);
|
|
|
|
XFreeCursor(dpy, cursor[CurResize]);
|
|
|
|
XFreeCursor(dpy, cursor[CurResize]);
|
|
|
|
XFreeCursor(dpy, cursor[CurMove]);
|
|
|
|
XFreeCursor(dpy, cursor[CurMove]);
|
|
|
|
cleanupmons();
|
|
|
|
while(mons)
|
|
|
|
|
|
|
|
cleanupmon(mons);
|
|
|
|
XSync(dpy, False);
|
|
|
|
XSync(dpy, False);
|
|
|
|
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
|
|
|
|
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
|
cleanupmons(void) {
|
|
|
|
cleanupmon(Monitor *mon) {
|
|
|
|
Monitor *m;
|
|
|
|
Monitor *m;
|
|
|
|
|
|
|
|
|
|
|
|
while(mons) {
|
|
|
|
if(mon == mons)
|
|
|
|
m = mons->next;
|
|
|
|
mons = mons->next;
|
|
|
|
XUnmapWindow(dpy, mons->barwin);
|
|
|
|
else {
|
|
|
|
XDestroyWindow(dpy, mons->barwin);
|
|
|
|
for(m = mons; m && m->next != mon; m = m->next);
|
|
|
|
free(mons);
|
|
|
|
m->next = mon->next;
|
|
|
|
mons = m;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
XUnmapWindow(dpy, mon->barwin);
|
|
|
|
|
|
|
|
XDestroyWindow(dpy, mon->barwin);
|
|
|
|
|
|
|
|
free(mon);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
void
|
|
|
@ -1727,6 +1730,7 @@ updategeom(void) {
|
|
|
|
#ifdef XINERAMA
|
|
|
|
#ifdef XINERAMA
|
|
|
|
if(XineramaIsActive(dpy)) {
|
|
|
|
if(XineramaIsActive(dpy)) {
|
|
|
|
int i, j, n, nn;
|
|
|
|
int i, j, n, nn;
|
|
|
|
|
|
|
|
Client *c;
|
|
|
|
Monitor *m;
|
|
|
|
Monitor *m;
|
|
|
|
XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
|
|
|
|
XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
|
|
|
|
XineramaScreenInfo *unique = NULL;
|
|
|
|
XineramaScreenInfo *unique = NULL;
|
|
|
@ -1755,7 +1759,7 @@ updategeom(void) {
|
|
|
|
|| unique[i].width != m->mw || unique[i].height != m->mh))
|
|
|
|
|| unique[i].width != m->mw || unique[i].height != m->mh))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
dirty = True;
|
|
|
|
dirty = True;
|
|
|
|
m->num = unique[i].screen_number;
|
|
|
|
m->num = i;
|
|
|
|
m->mx = m->wx = unique[i].x_org;
|
|
|
|
m->mx = m->wx = unique[i].x_org;
|
|
|
|
m->my = m->wy = unique[i].y_org;
|
|
|
|
m->my = m->wy = unique[i].y_org;
|
|
|
|
m->mw = m->ww = unique[i].width;
|
|
|
|
m->mw = m->ww = unique[i].width;
|
|
|
@ -1763,10 +1767,22 @@ updategeom(void) {
|
|
|
|
updatebarpos(m);
|
|
|
|
updatebarpos(m);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else { /* less monitors available */
|
|
|
|
else { /* less monitors available nn < n */
|
|
|
|
cleanup();
|
|
|
|
for(i = nn; i < n; i++) {
|
|
|
|
setup();
|
|
|
|
for(m = mons; m && m->next; m = m->next);
|
|
|
|
scan();
|
|
|
|
while(m->clients) {
|
|
|
|
|
|
|
|
dirty = True;
|
|
|
|
|
|
|
|
c = m->clients;
|
|
|
|
|
|
|
|
m->clients = c->next;
|
|
|
|
|
|
|
|
detachstack(c);
|
|
|
|
|
|
|
|
c->mon = mons;
|
|
|
|
|
|
|
|
attach(c);
|
|
|
|
|
|
|
|
attachstack(c);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(m == selmon)
|
|
|
|
|
|
|
|
selmon = mons;
|
|
|
|
|
|
|
|
cleanupmon(m);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
free(unique);
|
|
|
|
free(unique);
|
|
|
|
}
|
|
|
|
}
|
|
|
|