|
@ -51,7 +51,7 @@ |
|
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask) |
|
|
#define MOUSEMASK (BUTTONMASK|PointerMotionMask) |
|
|
#define WIDTH(X) ((X)->w + 2 * (X)->bw) |
|
|
#define WIDTH(X) ((X)->w + 2 * (X)->bw) |
|
|
#define HEIGHT(X) ((X)->h + 2 * (X)->bw) |
|
|
#define HEIGHT(X) ((X)->h + 2 * (X)->bw) |
|
|
#define TAGMASK ((int)((1LL << LENGTH(tags)) - 1)) |
|
|
|
|
|
|
|
|
#define TAGMASK ((int)((1 << LENGTH(tags)) - 1)) |
|
|
#define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height) |
|
|
#define TEXTW(X) (textnw(X, strlen(X)) + dc.font.height) |
|
|
|
|
|
|
|
|
/* enums */ |
|
|
/* enums */ |
|
@ -271,7 +271,7 @@ static Window root; |
|
|
#include "config.h" |
|
|
#include "config.h" |
|
|
|
|
|
|
|
|
/* compile-time check if all tags fit into an unsigned int bit array. */ |
|
|
/* compile-time check if all tags fit into an unsigned int bit array. */ |
|
|
struct NumTags { char limitexceeded[sizeof(unsigned int) * 8 < LENGTH(tags) ? -1 : 1]; }; |
|
|
|
|
|
|
|
|
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; }; |
|
|
|
|
|
|
|
|
/* function implementations */ |
|
|
/* function implementations */ |
|
|
void |
|
|
void |
|
@ -420,9 +420,9 @@ buttonpress(XEvent *e) { |
|
|
} |
|
|
} |
|
|
if(ev->window == selmon->barwin) { |
|
|
if(ev->window == selmon->barwin) { |
|
|
i = x = 0; |
|
|
i = x = 0; |
|
|
do |
|
|
|
|
|
|
|
|
do { |
|
|
x += TEXTW(tags[i]); |
|
|
x += TEXTW(tags[i]); |
|
|
while(ev->x >= x && ++i < LENGTH(tags)); |
|
|
|
|
|
|
|
|
} while(ev->x >= x && ++i < LENGTH(tags)); |
|
|
if(i < LENGTH(tags)) { |
|
|
if(i < LENGTH(tags)) { |
|
|
click = ClkTagBar; |
|
|
click = ClkTagBar; |
|
|
arg.ui = 1 << i; |
|
|
arg.ui = 1 << i; |
|
@ -977,6 +977,7 @@ initfont(const char *fontstr) { |
|
|
XFontSetExtents *font_extents; |
|
|
XFontSetExtents *font_extents; |
|
|
XFontStruct **xfonts; |
|
|
XFontStruct **xfonts; |
|
|
char **font_names; |
|
|
char **font_names; |
|
|
|
|
|
|
|
|
dc.font.ascent = dc.font.descent = 0; |
|
|
dc.font.ascent = dc.font.descent = 0; |
|
|
font_extents = XExtentsOfFontSet(dc.font.set); |
|
|
font_extents = XExtentsOfFontSet(dc.font.set); |
|
|
n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); |
|
|
n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); |
|
@ -1184,8 +1185,7 @@ movemouse(const Arg *arg) { |
|
|
resize(c, nx, ny, c->w, c->h, True); |
|
|
resize(c, nx, ny, c->w, c->h, True); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
while(ev.type != ButtonRelease); |
|
|
|
|
|
|
|
|
} while(ev.type != ButtonRelease); |
|
|
XUngrabPointer(dpy, CurrentTime); |
|
|
XUngrabPointer(dpy, CurrentTime); |
|
|
if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) { |
|
|
if((m = ptrtomon(c->x + c->w / 2, c->y + c->h / 2)) != selmon) { |
|
|
sendmon(c, m); |
|
|
sendmon(c, m); |
|
@ -1303,8 +1303,7 @@ resizemouse(const Arg *arg) { |
|
|
resize(c, c->x, c->y, nw, nh, True); |
|
|
resize(c, c->x, c->y, nw, nh, True); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
while(ev.type != ButtonRelease); |
|
|
|
|
|
|
|
|
} while(ev.type != ButtonRelease); |
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); |
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->bw - 1, c->h + c->bw - 1); |
|
|
XUngrabPointer(dpy, CurrentTime); |
|
|
XUngrabPointer(dpy, CurrentTime); |
|
|
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
|
|
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
|
@ -1347,7 +1346,7 @@ run(void) { |
|
|
XSync(dpy, False); |
|
|
XSync(dpy, False); |
|
|
while(running && !XNextEvent(dpy, &ev)) |
|
|
while(running && !XNextEvent(dpy, &ev)) |
|
|
if(handler[ev.type]) |
|
|
if(handler[ev.type]) |
|
|
(handler[ev.type])(&ev); /* call handler */ |
|
|
|
|
|
|
|
|
handler[ev.type](&ev); /* call handler */ |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void |
|
|
void |
|
|