tsome minor fixes regarding the new xinerama support - dwm - [fork] customized … | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 6644a6aa2e4267fa67c811f60e6f9f99a0b1e067 | |
parent 3da24539976b4474862415606f641d0f69336729 | |
Author: Anselm R Garbe <[email protected]> | |
Date: Sat, 20 Jun 2009 16:18:02 +0100 | |
some minor fixes regarding the new xinerama support | |
Diffstat: | |
M dwm.c | 78 +++++++++++++++++++----------… | |
1 file changed, 48 insertions(+), 30 deletions(-) | |
--- | |
diff --git a/dwm.c b/dwm.c | |
t@@ -116,6 +116,7 @@ typedef struct { | |
typedef struct { | |
char symbol[4]; | |
+ float mfact; | |
int by, btx; /* bar geometry */ | |
int wx, wy, ww, wh; /* window area */ | |
unsigned int seltags; | |
t@@ -251,7 +252,7 @@ static Display *dpy; | |
static DC dc; | |
static Layout *lt[] = { NULL, NULL }; | |
static Monitor *mon = NULL, *selmon = NULL; | |
-static unsigned int nmons; | |
+static unsigned int nmons = 0; | |
static Window root; | |
/* configuration, allows nested code to access above variables */ | |
#include "config.h" | |
t@@ -1322,10 +1323,10 @@ setmfact(const Arg *arg) { | |
if(!arg || !lt[selmon->sellt]->arrange) | |
return; | |
- f = arg->f < 1.0 ? arg->f + mfact : arg->f - 1.0; | |
+ f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; | |
if(f < 0.1 || f > 0.9) | |
return; | |
- mfact = f; | |
+ selmon->mfact = f; | |
arrange(); | |
} | |
t@@ -1483,7 +1484,7 @@ tile(Monitor *m) { | |
/* master */ | |
c = nexttiled(m, clients); | |
- mw = mfact * m->ww; | |
+ mw = m->mfact * m->ww; | |
resize(c, m->wx, m->wy, (n == 1 ? m->ww : mw) - 2 * c->bw, m->wh - 2 *… | |
if(--n == 0) | |
t@@ -1581,30 +1582,31 @@ unmapnotify(XEvent *e) { | |
void | |
updategeom(void) { | |
#ifdef XINERAMA | |
- int di, x, y, n; | |
- unsigned int dui, i = 0; | |
- Bool pquery; | |
+ int n; | |
+ unsigned int i = 0; | |
Client *c; | |
- Window dummy; | |
XineramaScreenInfo *info = NULL; | |
/* window area geometry */ | |
if(XineramaIsActive(dpy) && (info = XineramaQueryScreens(dpy, &n))) { | |
- nmons = (unsigned int)n; | |
- for(c = clients; c; c = c->next) | |
- if(c->mon >= nmons) | |
- c->mon = nmons - 1; | |
- if(!(mon = (Monitor *)realloc(mon, sizeof(Monitor) * nmons))) | |
- die("fatal: could not realloc() %u bytes\n", sizeof(Mo… | |
- pquery = XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di,… | |
- for(i = 0; i < nmons; i++) { | |
+ if(n != nmons) { | |
+ for(c = clients; c; c = c->next) | |
+ if(c->mon >= n) | |
+ c->mon = n - 1; | |
+ if(!(mon = (Monitor *)realloc(mon, sizeof(Monitor) * n… | |
+ die("fatal: could not realloc() %u bytes\n", s… | |
+ } | |
+ for(i = 0; i < n ; i++) { | |
/* TODO: consider re-using XineramaScreenInfo */ | |
mon[i].symbol[0] = '['; | |
mon[i].symbol[1] = '0' + info[i].screen_number; | |
mon[i].symbol[2] = ']'; | |
mon[i].symbol[3] = 0; | |
- mon[i].showbar = showbar; | |
- mon[i].topbar = topbar; | |
+ if(!selmon) { /* not initialised yet */ | |
+ mon[i].mfact = mfact; | |
+ mon[i].showbar = showbar; | |
+ mon[i].topbar = topbar; | |
+ } | |
mon[i].wx = info[i].x_org; | |
mon[i].wy = mon[i].showbar && mon[i].topbar ? info[i].… | |
mon[i].ww = info[i].width; | |
t@@ -1615,24 +1617,39 @@ updategeom(void) { | |
mon[i].by = mon[i].topbar ? info[i].y_org : mo… | |
else | |
mon[i].by = -bh; | |
- if(pquery && INRECT(x, y, info[i].x_org, info[i].y_org… | |
- selmon = &mon[i]; | |
+ } | |
+ nmons = (unsigned int)n; | |
+ if(!selmon) { | |
+ selmon = &mon[0]; | |
+ int di, x, y; | |
+ unsigned int dui; | |
+ Window dummy; | |
+ if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &d… | |
+ for(i = 0; i < nmons; i++) | |
+ if(INRECT(x, y, info[i].x_org, info[i]… | |
+ selmon = &mon[i]; | |
+ break; | |
+ } | |
} | |
XFree(info); | |
} | |
else | |
#endif /* XINERAMA */ | |
{ | |
- nmons = 1; | |
- if(!(mon = (Monitor *)realloc(mon, sizeof(Monitor)))) | |
- die("fatal: could not realloc() %u bytes\n", sizeof(Mo… | |
- selmon = &mon[0]; | |
- mon[0].symbol[0] = '['; | |
- mon[0].symbol[1] = '0'; | |
- mon[0].symbol[2] = ']'; | |
- mon[0].symbol[3] = 0; | |
- mon[0].showbar = showbar; | |
- mon[0].topbar = topbar; | |
+ if(!mon) { | |
+ nmons = 1; | |
+ if(!(mon = (Monitor *)malloc(sizeof(Monitor)))) | |
+ die("fatal: could not malloc() %u bytes\n", si… | |
+ } | |
+ if(!selmon) { | |
+ mon[0].symbol[0] = '['; | |
+ mon[0].symbol[1] = '0'; | |
+ mon[0].symbol[2] = ']'; | |
+ mon[0].symbol[3] = 0; | |
+ mon[0].mfact = mfact; | |
+ mon[0].showbar = showbar; | |
+ mon[0].topbar = topbar; | |
+ } | |
mon[0].wx = sx; | |
mon[0].wy = mon[0].showbar && mon[0].topbar ? sy + bh : sy; | |
mon[0].ww = sw; | |
t@@ -1643,6 +1660,7 @@ updategeom(void) { | |
mon[0].by = mon[0].topbar ? sy : mon[0].wy + mon[0].wh; | |
else | |
mon[0].by = -bh; | |
+ selmon = &mon[0]; | |
} | |
} | |