it* dwm + patches Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/dwm-sdk URL:git://git.codevoid.de/dwm-sdk codevoid.de 70 1Log /git/dwm-sdk/log.gph codevoid.de 70 1Files /git/dwm-sdk/files.gph codevoid.de 70 1Refs /git/dwm-sdk/refs.gph codevoid.de 70 1README /git/dwm-sdk/file/README.gph codevoid.de 70 1LICENSE /git/dwm-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 3b59a15d64e38b4196139bb05bb08b8d2ef49335 /git/dwm-sdk/commit/3b59a15d64e38b4196139bb05bb08b8d2ef49335.gph codevoid.de 70 1parent 03ad240e77c1286808933fed7c3555a905042106 /git/dwm-sdk/commit/03ad240e77c1286808933fed7c3555a905042106.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Thu, 31 Oct 2019 20:04:50 +0100 Err codevoid.de 70 i Err codevoid.de 70 i%retab Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M dwm.c | 3552 +++++++++++++++---------------- Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 1769 insertions(+), 1783 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/dwm.c b/dwm.c /git/dwm-sdk/file/dwm.c.gph codevoid.de 70 it@@ -86,93 +86,93 @@ enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, Err codevoid.de 70 i ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ Err codevoid.de 70 i Err codevoid.de 70 i typedef union { Err codevoid.de 70 i- int i; Err codevoid.de 70 i- unsigned int ui; Err codevoid.de 70 i- float f; Err codevoid.de 70 i- const void *v; Err codevoid.de 70 i+ int i; Err codevoid.de 70 i+ unsigned int ui; Err codevoid.de 70 i+ float f; Err codevoid.de 70 i+ const void *v; Err codevoid.de 70 i } Arg; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct { Err codevoid.de 70 i- unsigned int click; Err codevoid.de 70 i- unsigned int mask; Err codevoid.de 70 i- unsigned int button; Err codevoid.de 70 i- void (*func)(const Arg *arg); Err codevoid.de 70 i- const Arg arg; Err codevoid.de 70 i+ unsigned int click; Err codevoid.de 70 i+ unsigned int mask; Err codevoid.de 70 i+ unsigned int button; Err codevoid.de 70 i+ void (*func)(const Arg *arg); Err codevoid.de 70 i+ const Arg arg; Err codevoid.de 70 i } Button; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct Monitor Monitor; Err codevoid.de 70 i typedef struct Client Client; Err codevoid.de 70 i struct Client { Err codevoid.de 70 i- char name[256]; Err codevoid.de 70 i- float mina, maxa; Err codevoid.de 70 i- int x, y, w, h; Err codevoid.de 70 i- int oldx, oldy, oldw, oldh; Err codevoid.de 70 i- int basew, baseh, incw, inch, maxw, maxh, minw, minh; Err codevoid.de 70 i- int bw, oldbw; Err codevoid.de 70 i- unsigned int tags; Err codevoid.de 70 i- int ismax, wasfloating, isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; Err codevoid.de 70 i- Client *next; Err codevoid.de 70 i- Client *snext; Err codevoid.de 70 i- Monitor *mon; Err codevoid.de 70 i- Window win; Err codevoid.de 70 i+ char name[256]; Err codevoid.de 70 i+ float mina, maxa; Err codevoid.de 70 i+ int x, y, w, h; Err codevoid.de 70 i+ int oldx, oldy, oldw, oldh; Err codevoid.de 70 i+ int basew, baseh, incw, inch, maxw, maxh, minw, minh; Err codevoid.de 70 i+ int bw, oldbw; Err codevoid.de 70 i+ unsigned int tags; Err codevoid.de 70 i+ int ismax, wasfloating, isfixed, isfloating, isurgent, neverfocus, oldstate, isfullscreen; Err codevoid.de 70 i+ Client *next; Err codevoid.de 70 i+ Client *snext; Err codevoid.de 70 i+ Monitor *mon; Err codevoid.de 70 i+ Window win; Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct { Err codevoid.de 70 i- unsigned int mod; Err codevoid.de 70 i- KeySym keysym; Err codevoid.de 70 i- void (*func)(const Arg *); Err codevoid.de 70 i- const Arg arg; Err codevoid.de 70 i+ unsigned int mod; Err codevoid.de 70 i+ KeySym keysym; Err codevoid.de 70 i+ void (*func)(const Arg *); Err codevoid.de 70 i+ const Arg arg; Err codevoid.de 70 i } Key; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct { Err codevoid.de 70 i- const char *symbol; Err codevoid.de 70 i- void (*arrange)(Monitor *); Err codevoid.de 70 i+ const char *symbol; Err codevoid.de 70 i+ void (*arrange)(Monitor *); Err codevoid.de 70 i } Layout; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct Pertag Pertag; Err codevoid.de 70 i struct Monitor { Err codevoid.de 70 i- char ltsymbol[16]; Err codevoid.de 70 i- float mfact; Err codevoid.de 70 i- int nmaster; Err codevoid.de 70 i- int num; Err codevoid.de 70 i- int by; /* bar geometry */ Err codevoid.de 70 i- int mx, my, mw, mh; /* screen size */ Err codevoid.de 70 i- int wx, wy, ww, wh; /* window area */ Err codevoid.de 70 i- unsigned int seltags; Err codevoid.de 70 i- unsigned int sellt; Err codevoid.de 70 i- unsigned int tagset[2]; Err codevoid.de 70 i- int showbar; Err codevoid.de 70 i- int topbar; Err codevoid.de 70 i- Client *clients; Err codevoid.de 70 i- Client *sel; Err codevoid.de 70 i- Client *stack; Err codevoid.de 70 i- Monitor *next; Err codevoid.de 70 i- Window barwin; Err codevoid.de 70 i- const Layout *lt[2]; Err codevoid.de 70 i+ char ltsymbol[16]; Err codevoid.de 70 i+ float mfact; Err codevoid.de 70 i+ int nmaster; Err codevoid.de 70 i+ int num; Err codevoid.de 70 i+ int by; /* bar geometry */ Err codevoid.de 70 i+ int mx, my, mw, mh; /* screen size */ Err codevoid.de 70 i+ int wx, wy, ww, wh; /* window area */ Err codevoid.de 70 i+ unsigned int seltags; Err codevoid.de 70 i+ unsigned int sellt; Err codevoid.de 70 i+ unsigned int tagset[2]; Err codevoid.de 70 i+ int showbar; Err codevoid.de 70 i+ int topbar; Err codevoid.de 70 i+ Client *clients; Err codevoid.de 70 i+ Client *sel; Err codevoid.de 70 i+ Client *stack; Err codevoid.de 70 i+ Monitor *next; Err codevoid.de 70 i+ Window barwin; Err codevoid.de 70 i+ const Layout *lt[2]; Err codevoid.de 70 i Pertag *pertag; Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct { Err codevoid.de 70 i- const char *class; Err codevoid.de 70 i- const char *instance; Err codevoid.de 70 i- const char *title; Err codevoid.de 70 i- unsigned int tags; Err codevoid.de 70 i- int isfloating; Err codevoid.de 70 i- int monitor; Err codevoid.de 70 i+ const char *class; Err codevoid.de 70 i+ const char *instance; Err codevoid.de 70 i+ const char *title; Err codevoid.de 70 i+ unsigned int tags; Err codevoid.de 70 i+ int isfloating; Err codevoid.de 70 i+ int monitor; Err codevoid.de 70 i int neverfocus; Err codevoid.de 70 i } Rule; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct { Err codevoid.de 70 i- int y; Err codevoid.de 70 i- Bool show; Err codevoid.de 70 i- Window win; Err codevoid.de 70 i- char text[256]; Err codevoid.de 70 i+ int y; Err codevoid.de 70 i+ Bool show; Err codevoid.de 70 i+ Window win; Err codevoid.de 70 i+ char text[256]; Err codevoid.de 70 i } Bar; Err codevoid.de 70 i Err codevoid.de 70 i typedef struct Systray Systray; Err codevoid.de 70 i struct Systray { Err codevoid.de 70 i- Window win; Err codevoid.de 70 i- Client *icons; Err codevoid.de 70 i+ Window win; Err codevoid.de 70 i+ Client *icons; Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i /* function declarations */ Err codevoid.de 70 it@@ -292,21 +292,21 @@ static int lrpad; /* sum of left and right padding for text */ Err codevoid.de 70 i static int (*xerrorxlib)(Display *, XErrorEvent *); Err codevoid.de 70 i static unsigned int numlockmask = 0; Err codevoid.de 70 i static void (*handler[LASTEvent]) (XEvent *) = { Err codevoid.de 70 i- [ButtonPress] = buttonpress, Err codevoid.de 70 i- [ClientMessage] = clientmessage, Err codevoid.de 70 i- [ConfigureRequest] = configurerequest, Err codevoid.de 70 i- [ConfigureNotify] = configurenotify, Err codevoid.de 70 i- [DestroyNotify] = destroynotify, Err codevoid.de 70 i- [EnterNotify] = enternotify, Err codevoid.de 70 i- [Expose] = expose, Err codevoid.de 70 i- [FocusIn] = focusin, Err codevoid.de 70 i- [KeyPress] = keypress, Err codevoid.de 70 i- [MappingNotify] = mappingnotify, Err codevoid.de 70 i- [MapRequest] = maprequest, Err codevoid.de 70 i- [MotionNotify] = motionnotify, Err codevoid.de 70 i- [PropertyNotify] = propertynotify, Err codevoid.de 70 i- [ResizeRequest] = resizerequest, Err codevoid.de 70 i- [UnmapNotify] = unmapnotify Err codevoid.de 70 i+ [ButtonPress] = buttonpress, Err codevoid.de 70 i+ [ClientMessage] = clientmessage, Err codevoid.de 70 i+ [ConfigureRequest] = configurerequest, Err codevoid.de 70 i+ [ConfigureNotify] = configurenotify, Err codevoid.de 70 i+ [DestroyNotify] = destroynotify, Err codevoid.de 70 i+ [EnterNotify] = enternotify, Err codevoid.de 70 i+ [Expose] = expose, Err codevoid.de 70 i+ [FocusIn] = focusin, Err codevoid.de 70 i+ [KeyPress] = keypress, Err codevoid.de 70 i+ [MappingNotify] = mappingnotify, Err codevoid.de 70 i+ [MapRequest] = maprequest, Err codevoid.de 70 i+ [MotionNotify] = motionnotify, Err codevoid.de 70 i+ [PropertyNotify] = propertynotify, Err codevoid.de 70 i+ [ResizeRequest] = resizerequest, Err codevoid.de 70 i+ [UnmapNotify] = unmapnotify Err codevoid.de 70 i }; Err codevoid.de 70 i static Atom wmatom[WMLast], netatom[NetLast], xatom[XLast]; Err codevoid.de 70 i static int running = 1; Err codevoid.de 70 it@@ -322,12 +322,12 @@ static Bar eb; Err codevoid.de 70 i #include "config.h" Err codevoid.de 70 i Err codevoid.de 70 i struct Pertag { Err codevoid.de 70 i- unsigned int curtag, prevtag; /* current and previous tag */ Err codevoid.de 70 i- int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ Err codevoid.de 70 i- float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ Err codevoid.de 70 i- unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ Err codevoid.de 70 i- const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ Err codevoid.de 70 i- Bool showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ Err codevoid.de 70 i+ unsigned int curtag, prevtag; /* current and previous tag */ Err codevoid.de 70 i+ int nmasters[LENGTH(tags) + 1]; /* number of windows in master area */ Err codevoid.de 70 i+ float mfacts[LENGTH(tags) + 1]; /* mfacts per tag */ Err codevoid.de 70 i+ unsigned int sellts[LENGTH(tags) + 1]; /* selected layouts */ Err codevoid.de 70 i+ const Layout *ltidxs[LENGTH(tags) + 1][2]; /* matrix of tags and layouts indexes */ Err codevoid.de 70 i+ Bool showbars[LENGTH(tags) + 1]; /* display bar for the current tag */ Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i static unsigned int scratchtag = 1 << LENGTH(tags); Err codevoid.de 70 it@@ -339,550 +339,550 @@ struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; Err codevoid.de 70 i void Err codevoid.de 70 i applyrules(Client *c) Err codevoid.de 70 i { Err codevoid.de 70 i- const char *class, *instance; Err codevoid.de 70 i- unsigned int i; Err codevoid.de 70 i- const Rule *r; Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i- XClassHint ch = { NULL, NULL }; Err codevoid.de 70 i- Err codevoid.de 70 i- /* rule matching */ Err codevoid.de 70 i- c->isfloating = 0; Err codevoid.de 70 i- c->neverfocus = 0; Err codevoid.de 70 i- c->tags = 0; Err codevoid.de 70 i- XGetClassHint(dpy, c->win, &ch); Err codevoid.de 70 i- class = ch.res_class ? ch.res_class : broken; Err codevoid.de 70 i- instance = ch.res_name ? ch.res_name : broken; Err codevoid.de 70 i- Err codevoid.de 70 i- for (i = 0; i < LENGTH(rules); i++) { Err codevoid.de 70 i- r = &rules[i]; Err codevoid.de 70 i- if ((!r->title || strstr(c->name, r->title)) Err codevoid.de 70 i- && (!r->class || strstr(class, r->class)) Err codevoid.de 70 i- && (!r->instance || strstr(instance, r->instance))) Err codevoid.de 70 i- { Err codevoid.de 70 i- c->isfloating = r->isfloating; Err codevoid.de 70 i+ const char *class, *instance; Err codevoid.de 70 i+ unsigned int i; Err codevoid.de 70 i+ const Rule *r; Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i+ XClassHint ch = { NULL, NULL }; Err codevoid.de 70 i+ Err codevoid.de 70 i+ /* rule matching */ Err codevoid.de 70 i+ c->isfloating = 0; Err codevoid.de 70 i+ c->neverfocus = 0; Err codevoid.de 70 i+ c->tags = 0; Err codevoid.de 70 i+ XGetClassHint(dpy, c->win, &ch); Err codevoid.de 70 i+ class = ch.res_class ? ch.res_class : broken; Err codevoid.de 70 i+ instance = ch.res_name ? ch.res_name : broken; Err codevoid.de 70 i+ Err codevoid.de 70 i+ for (i = 0; i < LENGTH(rules); i++) { Err codevoid.de 70 i+ r = &rules[i]; Err codevoid.de 70 i+ if ((!r->title || strstr(c->name, r->title)) Err codevoid.de 70 i+ && (!r->class || strstr(class, r->class)) Err codevoid.de 70 i+ && (!r->instance || strstr(instance, r->instance))) Err codevoid.de 70 i+ { Err codevoid.de 70 i+ c->isfloating = r->isfloating; Err codevoid.de 70 i c->neverfocus = r->neverfocus; Err codevoid.de 70 i- c->tags |= r->tags; Err codevoid.de 70 i- for (m = mons; m && m->num != r->monitor; m = m->next); Err codevoid.de 70 i- if (m) Err codevoid.de 70 i- c->mon = m; Err codevoid.de 70 i- } Err codevoid.de 70 i- } Err codevoid.de 70 i- if (ch.res_class) Err codevoid.de 70 i- XFree(ch.res_class); Err codevoid.de 70 i- if (ch.res_name) Err codevoid.de 70 i- XFree(ch.res_name); Err codevoid.de 70 i- c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; Err codevoid.de 70 i+ c->tags |= r->tags; Err codevoid.de 70 i+ for (m = mons; m && m->num != r->monitor; m = m->next); Err codevoid.de 70 i+ if (m) Err codevoid.de 70 i+ c->mon = m; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (ch.res_class) Err codevoid.de 70 i+ XFree(ch.res_class); Err codevoid.de 70 i+ if (ch.res_name) Err codevoid.de 70 i+ XFree(ch.res_name); Err codevoid.de 70 i+ c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i int Err codevoid.de 70 i applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) Err codevoid.de 70 i { Err codevoid.de 70 i- int baseismin; Err codevoid.de 70 i- Monitor *m = c->mon; Err codevoid.de 70 i- Err codevoid.de 70 i- /* set minimum possible */ Err codevoid.de 70 i- *w = MAX(1, *w); Err codevoid.de 70 i- *h = MAX(1, *h); Err codevoid.de 70 i- if (interact) { Err codevoid.de 70 i- if (*x > sw) Err codevoid.de 70 i- *x = sw - WIDTH(c); Err codevoid.de 70 i- if (*y > sh) Err codevoid.de 70 i- *y = sh - HEIGHT(c); Err codevoid.de 70 i- if (*x + *w + 2 * c->bw < 0) Err codevoid.de 70 i- *x = 0; Err codevoid.de 70 i- if (*y + *h + 2 * c->bw < 0) Err codevoid.de 70 i- *y = 0; Err codevoid.de 70 i- } else { Err codevoid.de 70 i- if (*x >= m->wx + m->ww) Err codevoid.de 70 i- *x = m->wx + m->ww - WIDTH(c); Err codevoid.de 70 i- if (*y >= m->wy + m->wh) Err codevoid.de 70 i- *y = m->wy + m->wh - HEIGHT(c); Err codevoid.de 70 i- if (*x + *w + 2 * c->bw <= m->wx) Err codevoid.de 70 i- *x = m->wx; Err codevoid.de 70 i- if (*y + *h + 2 * c->bw <= m->wy) Err codevoid.de 70 i- *y = m->wy; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (*h < bh) Err codevoid.de 70 i- *h = bh; Err codevoid.de 70 i- if (*w < bh) Err codevoid.de 70 i- *w = bh; Err codevoid.de 70 i- if (resizehints || !c->mon->lt[c->mon->sellt]->arrange) { Err codevoid.de 70 i- /* see last two sentences in ICCCM 4.1.2.3 */ Err codevoid.de 70 i- baseismin = c->basew == c->minw && c->baseh == c->minh; Err codevoid.de 70 i- if (!baseismin) { /* temporarily remove base dimensions */ Err codevoid.de 70 i- *w -= c->basew; Err codevoid.de 70 i- *h -= c->baseh; Err codevoid.de 70 i- } Err codevoid.de 70 i- /* adjust for aspect limits */ Err codevoid.de 70 i- if (c->mina > 0 && c->maxa > 0) { Err codevoid.de 70 i- if (c->maxa < (float)*w / *h) Err codevoid.de 70 i- *w = *h * c->maxa + 0.5; Err codevoid.de 70 i- else if (c->mina < (float)*h / *w) Err codevoid.de 70 i- *h = *w * c->mina + 0.5; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (baseismin) { /* increment calculation requires this */ Err codevoid.de 70 i- *w -= c->basew; Err codevoid.de 70 i- *h -= c->baseh; Err codevoid.de 70 i- } Err codevoid.de 70 i- /* adjust for increment value */ Err codevoid.de 70 i- if (c->incw) Err codevoid.de 70 i- *w -= *w % c->incw; Err codevoid.de 70 i- if (c->inch) Err codevoid.de 70 i- *h -= *h % c->inch; Err codevoid.de 70 i- /* restore base dimensions */ Err codevoid.de 70 i- *w = MAX(*w + c->basew, c->minw); Err codevoid.de 70 i- *h = MAX(*h + c->baseh, c->minh); Err codevoid.de 70 i- if (c->maxw) Err codevoid.de 70 i- *w = MIN(*w, c->maxw); Err codevoid.de 70 i- if (c->maxh) Err codevoid.de 70 i- *h = MIN(*h, c->maxh); Err codevoid.de 70 i- } Err codevoid.de 70 i- return *x != c->x || *y != c->y || *w != c->w || *h != c->h; Err codevoid.de 70 i+ int baseismin; Err codevoid.de 70 i+ Monitor *m = c->mon; Err codevoid.de 70 i+ Err codevoid.de 70 i+ /* set minimum possible */ Err codevoid.de 70 i+ *w = MAX(1, *w); Err codevoid.de 70 i+ *h = MAX(1, *h); Err codevoid.de 70 i+ if (interact) { Err codevoid.de 70 i+ if (*x > sw) Err codevoid.de 70 i+ *x = sw - WIDTH(c); Err codevoid.de 70 i+ if (*y > sh) Err codevoid.de 70 i+ *y = sh - HEIGHT(c); Err codevoid.de 70 i+ if (*x + *w + 2 * c->bw < 0) Err codevoid.de 70 i+ *x = 0; Err codevoid.de 70 i+ if (*y + *h + 2 * c->bw < 0) Err codevoid.de 70 i+ *y = 0; Err codevoid.de 70 i+ } else { Err codevoid.de 70 i+ if (*x >= m->wx + m->ww) Err codevoid.de 70 i+ *x = m->wx + m->ww - WIDTH(c); Err codevoid.de 70 i+ if (*y >= m->wy + m->wh) Err codevoid.de 70 i+ *y = m->wy + m->wh - HEIGHT(c); Err codevoid.de 70 i+ if (*x + *w + 2 * c->bw <= m->wx) Err codevoid.de 70 i+ *x = m->wx; Err codevoid.de 70 i+ if (*y + *h + 2 * c->bw <= m->wy) Err codevoid.de 70 i+ *y = m->wy; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (*h < bh) Err codevoid.de 70 i+ *h = bh; Err codevoid.de 70 i+ if (*w < bh) Err codevoid.de 70 i+ *w = bh; Err codevoid.de 70 i+ if (resizehints || !c->mon->lt[c->mon->sellt]->arrange) { Err codevoid.de 70 i+ /* see last two sentences in ICCCM 4.1.2.3 */ Err codevoid.de 70 i+ baseismin = c->basew == c->minw && c->baseh == c->minh; Err codevoid.de 70 i+ if (!baseismin) { /* temporarily remove base dimensions */ Err codevoid.de 70 i+ *w -= c->basew; Err codevoid.de 70 i+ *h -= c->baseh; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ /* adjust for aspect limits */ Err codevoid.de 70 i+ if (c->mina > 0 && c->maxa > 0) { Err codevoid.de 70 i+ if (c->maxa < (float)*w / *h) Err codevoid.de 70 i+ *w = *h * c->maxa + 0.5; Err codevoid.de 70 i+ else if (c->mina < (float)*h / *w) Err codevoid.de 70 i+ *h = *w * c->mina + 0.5; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (baseismin) { /* increment calculation requires this */ Err codevoid.de 70 i+ *w -= c->basew; Err codevoid.de 70 i+ *h -= c->baseh; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ /* adjust for increment value */ Err codevoid.de 70 i+ if (c->incw) Err codevoid.de 70 i+ *w -= *w % c->incw; Err codevoid.de 70 i+ if (c->inch) Err codevoid.de 70 i+ *h -= *h % c->inch; Err codevoid.de 70 i+ /* restore base dimensions */ Err codevoid.de 70 i+ *w = MAX(*w + c->basew, c->minw); Err codevoid.de 70 i+ *h = MAX(*h + c->baseh, c->minh); Err codevoid.de 70 i+ if (c->maxw) Err codevoid.de 70 i+ *w = MIN(*w, c->maxw); Err codevoid.de 70 i+ if (c->maxh) Err codevoid.de 70 i+ *h = MIN(*h, c->maxh); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ return *x != c->x || *y != c->y || *w != c->w || *h != c->h; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i arrange(Monitor *m) Err codevoid.de 70 i { Err codevoid.de 70 i- if (m) Err codevoid.de 70 i- showhide(m->stack); Err codevoid.de 70 i- else for (m = mons; m; m = m->next) Err codevoid.de 70 i- showhide(m->stack); Err codevoid.de 70 i- if (m) { Err codevoid.de 70 i- arrangemon(m); Err codevoid.de 70 i- restack(m); Err codevoid.de 70 i- } else for (m = mons; m; m = m->next) Err codevoid.de 70 i- arrangemon(m); Err codevoid.de 70 i+ if (m) Err codevoid.de 70 i+ showhide(m->stack); Err codevoid.de 70 i+ else for (m = mons; m; m = m->next) Err codevoid.de 70 i+ showhide(m->stack); Err codevoid.de 70 i+ if (m) { Err codevoid.de 70 i+ arrangemon(m); Err codevoid.de 70 i+ restack(m); Err codevoid.de 70 i+ } else for (m = mons; m; m = m->next) Err codevoid.de 70 i+ arrangemon(m); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i arrangemon(Monitor *m) Err codevoid.de 70 i { Err codevoid.de 70 i- strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); Err codevoid.de 70 i- if (m->lt[m->sellt]->arrange) Err codevoid.de 70 i- m->lt[m->sellt]->arrange(m); Err codevoid.de 70 i+ strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); Err codevoid.de 70 i+ if (m->lt[m->sellt]->arrange) Err codevoid.de 70 i+ m->lt[m->sellt]->arrange(m); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i attach(Client *c) Err codevoid.de 70 i { Err codevoid.de 70 i- c->next = c->mon->clients; Err codevoid.de 70 i- c->mon->clients = c; Err codevoid.de 70 i+ c->next = c->mon->clients; Err codevoid.de 70 i+ c->mon->clients = c; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i attachstack(Client *c) Err codevoid.de 70 i { Err codevoid.de 70 i- c->snext = c->mon->stack; Err codevoid.de 70 i- c->mon->stack = c; Err codevoid.de 70 i+ c->snext = c->mon->stack; Err codevoid.de 70 i+ c->mon->stack = c; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i buttonpress(XEvent *e) Err codevoid.de 70 i { Err codevoid.de 70 i- unsigned int i, x, click; Err codevoid.de 70 i- Arg arg = {0}; Err codevoid.de 70 i- Client *c; Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i- XButtonPressedEvent *ev = &e->xbutton; Err codevoid.de 70 i- Err codevoid.de 70 i- click = ClkRootWin; Err codevoid.de 70 i- /* focus monitor if necessary */ Err codevoid.de 70 i- if ((m = wintomon(ev->window)) && m != selmon) { Err codevoid.de 70 i- unfocus(selmon->sel, 1); Err codevoid.de 70 i- selmon = m; Err codevoid.de 70 i- focus(NULL); Err codevoid.de 70 i- } Err codevoid.de 70 i- if (ev->window == selmon->barwin) { Err codevoid.de 70 i- i = x = 0; Err codevoid.de 70 i- do Err codevoid.de 70 i- x += TEXTW(tags[i]); Err codevoid.de 70 i- while (ev->x >= x && ++i < LENGTH(tags)); Err codevoid.de 70 i- if (i < LENGTH(tags)) { Err codevoid.de 70 i- click = ClkTagBar; Err codevoid.de 70 i- arg.ui = 1 << i; Err codevoid.de 70 i- } else if (ev->x < x + blw) Err codevoid.de 70 i- click = ClkLtSymbol; Err codevoid.de 70 i- else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth()) Err codevoid.de 70 i- click = ClkStatusText; Err codevoid.de 70 i- else Err codevoid.de 70 i- click = ClkWinTitle; Err codevoid.de 70 i- } else if ((c = wintoclient(ev->window))) { Err codevoid.de 70 i- focus(c); Err codevoid.de 70 i- restack(selmon); Err codevoid.de 70 i- XAllowEvents(dpy, ReplayPointer, CurrentTime); Err codevoid.de 70 i- click = ClkClientWin; Err codevoid.de 70 i- } Err codevoid.de 70 i- for (i = 0; i < LENGTH(buttons); i++) Err codevoid.de 70 i- if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button Err codevoid.de 70 i- && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) Err codevoid.de 70 i- buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); Err codevoid.de 70 i+ unsigned int i, x, click; Err codevoid.de 70 i+ Arg arg = {0}; Err codevoid.de 70 i+ Client *c; Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i+ XButtonPressedEvent *ev = &e->xbutton; Err codevoid.de 70 i+ Err codevoid.de 70 i+ click = ClkRootWin; Err codevoid.de 70 i+ /* focus monitor if necessary */ Err codevoid.de 70 i+ if ((m = wintomon(ev->window)) && m != selmon) { Err codevoid.de 70 i+ unfocus(selmon->sel, 1); Err codevoid.de 70 i+ selmon = m; Err codevoid.de 70 i+ focus(NULL); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (ev->window == selmon->barwin) { Err codevoid.de 70 i+ i = x = 0; Err codevoid.de 70 i+ do Err codevoid.de 70 i+ x += TEXTW(tags[i]); Err codevoid.de 70 i+ while (ev->x >= x && ++i < LENGTH(tags)); Err codevoid.de 70 i+ if (i < LENGTH(tags)) { Err codevoid.de 70 i+ click = ClkTagBar; Err codevoid.de 70 i+ arg.ui = 1 << i; Err codevoid.de 70 i+ } else if (ev->x < x + blw) Err codevoid.de 70 i+ click = ClkLtSymbol; Err codevoid.de 70 i+ else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth()) Err codevoid.de 70 i+ click = ClkStatusText; Err codevoid.de 70 i+ else Err codevoid.de 70 i+ click = ClkWinTitle; Err codevoid.de 70 i+ } else if ((c = wintoclient(ev->window))) { Err codevoid.de 70 i+ focus(c); Err codevoid.de 70 i+ restack(selmon); Err codevoid.de 70 i+ XAllowEvents(dpy, ReplayPointer, CurrentTime); Err codevoid.de 70 i+ click = ClkClientWin; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ for (i = 0; i < LENGTH(buttons); i++) Err codevoid.de 70 i+ if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button Err codevoid.de 70 i+ && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) Err codevoid.de 70 i+ buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i checkotherwm(void) Err codevoid.de 70 i { Err codevoid.de 70 i- xerrorxlib = XSetErrorHandler(xerrorstart); Err codevoid.de 70 i- /* this causes an error if some other window manager is running */ Err codevoid.de 70 i- XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i- XSetErrorHandler(xerror); Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i+ xerrorxlib = XSetErrorHandler(xerrorstart); Err codevoid.de 70 i+ /* this causes an error if some other window manager is running */ Err codevoid.de 70 i+ XSelectInput(dpy, DefaultRootWindow(dpy), SubstructureRedirectMask); Err codevoid.de 70 i+ XSync(dpy, False); Err codevoid.de 70 i+ XSetErrorHandler(xerror); Err codevoid.de 70 i+ XSync(dpy, False); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i cleanup(void) Err codevoid.de 70 i { Err codevoid.de 70 i- Arg a = {.ui = ~0}; Err codevoid.de 70 i- Layout foo = { "", NULL }; Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i- size_t i; Err codevoid.de 70 i- Err codevoid.de 70 i- view(&a); Err codevoid.de 70 i- selmon->lt[selmon->sellt] = &foo; Err codevoid.de 70 i- for (m = mons; m; m = m->next) Err codevoid.de 70 i- while (m->stack) Err codevoid.de 70 i- unmanage(m->stack, 0); Err codevoid.de 70 i- XUngrabKey(dpy, AnyKey, AnyModifier, root); Err codevoid.de 70 i+ Arg a = {.ui = ~0}; Err codevoid.de 70 i+ Layout foo = { "", NULL }; Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i+ size_t i; Err codevoid.de 70 i+ Err codevoid.de 70 i+ view(&a); Err codevoid.de 70 i+ selmon->lt[selmon->sellt] = &foo; Err codevoid.de 70 i+ for (m = mons; m; m = m->next) Err codevoid.de 70 i+ while (m->stack) Err codevoid.de 70 i+ unmanage(m->stack, 0); Err codevoid.de 70 i+ XUngrabKey(dpy, AnyKey, AnyModifier, root); Err codevoid.de 70 i XUnmapWindow(dpy, eb.win); Err codevoid.de 70 i XDestroyWindow(dpy, eb.win); Err codevoid.de 70 i- while (mons) Err codevoid.de 70 i- cleanupmon(mons); Err codevoid.de 70 i- if (showsystray) { Err codevoid.de 70 i- XUnmapWindow(dpy, systray->win); Err codevoid.de 70 i- XDestroyWindow(dpy, systray->win); Err codevoid.de 70 i- free(systray); Err codevoid.de 70 i- } Err codevoid.de 70 i- for (i = 0; i < CurLast; i++) Err codevoid.de 70 i- drw_cur_free(drw, cursor[i]); Err codevoid.de 70 i- for (i = 0; i < LENGTH(colors); i++) Err codevoid.de 70 i- free(scheme[i]); Err codevoid.de 70 i- XDestroyWindow(dpy, wmcheckwin); Err codevoid.de 70 i- drw_free(drw); Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i- XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); Err codevoid.de 70 i- XDeleteProperty(dpy, root, netatom[NetActiveWindow]); Err codevoid.de 70 i+ while (mons) Err codevoid.de 70 i+ cleanupmon(mons); Err codevoid.de 70 i+ if (showsystray) { Err codevoid.de 70 i+ XUnmapWindow(dpy, systray->win); Err codevoid.de 70 i+ XDestroyWindow(dpy, systray->win); Err codevoid.de 70 i+ free(systray); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ for (i = 0; i < CurLast; i++) Err codevoid.de 70 i+ drw_cur_free(drw, cursor[i]); Err codevoid.de 70 i+ for (i = 0; i < LENGTH(colors); i++) Err codevoid.de 70 i+ free(scheme[i]); Err codevoid.de 70 i+ XDestroyWindow(dpy, wmcheckwin); Err codevoid.de 70 i+ drw_free(drw); Err codevoid.de 70 i+ XSync(dpy, False); Err codevoid.de 70 i+ XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); Err codevoid.de 70 i+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i cleanupmon(Monitor *mon) Err codevoid.de 70 i { Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i Err codevoid.de 70 i- if (mon == mons) Err codevoid.de 70 i- mons = mons->next; Err codevoid.de 70 i- else { Err codevoid.de 70 i- for (m = mons; m && m->next != mon; m = m->next); Err codevoid.de 70 i- m->next = mon->next; Err codevoid.de 70 i- } Err codevoid.de 70 i- XUnmapWindow(dpy, mon->barwin); Err codevoid.de 70 i- XDestroyWindow(dpy, mon->barwin); Err codevoid.de 70 i- free(mon); Err codevoid.de 70 i+ if (mon == mons) Err codevoid.de 70 i+ mons = mons->next; Err codevoid.de 70 i+ else { Err codevoid.de 70 i+ for (m = mons; m && m->next != mon; m = m->next); Err codevoid.de 70 i+ m->next = mon->next; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ XUnmapWindow(dpy, mon->barwin); Err codevoid.de 70 i+ XDestroyWindow(dpy, mon->barwin); Err codevoid.de 70 i+ free(mon); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i clientmessage(XEvent *e) Err codevoid.de 70 i { Err codevoid.de 70 i- XWindowAttributes wa; Err codevoid.de 70 i- XSetWindowAttributes swa; Err codevoid.de 70 i- XClientMessageEvent *cme = &e->xclient; Err codevoid.de 70 i- Client *c = wintoclient(cme->window); Err codevoid.de 70 i- Err codevoid.de 70 i- if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) { Err codevoid.de 70 i- /* add systray icons */ Err codevoid.de 70 i- if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) { Err codevoid.de 70 i- if (!(c = (Client *)calloc(1, sizeof(Client)))) Err codevoid.de 70 i- die("fatal: could not malloc() %u bytes\n", sizeof(Client)); Err codevoid.de 70 i- if (!(c->win = cme->data.l[2])) { Err codevoid.de 70 i- free(c); Err codevoid.de 70 i- return; Err codevoid.de 70 i- } Err codevoid.de 70 i- c->mon = selmon; Err codevoid.de 70 i- c->next = systray->icons; Err codevoid.de 70 i- systray->icons = c; Err codevoid.de 70 i- XGetWindowAttributes(dpy, c->win, &wa); Err codevoid.de 70 i- c->x = c->oldx = c->y = c->oldy = 0; Err codevoid.de 70 i- c->w = c->oldw = wa.width; Err codevoid.de 70 i- c->h = c->oldh = wa.height; Err codevoid.de 70 i- c->oldbw = wa.border_width; Err codevoid.de 70 i- c->bw = 0; Err codevoid.de 70 i- c->isfloating = True; Err codevoid.de 70 i- /* reuse tags field as mapped status */ Err codevoid.de 70 i- c->tags = 1; Err codevoid.de 70 i- updatesizehints(c); Err codevoid.de 70 i- updatesystrayicongeom(c, wa.width, wa.height); Err codevoid.de 70 i- XAddToSaveSet(dpy, c->win); Err codevoid.de 70 i- XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask); Err codevoid.de 70 i- XReparentWindow(dpy, c->win, systray->win, 0, 0); Err codevoid.de 70 i- /* use parents background color */ Err codevoid.de 70 i- swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; Err codevoid.de 70 i- XChangeWindowAttributes(dpy, c->win, CWBackPixel, &swa); Err codevoid.de 70 i- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i- /* FIXME not sure if I have to send these events, too */ Err codevoid.de 70 i- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_FOCUS_IN, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i- sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_MODALITY_ON, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i- resizebarwin(selmon); Err codevoid.de 70 i- updatesystray(); Err codevoid.de 70 i- setclientstate(c, NormalState); Err codevoid.de 70 i- } Err codevoid.de 70 i- return; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (!c) Err codevoid.de 70 i- return; Err codevoid.de 70 i- if (cme->message_type == netatom[NetWMState]) { Err codevoid.de 70 i- if (cme->data.l[1] == netatom[NetWMFullscreen] Err codevoid.de 70 i- || cme->data.l[2] == netatom[NetWMFullscreen]) Err codevoid.de 70 i- setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ Err codevoid.de 70 i- || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); Err codevoid.de 70 i- } else if (cme->message_type == netatom[NetActiveWindow]) { Err codevoid.de 70 i- if (c != selmon->sel && !c->isurgent) Err codevoid.de 70 i- seturgent(c, 1); Err codevoid.de 70 i- } Err codevoid.de 70 i+ XWindowAttributes wa; Err codevoid.de 70 i+ XSetWindowAttributes swa; Err codevoid.de 70 i+ XClientMessageEvent *cme = &e->xclient; Err codevoid.de 70 i+ Client *c = wintoclient(cme->window); Err codevoid.de 70 i+ Err codevoid.de 70 i+ if (showsystray && cme->window == systray->win && cme->message_type == netatom[NetSystemTrayOP]) { Err codevoid.de 70 i+ /* add systray icons */ Err codevoid.de 70 i+ if (cme->data.l[1] == SYSTEM_TRAY_REQUEST_DOCK) { Err codevoid.de 70 i+ if (!(c = (Client *)calloc(1, sizeof(Client)))) Err codevoid.de 70 i+ die("fatal: could not malloc() %u bytes\n", sizeof(Client)); Err codevoid.de 70 i+ if (!(c->win = cme->data.l[2])) { Err codevoid.de 70 i+ free(c); Err codevoid.de 70 i+ return; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ c->mon = selmon; Err codevoid.de 70 i+ c->next = systray->icons; Err codevoid.de 70 i+ systray->icons = c; Err codevoid.de 70 i+ XGetWindowAttributes(dpy, c->win, &wa); Err codevoid.de 70 i+ c->x = c->oldx = c->y = c->oldy = 0; Err codevoid.de 70 i+ c->w = c->oldw = wa.width; Err codevoid.de 70 i+ c->h = c->oldh = wa.height; Err codevoid.de 70 i+ c->oldbw = wa.border_width; Err codevoid.de 70 i+ c->bw = 0; Err codevoid.de 70 i+ c->isfloating = True; Err codevoid.de 70 i+ /* reuse tags field as mapped status */ Err codevoid.de 70 i+ c->tags = 1; Err codevoid.de 70 i+ updatesizehints(c); Err codevoid.de 70 i+ updatesystrayicongeom(c, wa.width, wa.height); Err codevoid.de 70 i+ XAddToSaveSet(dpy, c->win); Err codevoid.de 70 i+ XSelectInput(dpy, c->win, StructureNotifyMask | PropertyChangeMask | ResizeRedirectMask); Err codevoid.de 70 i+ XReparentWindow(dpy, c->win, systray->win, 0, 0); Err codevoid.de 70 i+ /* use parents background color */ Err codevoid.de 70 i+ swa.background_pixel = scheme[SchemeNorm][ColBg].pixel; Err codevoid.de 70 i+ XChangeWindowAttributes(dpy, c->win, CWBackPixel, &swa); Err codevoid.de 70 i+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_EMBEDDED_NOTIFY, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i+ /* FIXME not sure if I have to send these events, too */ Err codevoid.de 70 i+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_FOCUS_IN, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_WINDOW_ACTIVATE, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i+ sendevent(c->win, netatom[Xembed], StructureNotifyMask, CurrentTime, XEMBED_MODALITY_ON, 0 , systray->win, XEMBED_EMBEDDED_VERSION); Err codevoid.de 70 i+ XSync(dpy, False); Err codevoid.de 70 i+ resizebarwin(selmon); Err codevoid.de 70 i+ updatesystray(); Err codevoid.de 70 i+ setclientstate(c, NormalState); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ return; Err codevoid.de 70 i+ } Err codevoid.de 70 i+ if (!c) Err codevoid.de 70 i+ return; Err codevoid.de 70 i+ if (cme->message_type == netatom[NetWMState]) { Err codevoid.de 70 i+ if (cme->data.l[1] == netatom[NetWMFullscreen] Err codevoid.de 70 i+ || cme->data.l[2] == netatom[NetWMFullscreen]) Err codevoid.de 70 i+ setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ Err codevoid.de 70 i+ || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); Err codevoid.de 70 i+ } else if (cme->message_type == netatom[NetActiveWindow]) { Err codevoid.de 70 i+ if (c != selmon->sel && !c->isurgent) Err codevoid.de 70 i+ seturgent(c, 1); Err codevoid.de 70 i+ } Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i configure(Client *c) Err codevoid.de 70 i { Err codevoid.de 70 i- XConfigureEvent ce; Err codevoid.de 70 i+ XConfigureEvent ce; Err codevoid.de 70 i Err codevoid.de 70 i- ce.type = ConfigureNotify; Err codevoid.de 70 i- ce.display = dpy; Err codevoid.de 70 i- ce.event = c->win; Err codevoid.de 70 i- ce.window = c->win; Err codevoid.de 70 i- ce.x = c->x; Err codevoid.de 70 i- ce.y = c->y; Err codevoid.de 70 i- ce.width = c->w; Err codevoid.de 70 i- ce.height = c->h; Err codevoid.de 70 i- ce.border_width = c->bw; Err codevoid.de 70 i- ce.above = None; Err codevoid.de 70 i- ce.override_redirect = False; Err codevoid.de 70 i- XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); Err codevoid.de 70 i+ ce.type = ConfigureNotify; Err codevoid.de 70 i+ ce.display = dpy; Err codevoid.de 70 i+ ce.event = c->win; Err codevoid.de 70 i+ ce.window = c->win; Err codevoid.de 70 i+ ce.x = c->x; Err codevoid.de 70 i+ ce.y = c->y; Err codevoid.de 70 i+ ce.width = c->w; Err codevoid.de 70 i+ ce.height = c->h; Err codevoid.de 70 i+ ce.border_width = c->bw; Err codevoid.de 70 i+ ce.above = None; Err codevoid.de 70 i+ ce.override_redirect = False; Err codevoid.de 70 i+ XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i configurenotify(XEvent *e) Err codevoid.de 70 i { Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i- Client *c; Err codevoid.de 70 i- XConfigureEvent *ev = &e->xconfigure; Err codevoid.de 70 i- int dirty; Err codevoid.de 70 i- Err codevoid.de 70 i- /* TODO: updategeom handling sucks, needs to be simplified */ Err codevoid.de 70 i- if (ev->window == root) { Err codevoid.de 70 i- dirty = (sw != ev->width || sh != ev->height); Err codevoid.de 70 i- sw = ev->width; Err codevoid.de 70 i- sh = ev->height; Err codevoid.de 70 i- if (updategeom() || dirty) { Err codevoid.de 70 i- drw_resize(drw, sw, bh); Err codevoid.de 70 i- updatebars(); Err codevoid.de 70 i- for (m = mons; m; m = m->next) { Err codevoid.de 70 i- for (c = m->clients; c; c = c->next) Err codevoid.de 70 i- if (c->isfullscreen) Err codevoid.de 70 i- resizeclient(c, m->mx, m->my, m->mw, m->mh); Err codevoid.de 70 i- //XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i+ Client *c; Err codevoid.de 70 i+ XConfigureEvent *ev = &e->xconfigure; Err codevoid.de 70 i+ int dirty; Err codevoid.de 70 i+ Err codevoid.de 70 i+ /* TODO: updategeom handling sucks, needs to be simplified */ Err codevoid.de 70 i+ if (ev->window == root) { Err codevoid.de 70 i+ dirty = (sw != ev->width || sh != ev->height); Err codevoid.de 70 i+ sw = ev->width; Err codevoid.de 70 i+ sh = ev->height; Err codevoid.de 70 i+ if (updategeom() || dirty) { Err codevoid.de 70 i+ drw_resize(drw, sw, bh); Err codevoid.de 70 i+ updatebars(); Err codevoid.de 70 i+ for (m = mons; m; m = m->next) { Err codevoid.de 70 i+ for (c = m->clients; c; c = c->next) Err codevoid.de 70 i+ if (c->isfullscreen) Err codevoid.de 70 i+ resizeclient(c, m->mx, m->my, m->mw, m->mh); Err codevoid.de 70 i+ //XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); Err codevoid.de 70 i resizebarwin(m); Err codevoid.de 70 i- } Err codevoid.de 70 i+ } Err codevoid.de 70 i XMoveResizeWindow(dpy, eb.win, mons->wx, eb.y, mons->ww, bh); Err codevoid.de 70 i- focus(NULL); Err codevoid.de 70 i- arrange(NULL); Err codevoid.de 70 i- } Err codevoid.de 70 i- } Err codevoid.de 70 i+ focus(NULL); Err codevoid.de 70 i+ arrange(NULL); Err codevoid.de 70 i+ } Err codevoid.de 70 i+ } Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i void Err codevoid.de 70 i configurerequest(XEvent *e) Err codevoid.de 70 i { Err codevoid.de 70 i- Client *c; Err codevoid.de 70 i- Monitor *m; Err codevoid.de 70 i- XConfigureRequestEvent *ev = &e->xconfigurerequest; Err codevoid.de 70 i- XWindowChanges wc; Err codevoid.de 70 i- Err codevoid.de 70 i- if ((c = wintoclient(ev->window))) { Err codevoid.de 70 i- if (ev->value_mask & CWBorderWidth) Err codevoid.de 70 i- c->bw = ev->border_width; Err codevoid.de 70 i- else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { Err codevoid.de 70 i- m = c->mon; Err codevoid.de 70 i- if (ev->value_mask & CWX) { Err codevoid.de 70 i- c->oldx = c->x; Err codevoid.de 70 i- c->x = m->mx + ev->x; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (ev->value_mask & CWY) { Err codevoid.de 70 i- c->oldy = c->y; Err codevoid.de 70 i- c->y = m->my + ev->y; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (ev->value_mask & CWWidth) { Err codevoid.de 70 i- c->oldw = c->w; Err codevoid.de 70 i- c->w = ev->width; Err codevoid.de 70 i- } Err codevoid.de 70 i- if (ev->value_mask & CWHeight) { Err codevoid.de 70 i- c->oldh = c->h; Err codevoid.de 70 i- c->h = ev->height; Err codevoid.de 70 i- } Err codevoid.de 70 i- if ((c->x + c->w) > m->mx + m->mw && c->isfloating) Err codevoid.de 70 i- c->x = m->mx + (m->mw / 2 - WIDTH(c) / 2); /* center in x direction */ Err codevoid.de 70 i- if ((c->y + c->h) > m->my + m->mh && c->isfloating) Err codevoid.de 70 i- c->y = m->my + (m->mh / 2 - HEIGHT(c) / 2); /* center in y direction */ Err codevoid.de 70 i- if ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))) Err codevoid.de 70 i- configure(c); Err codevoid.de 70 i- if (ISVISIBLE(c)) Err codevoid.de 70 i- XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); Err codevoid.de 70 i- } else Err codevoid.de 70 i- configure(c); Err codevoid.de 70 i- } else { Err codevoid.de 70 i- wc.x = ev->x; Err codevoid.de 70 i- wc.y = ev->y; Err codevoid.de 70 i- wc.width = ev->width; Err codevoid.de 70 i- wc.height = ev->height; Err codevoid.de 70 i- wc.border_width = ev->border_width; Err codevoid.de 70 i- wc.sibling = ev->above; Err codevoid.de 70 i- wc.stack_mode = ev->detail; Err codevoid.de 70 i- XConfigureWindow(dpy, ev->window, ev->value_mask, &wc); Err codevoid.de 70 i- } Err codevoid.de 70 i- XSync(dpy, False); Err codevoid.de 70 i+ Client *c; Err codevoid.de 70 i+ Monitor *m; Err codevoid.de 70 i+ XConfigureR Err codevoid.de 70 .