t* dwm + patches URI git clone git://git.codevoid.de/dwm-sdk DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit 4a4857a812034079314b95598f8e8c2e6f33567d DIR parent 3b59a15d64e38b4196139bb05bb08b8d2ef49335 URI Author: Stefan Hagen <sh+git[at]codevoid[dot]de> Date: Sun, 3 Nov 2019 16:12:27 +0100 remove FloatColor - %retab Diffstat: M config.h | 16 ++++------------ M config.mk | 6 +++--- M drw.h | 2 +- M dwm.c | 613 +++++++++++++------------------ M maximize.c | 111 +++++++++++++++---------------- 5 files changed, 312 insertions(+), 436 deletions(-) --- DIR diff --git a/config.h b/config.h t@@ -10,28 +10,20 @@ static const char selbgcolor[] = "#181818"; // top bar selection bg static const char selfgcolor[] = "#eeeeee"; // top bar selection fg static const char normbordercolor[] = "#242424"; // window border bg static const char selbordercolor[] = "#990000"; // window border fg -static const char normfloatbordercolor[] = "#00FF00"; // float window border bg -static const char selfloatbordercolor[] = "#00FF00"; // float window border fg static const unsigned int borderpx = 1; // window border size px static const unsigned int gappx = 10; // window gap size px static const unsigned int snap = 8; // snap distance px -static const unsigned int systraypinning = 1; // 0: tray follows mouse - // >0: pin tray to mon X static const unsigned int systrayspacing = 2; // systray spacing +static const unsigned int systraypinning = 1; // 0 tray follows mouse static const int systraypinningfailfirst = 1; // 1 first screen, 0 last static const int showsystray = 1; // 0 = no systray static const int showbar = 1; // 0 = no bar static const int topbar = 1; // 0 = bottom bar static const int extrabar = 0; // 0 = no extra bar -static const char *colors[][4] = { - [SchemeNorm] = { - normfgcolor, normbgcolor, normbordercolor, normfloatbordercolor - }, - [SchemeSel] = { - /* fg bg border floatborder */ - selfgcolor, selbgcolor, selbordercolor, selfloatbordercolor - }, +static const char *colors[][3] = { + [SchemeNorm] = { normfgcolor, normbgcolor, normbordercolor }, + [SchemeSel] = { selfgcolor, selbgcolor, selbordercolor }, }; /* dmenu options */ DIR diff --git a/config.mk b/config.mk t@@ -25,9 +25,9 @@ INCS = -I${X11INC} -I${FREETYPEINC} LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} # flags -CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} -#CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS} -CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS} +CPPFLAGS = -g -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} +#CFLAGS = -std=c99 -pedantic -Wall -Wno-deprecated-declarations -Os ${INCS} ${CPPFLAGS} +CFLAGS = -g -std=c99 -pedantic -Wall -O0 ${INCS} ${CPPFLAGS} LDFLAGS = ${LIBS} # Solaris DIR diff --git a/drw.h b/drw.h t@@ -12,7 +12,7 @@ typedef struct Fnt { struct Fnt *next; } Fnt; -enum { ColFg, ColBg, ColBorder, ColFloat }; /* Clr scheme index */ +enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */ typedef XftColor Clr; typedef struct { DIR diff --git a/dwm.c b/dwm.c t@@ -48,7 +48,7 @@ #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) #define CLEANMASK(mask) (mask & ~(numlockmask|LockMask) & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) #define INTERSECT(x,y,w,h,m) (MAX(0, MIN((x)+(w),(m)->wx+(m)->ww) - MAX((x),(m)->wx)) \ - * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) + * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy))) #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags])) #define LENGTH(X) (sizeof X / sizeof X[0]) #define MOUSEMASK (BUTTONMASK|PointerMotionMask) t@@ -77,13 +77,13 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel }; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, - NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, NetSystemTrayOrientationHorz, - NetWMFullscreen, NetActiveWindow, NetWMWindowType, - NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ + NetSystemTray, NetSystemTrayOP, NetSystemTrayOrientation, + NetSystemTrayOrientationHorz, NetWMFullscreen, NetActiveWindow, + NetWMWindowType, NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ enum { Manager, Xembed, XembedInfo, XLast }; /* Xembed atoms */ enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, - ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ + ClkClientWin, ClkRootWin, ClkLast }; /* clicks */ typedef union { int i; t@@ -336,8 +336,7 @@ static unsigned int scratchtag = 1 << LENGTH(tags); struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; /* function implementations */ -void -applyrules(Client *c) +void applyrules(Client *c) { const char *class, *instance; unsigned int i; t@@ -356,8 +355,8 @@ applyrules(Client *c) 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))) + && (!r->class || strstr(class, r->class)) + && (!r->instance || strstr(instance, r->instance))) { c->isfloating = r->isfloating; c->neverfocus = r->neverfocus; t@@ -374,8 +373,7 @@ applyrules(Client *c) c->tags = c->tags & TAGMASK ? c->tags & TAGMASK : c->mon->tagset[c->mon->seltags]; } -int -applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) +int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) { int baseismin; Monitor *m = c->mon; t@@ -440,8 +438,7 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact) return *x != c->x || *y != c->y || *w != c->w || *h != c->h; } -void -arrange(Monitor *m) +void arrange(Monitor *m) { if (m) showhide(m->stack); t@@ -454,30 +451,26 @@ arrange(Monitor *m) arrangemon(m); } -void -arrangemon(Monitor *m) +void arrangemon(Monitor *m) { strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); if (m->lt[m->sellt]->arrange) m->lt[m->sellt]->arrange(m); } -void -attach(Client *c) +void attach(Client *c) { c->next = c->mon->clients; c->mon->clients = c; } -void -attachstack(Client *c) +void attachstack(Client *c) { c->snext = c->mon->stack; c->mon->stack = c; } -void -buttonpress(XEvent *e) +void buttonpress(XEvent *e) { unsigned int i, x, click; Arg arg = {0}; t@@ -514,12 +507,11 @@ buttonpress(XEvent *e) } for (i = 0; i < LENGTH(buttons); i++) if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button - && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) + && CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state)) buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); } -void -checkotherwm(void) +void checkotherwm(void) { xerrorxlib = XSetErrorHandler(xerrorstart); /* this causes an error if some other window manager is running */ t@@ -529,8 +521,7 @@ checkotherwm(void) XSync(dpy, False); } -void -cleanup(void) +void cleanup(void) { Arg a = {.ui = ~0}; Layout foo = { "", NULL }; t@@ -563,8 +554,7 @@ cleanup(void) XDeleteProperty(dpy, root, netatom[NetActiveWindow]); } -void -cleanupmon(Monitor *mon) +void cleanupmon(Monitor *mon) { Monitor *m; t@@ -579,8 +569,7 @@ cleanupmon(Monitor *mon) free(mon); } -void -clientmessage(XEvent *e) +void clientmessage(XEvent *e) { XWindowAttributes wa; XSetWindowAttributes swa; t@@ -632,17 +621,16 @@ clientmessage(XEvent *e) return; if (cme->message_type == netatom[NetWMState]) { if (cme->data.l[1] == netatom[NetWMFullscreen] - || cme->data.l[2] == netatom[NetWMFullscreen]) + || cme->data.l[2] == netatom[NetWMFullscreen]) setfullscreen(c, (cme->data.l[0] == 1 /* _NET_WM_STATE_ADD */ - || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); + || (cme->data.l[0] == 2 /* _NET_WM_STATE_TOGGLE */ && !c->isfullscreen))); } else if (cme->message_type == netatom[NetActiveWindow]) { if (c != selmon->sel && !c->isurgent) seturgent(c, 1); } } -void -configure(Client *c) +void configure(Client *c) { XConfigureEvent ce; t@@ -660,8 +648,7 @@ configure(Client *c) XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce); } -void -configurenotify(XEvent *e) +void configurenotify(XEvent *e) { Monitor *m; Client *c; t@@ -690,8 +677,7 @@ configurenotify(XEvent *e) } } -void -configurerequest(XEvent *e) +void configurerequest(XEvent *e) { Client *c; Monitor *m; t@@ -742,8 +728,7 @@ configurerequest(XEvent *e) XSync(dpy, False); } -Monitor * -createmon(void) +Monitor * createmon(void) { Monitor *m; int i; t@@ -778,8 +763,7 @@ createmon(void) return m; } -void -destroynotify(XEvent *e) +void destroynotify(XEvent *e) { Client *c; XDestroyWindowEvent *ev = &e->xdestroywindow; t@@ -793,8 +777,7 @@ destroynotify(XEvent *e) } } -void -detach(Client *c) +void detach(Client *c) { Client **tc; t@@ -802,8 +785,7 @@ detach(Client *c) *tc = c->next; } -void -detachstack(Client *c) +void detachstack(Client *c) { Client **tc, *t; t@@ -816,8 +798,7 @@ detachstack(Client *c) } } -Monitor * -dirtomon(int dir) +Monitor * dirtomon(int dir) { Monitor *m = NULL; t@@ -831,8 +812,7 @@ dirtomon(int dir) return m; } -void -drawbar(Monitor *m) +void drawbar(Monitor *m) { int x, w, sw = 0, stw = 0; int boxs = drw->fonts->h / 9; t@@ -863,8 +843,8 @@ drawbar(Monitor *m) drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); if (occ & 1 << i) drw_rect(drw, x + boxw - 2, 0, w - boxw, boxw / 2, - m == selmon && selmon->sel && selmon->sel->tags & 1 << i, - urg & 1 << i); + m == selmon && selmon->sel && selmon->sel->tags & 1 << i, + urg & 1 << i); x += w; } w = blw = TEXTW(m->ltsymbol); t@@ -888,8 +868,7 @@ drawbar(Monitor *m) drw_map(drw, eb.win, 0, 0, mons->ww, bh); } -void -drawbars(void) +void drawbars(void) { Monitor *m; t@@ -897,8 +876,7 @@ drawbars(void) drawbar(m); } -void -enternotify(XEvent *e) +void enternotify(XEvent *e) { Client *c; Monitor *m; t@@ -916,8 +894,7 @@ enternotify(XEvent *e) focus(c); } -void -expose(XEvent *e) +void expose(XEvent *e) { Monitor *m; XExposeEvent *ev = &e->xexpose; t@@ -929,8 +906,7 @@ expose(XEvent *e) } } -void -focus(Client *c) +void focus(Client *c) { if (!c || !ISVISIBLE(c)) for (c = selmon->stack; c && !ISVISIBLE(c); c = c->snext); t@@ -946,11 +922,9 @@ focus(Client *c) grabbuttons(c, 1); if(c->ismax) { XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBg].pixel); - } else if(c->isfloating) { - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColFloat].pixel); - } else { + } else { XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - } + } setfocus(c); } else { XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); t@@ -961,8 +935,7 @@ focus(Client *c) } /* there are some broken focus acquiring clients needing extra handling */ -void -focusin(XEvent *e) +void focusin(XEvent *e) { XFocusChangeEvent *ev = &e->xfocus; t@@ -970,8 +943,7 @@ focusin(XEvent *e) setfocus(selmon->sel); } -void -focusmon(const Arg *arg) +void focusmon(const Arg *arg) { Monitor *m; t@@ -984,8 +956,7 @@ focusmon(const Arg *arg) focus(NULL); } -void -focusstack(const Arg *arg) +void focusstack(const Arg *arg) { Client *c = NULL, *i; t@@ -1012,8 +983,7 @@ focusstack(const Arg *arg) } } -Atom -getatomprop(Client *c, Atom prop) +Atom getatomprop(Client *c, Atom prop) { int di; unsigned long dl; t@@ -1026,7 +996,7 @@ getatomprop(Client *c, Atom prop) req = xatom[XembedInfo]; if (XGetWindowProperty(dpy, c->win, prop, 0L, sizeof atom, False, req, - &da, &di, &dl, &dl, &p) == Success && p) { + &da, &di, &dl, &dl, &p) == Success && p) { atom = *(Atom *)p; if (da == xatom[XembedInfo] && dl == 2) atom = ((Atom *)p)[1]; t@@ -1035,8 +1005,7 @@ getatomprop(Client *c, Atom prop) return atom; } -int -getrootptr(int *x, int *y) +int getrootptr(int *x, int *y) { int di; unsigned int dui; t@@ -1045,8 +1014,7 @@ getrootptr(int *x, int *y) return XQueryPointer(dpy, root, &dummy, &dummy, x, y, &di, &di, &dui); } -long -getstate(Window w) +long getstate(Window w) { int format; long result = -1; t@@ -1055,7 +1023,7 @@ getstate(Window w) Atom real; if (XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], - &real, &format, &n, &extra, (unsigned char **)&p) != Success) + &real, &format, &n, &extra, (unsigned char **)&p) != Success) return -1; if (n != 0) result = *p; t@@ -1063,8 +1031,7 @@ getstate(Window w) return result; } -unsigned int -getsystraywidth() +unsigned int getsystraywidth() { unsigned int w = 0; Client *i; t@@ -1073,8 +1040,7 @@ getsystraywidth() return w ? w + systrayspacing : 1; } -int -gettextprop(Window w, Atom atom, char *text, unsigned int size) +int gettextprop(Window w, Atom atom, char *text, unsigned int size) { char **list = NULL; int n; t@@ -1098,8 +1064,7 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) return 1; } -void -grabbuttons(Client *c, int focused) +void grabbuttons(Client *c, int focused) { updatenumlockmask(); { t@@ -1108,19 +1073,18 @@ grabbuttons(Client *c, int focused) XUngrabButton(dpy, AnyButton, AnyModifier, c->win); if (!focused) XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, - BUTTONMASK, GrabModeSync, GrabModeSync, None, None); + BUTTONMASK, GrabModeSync, GrabModeSync, None, None); for (i = 0; i < LENGTH(buttons); i++) if (buttons[i].click == ClkClientWin) for (j = 0; j < LENGTH(modifiers); j++) XGrabButton(dpy, buttons[i].button, - buttons[i].mask | modifiers[j], - c->win, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, None); + buttons[i].mask | modifiers[j], + c->win, False, BUTTONMASK, + GrabModeAsync, GrabModeSync, None, None); } } -void -grabkeys(void) +void grabkeys(void) { updatenumlockmask(); { t@@ -1133,31 +1097,29 @@ grabkeys(void) if ((code = XKeysymToKeycode(dpy, keys[i].keysym))) for (j = 0; j < LENGTH(modifiers); j++) XGrabKey(dpy, code, keys[i].mod | modifiers[j], root, - True, GrabModeAsync, GrabModeAsync); + True, GrabModeAsync, GrabModeAsync); } } -void -incnmaster(const Arg *arg) +void incnmaster(const Arg *arg) { selmon->nmaster = MAX(selmon->nmaster + arg->i, 0); arrange(selmon); } #ifdef XINERAMA -static int + static int isuniquegeom(XineramaScreenInfo *unique, size_t n, XineramaScreenInfo *info) { while (n--) if (unique[n].x_org == info->x_org && unique[n].y_org == info->y_org - && unique[n].width == info->width && unique[n].height == info->height) + && unique[n].width == info->width && unique[n].height == info->height) return 0; return 1; } #endif /* XINERAMA */ -void -keypress(XEvent *e) +void keypress(XEvent *e) { unsigned int i; KeySym keysym; t@@ -1167,13 +1129,12 @@ keypress(XEvent *e) keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); for (i = 0; i < LENGTH(keys); i++) if (keysym == keys[i].keysym - && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) - && keys[i].func) + && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) + && keys[i].func) keys[i].func(&(keys[i].arg)); } -void -killclient(const Arg *arg) +void killclient(const Arg *arg) { if (!selmon->sel) return; t@@ -1188,8 +1149,7 @@ killclient(const Arg *arg) } } -void -manage(Window w, XWindowAttributes *wa) +void manage(Window w, XWindowAttributes *wa) { Client *c, *t = NULL; Window trans = None; t@@ -1220,7 +1180,7 @@ manage(Window w, XWindowAttributes *wa) c->x = MAX(c->x, c->mon->mx); /* only fix client y-offset, if the client center might cover the bar */ c->y = MAX(c->y, ((c->mon->by == c->mon->my) && (c->x + (c->w / 2) >= c->mon->wx) - && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); + && (c->x + (c->w / 2) < c->mon->wx + c->mon->ww)) ? bh : c->mon->my); c->bw = borderpx; if (!strcmp(c->name, scratchpadname)) { t@@ -1234,11 +1194,9 @@ manage(Window w, XWindowAttributes *wa) XConfigureWindow(dpy, w, CWBorderWidth, &wc); if(c->ismax) { XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBg].pixel); - } else if(c->isfloating) { - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColFloat].pixel); - } else { + } else { XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - } + } configure(c); /* propagates border_width, if size doesn't change */ updatewindowtype(c); updatesizehints(c); t@@ -1251,15 +1209,13 @@ manage(Window w, XWindowAttributes *wa) XRaiseWindow(dpy, c->win); if(c->ismax) { XSetWindowBorder(dpy, c->win, scheme[SchemeNorm][ColBg].pixel); - } else if(c->isfloating) { - XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColFloat].pixel); - } else { + } else { XSetWindowBorder(dpy, c->win, scheme[SchemeSel][ColBorder].pixel); - } + } attach(c); attachstack(c); XChangeProperty(dpy, root, netatom[NetClientList], XA_WINDOW, 32, PropModeAppend, - (unsigned char *) &(c->win), 1); + (unsigned char *) &(c->win), 1); XMoveResizeWindow(dpy, c->win, c->x + 2 * sw, c->y, c->w, c->h); /* some windows require this */ setclientstate(c, NormalState); if (c->mon == selmon) t@@ -1270,8 +1226,7 @@ manage(Window w, XWindowAttributes *wa) focus(NULL); } -void -mappingnotify(XEvent *e) +void mappingnotify(XEvent *e) { XMappingEvent *ev = &e->xmapping; t@@ -1280,8 +1235,7 @@ mappingnotify(XEvent *e) grabkeys(); } -void -maprequest(XEvent *e) +void maprequest(XEvent *e) { static XWindowAttributes wa; XMapRequestEvent *ev = &e->xmaprequest; t@@ -1300,8 +1254,7 @@ maprequest(XEvent *e) manage(ev->window, &wa); } -void -monocle(Monitor *m) +void monocle(Monitor *m) { unsigned int n = 0; Client *c; t@@ -1315,8 +1268,7 @@ monocle(Monitor *m) resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, 0); } -void -motionnotify(XEvent *e) +void motionnotify(XEvent *e) { static Monitor *mon = NULL; Monitor *m; t@@ -1332,8 +1284,7 @@ motionnotify(XEvent *e) mon = m; } -void -movemouse(const Arg *arg) +void movemouse(const Arg *arg) { int x, y, ocx, ocy, nx, ny; Client *c; t@@ -1349,39 +1300,39 @@ movemouse(const Arg *arg) ocx = c->x; ocy = c->y; if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) + None, cursor[CurMove]->cursor, CurrentTime) != GrabSuccess) return; if (!getrootptr(&x, &y)) return; do { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch(ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) - continue; - lasttime = ev.xmotion.time; - - nx = ocx + (ev.xmotion.x - x); - ny = ocy + (ev.xmotion.y - y); - if (abs(selmon->wx - nx) < snap) - nx = selmon->wx; - else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) - nx = selmon->wx + selmon->ww - WIDTH(c); - if (abs(selmon->wy - ny) < snap) - ny = selmon->wy; - else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) - ny = selmon->wy + selmon->wh - HEIGHT(c); - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange - && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) - togglefloating(NULL); - if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) - resize(c, nx, ny, c->w, c->h, 1); - break; + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nx = ocx + (ev.xmotion.x - x); + ny = ocy + (ev.xmotion.y - y); + if (abs(selmon->wx - nx) < snap) + nx = selmon->wx; + else if (abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) + nx = selmon->wx + selmon->ww - WIDTH(c); + if (abs(selmon->wy - ny) < snap) + ny = selmon->wy; + else if (abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) + ny = selmon->wy + selmon->wh - HEIGHT(c); + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) + togglefloating(NULL); + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, nx, ny, c->w, c->h, 1); + break; } } while (ev.type != ButtonRelease); XUngrabPointer(dpy, CurrentTime); t@@ -1392,15 +1343,13 @@ movemouse(const Arg *arg) } } -Client * -nexttiled(Client *c) +Client * nexttiled(Client *c) { for (; c && (c->isfloating || !ISVISIBLE(c)); c = c->next); return c; } -void -pop(Client *c) +void pop(Client *c) { detach(c); attach(c); t@@ -1408,8 +1357,7 @@ pop(Client *c) arrange(c->mon); } -void -propertynotify(XEvent *e) +void propertynotify(XEvent *e) { Client *c; Window trans; t@@ -1431,19 +1379,19 @@ propertynotify(XEvent *e) return; /* ignore */ else if ((c = wintoclient(ev->window))) { switch(ev->atom) { - default: break; - case XA_WM_TRANSIENT_FOR: - if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && - (c->isfloating = (wintoclient(trans)) != NULL)) - arrange(c->mon); - break; - case XA_WM_NORMAL_HINTS: - updatesizehints(c); - break; - case XA_WM_HINTS: - updatewmhints(c); - drawbars(); - break; + default: break; + case XA_WM_TRANSIENT_FOR: + if (!c->isfloating && (XGetTransientForHint(dpy, c->win, &trans)) && + (c->isfloating = (wintoclient(trans)) != NULL)) + arrange(c->mon); + break; + case XA_WM_NORMAL_HINTS: + updatesizehints(c); + break; + case XA_WM_HINTS: + updatewmhints(c); + drawbars(); + break; } if (ev->atom == XA_WM_NAME || ev->atom == netatom[NetWMName]) { updatetitle(c); t@@ -1455,14 +1403,12 @@ propertynotify(XEvent *e) } } -void -quit(const Arg *arg) +void quit(const Arg *arg) { running = 0; } -Monitor * -recttomon(int x, int y, int w, int h) +Monitor * recttomon(int x, int y, int w, int h) { Monitor *m, *r = selmon; int a, area = 0; t@@ -1475,8 +1421,7 @@ recttomon(int x, int y, int w, int h) return r; } -void -removesystrayicon(Client *i) +void removesystrayicon(Client *i) { Client **ii; t@@ -1489,23 +1434,20 @@ removesystrayicon(Client *i) } -void -resize(Client *c, int x, int y, int w, int h, int interact) +void resize(Client *c, int x, int y, int w, int h, int interact) { if (applysizehints(c, &x, &y, &w, &h, interact)) resizeclient(c, x, y, w, h); } -void -resizebarwin(Monitor *m) { +void resizebarwin(Monitor *m) { unsigned int w = m->ww; if (showsystray && m == systraytomon(m)) w -= getsystraywidth(); XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, w, bh); } -void -resizeclient(Client *c, int x, int y, int w, int h) +void resizeclient(Client *c, int x, int y, int w, int h) { XWindowChanges wc; t@@ -1519,8 +1461,7 @@ resizeclient(Client *c, int x, int y, int w, int h) XSync(dpy, False); } -void -resizemouse(const Arg *arg) +void resizemouse(const Arg *arg) { int ocx, ocy, nw, nh; Client *c; t@@ -1536,34 +1477,34 @@ resizemouse(const Arg *arg) ocx = c->x; ocy = c->y; if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, - None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) + None, cursor[CurResize]->cursor, CurrentTime) != GrabSuccess) return; XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); do { XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); switch(ev.type) { - case ConfigureRequest: - case Expose: - case MapRequest: - handler[ev.type](&ev); - break; - case MotionNotify: - if ((ev.xmotion.time - lasttime) <= (1000 / 60)) - continue; - lasttime = ev.xmotion.time; - - nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); - nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); - if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww - && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) - { - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange - && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) - togglefloating(NULL); - } - if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) - resize(c, c->x, c->y, nw, nh, 1); - break; + case ConfigureRequest: + case Expose: + case MapRequest: + handler[ev.type](&ev); + break; + case MotionNotify: + if ((ev.xmotion.time - lasttime) <= (1000 / 60)) + continue; + lasttime = ev.xmotion.time; + + nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); + nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); + if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= selmon->wx + selmon->ww + && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= selmon->wy + selmon->wh) + { + if (!c->isfloating && selmon->lt[selmon->sellt]->arrange + && (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) + togglefloating(NULL); + } + if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) + resize(c, c->x, c->y, nw, nh, 1); + break; } } while (ev.type != ButtonRelease); XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); t@@ -1576,8 +1517,7 @@ resizemouse(const Arg *arg) } } -void -resizerequest(XEvent *e) +void resizerequest(XEvent *e) { XResizeRequestEvent *ev = &e->xresizerequest; Client *i; t@@ -1589,8 +1529,7 @@ resizerequest(XEvent *e) } } -void -restack(Monitor *m) +void restack(Monitor *m) { Client *c; XEvent ev; t@@ -1614,8 +1553,7 @@ restack(Monitor *m) while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); } -void -run(void) +void run(void) { XEvent ev; /* main event loop */ t@@ -1625,8 +1563,7 @@ run(void) handler[ev.type](&ev); /* call handler */ } -void -scan(void) +void scan(void) { unsigned int i, num; Window d1, d2, *wins = NULL; t@@ -1635,7 +1572,7 @@ scan(void) if (XQueryTree(dpy, root, &d1, &d2, &wins, &num)) { for (i = 0; i < num; i++) { if (!XGetWindowAttributes(dpy, wins[i], &wa) - || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) + || wa.override_redirect || XGetTransientForHint(dpy, wins[i], &d1)) continue; if (wa.map_state == IsViewable || getstate(wins[i]) == IconicState) manage(wins[i], &wa); t@@ -1644,7 +1581,7 @@ scan(void) if (!XGetWindowAttributes(dpy, wins[i], &wa)) continue; if (XGetTransientForHint(dpy, wins[i], &d1) - && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) + && (wa.map_state == IsViewable || getstate(wins[i]) == IconicState)) manage(wins[i], &wa); } if (wins) t@@ -1652,8 +1589,7 @@ scan(void) } } -void -sendmon(Client *c, Monitor *m) +void sendmon(Client *c, Monitor *m) { if (c->mon == m) return; t@@ -1668,17 +1604,15 @@ sendmon(Client *c, Monitor *m) arrange(NULL); } -void -setclientstate(Client *c, long state) +void setclientstate(Client *c, long state) { long data[] = { state, None }; XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32, - PropModeReplace, (unsigned char *)data, 2); + PropModeReplace, (unsigned char *)data, 2); } -int -sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4) +int sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, long d4) { int n; Atom *protocols, mt; t@@ -1712,24 +1646,22 @@ sendevent(Window w, Atom proto, int mask, long d0, long d1, long d2, long d3, lo return exists; } -void -setfocus(Client *c) +void setfocus(Client *c) { if (!c->neverfocus) { XSetInputFocus