|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|