Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
hotfix of idxoftag
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
f83e800
..
0e72c47
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-69,7
+69,7
@@
struct Client {
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int minax, maxax, minay, maxay;
long flags;
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
int minax, maxax, minay, maxay;
long flags;
- unsigned int b
order, oldborder
;
+ unsigned int b
w, oldbw
;
Bool isbanned, isfixed, isfloating, isurgent;
Bool *tags;
Client *next;
Bool isbanned, isfixed, isfloating, isurgent;
Bool *tags;
Client *next;
@@
-210,7
+210,7
@@
void zoom(const char *arg);
char stext[256], buf[256];
int screen, sx, sy, sw, sh;
int (*xerrorxlib)(Display *, XErrorEvent *);
char stext[256], buf[256];
int screen, sx, sy, sw, sh;
int (*xerrorxlib)(Display *, XErrorEvent *);
-int bx, by, bw, bh, blw, mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
+int bx, by, bw, bh, blw,
bgw,
mx, my, mw, mh, mox, moy, mow, moh, tx, ty, tw, th, wx, wy, ww, wh;
unsigned int numlockmask = 0;
void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
unsigned int numlockmask = 0;
void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
@@
-259,7
+259,7
@@
applyrules(Client *c) {
XGetClassHint(dpy, c->win, &ch);
for(i = 0; i < LENGTH(rules); i++) {
r = &rules[i];
XGetClassHint(dpy, c->win, &ch);
for(i = 0; i < LENGTH(rules); i++) {
r = &rules[i];
- if(
strstr(c->name, r->title
)
+ if(
(r->title && strstr(c->name, r->title)
)
|| (ch.res_class && r->class && strstr(ch.res_class, r->class))
|| (ch.res_name && r->instance && strstr(ch.res_name, r->instance)))
{
|| (ch.res_class && r->class && strstr(ch.res_class, r->class))
|| (ch.res_name && r->instance && strstr(ch.res_name, r->instance)))
{
@@
-322,10
+322,10
@@
buttonpress(XEvent *e) {
XButtonPressedEvent *ev = &e->xbutton;
if(ev->window == barwin) {
XButtonPressedEvent *ev = &e->xbutton;
if(ev->window == barwin) {
- x =
0
;
+ x =
bgw
;
for(i = 0; i < LENGTH(tags); i++) {
x += textw(tags[i]);
for(i = 0; i < LENGTH(tags); i++) {
x += textw(tags[i]);
- if(ev->x < x) {
+ if(ev->x
> bgw && ev->x
< x) {
if(ev->button == Button1) {
if(ev->state & MODKEY)
tag(tags[i]);
if(ev->button == Button1) {
if(ev->state & MODKEY)
tag(tags[i]);
@@
-413,7
+413,7
@@
configure(Client *c) {
ce.y = c->y;
ce.width = c->w;
ce.height = c->h;
ce.y = c->y;
ce.width = c->w;
ce.height = c->h;
- ce.border_width = c->b
order
;
+ ce.border_width = c->b
w
;
ce.above = None;
ce.override_redirect = False;
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
ce.above = None;
ce.override_redirect = False;
XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
@@
-423,8
+423,11
@@
void
configurenotify(XEvent *e) {
XConfigureEvent *ev = &e->xconfigure;
configurenotify(XEvent *e) {
XConfigureEvent *ev = &e->xconfigure;
- if(ev->window == root && (ev->width != sw || ev->height != sh))
+ if(ev->window == root && (ev->width != sw || ev->height != sh)) {
+ sw = ev->width;
+ sh = ev->height;
setgeom(NULL);
setgeom(NULL);
+ }
}
void
}
void
@@
-435,7
+438,7
@@
configurerequest(XEvent *e) {
if((c = getclient(ev->window))) {
if(ev->value_mask & CWBorderWidth)
if((c = getclient(ev->window))) {
if(ev->value_mask & CWBorderWidth)
- c->b
order
= ev->border_width;
+ c->b
w
= ev->border_width;
if(c->isfixed || c->isfloating || lt->isfloating) {
if(ev->value_mask & CWX)
c->x = sx + ev->x;
if(c->isfixed || c->isfloating || lt->isfloating) {
if(ev->value_mask & CWX)
c->x = sx + ev->x;
@@
-514,6
+517,9
@@
drawbar(void) {
Client *c;
dc.x = 0;
Client *c;
dc.x = 0;
+ dc.w = bgw;
+ drawtext(geom->symbol, dc.norm, False);
+ dc.x += bgw;
for(c = stack; c && !isvisible(c); c = c->snext);
for(i = 0; i < LENGTH(tags); i++) {
dc.w = textw(tags[i]);
for(c = stack; c && !isvisible(c); c = c->snext);
for(i = 0; i < LENGTH(tags); i++) {
dc.w = textw(tags[i]);
@@
-854,7
+860,7
@@
unsigned int
idxoftag(const char *t) {
unsigned int i;
idxoftag(const char *t) {
unsigned int i;
- for(i = 0; (i < LENGTH(tags)) &&
(tags[i] !=
t); i++);
+ for(i = 0; (i < LENGTH(tags)) &&
t && strcmp(tags[i],
t); i++);
return (i < LENGTH(tags)) ? i : 0;
}
return (i < LENGTH(tags)) ? i : 0;
}
@@
-997,25
+1003,25
@@
manage(Window w, XWindowAttributes *wa) {
c->y = wa->y;
c->w = wa->width;
c->h = wa->height;
c->y = wa->y;
c->w = wa->width;
c->h = wa->height;
- c->oldb
order
= wa->border_width;
+ c->oldb
w
= wa->border_width;
if(c->w == sw && c->h == sh) {
c->x = sx;
c->y = sy;
if(c->w == sw && c->h == sh) {
c->x = sx;
c->y = sy;
- c->b
order
= wa->border_width;
+ c->b
w
= wa->border_width;
}
else {
}
else {
- if(c->x + c->w + 2 * c->b
order
> wx + ww)
- c->x = wx + ww - c->w - 2 * c->b
order
;
- if(c->y + c->h + 2 * c->b
order
> wy + wh)
- c->y = wy + wh - c->h - 2 * c->b
order
;
+ if(c->x + c->w + 2 * c->b
w
> wx + ww)
+ c->x = wx + ww - c->w - 2 * c->b
w
;
+ if(c->y + c->h + 2 * c->b
w
> wy + wh)
+ c->y = wy + wh - c->h - 2 * c->b
w
;
if(c->x < wx)
c->x = wx;
if(c->y < wy)
c->y = wy;
if(c->x < wx)
c->x = wx;
if(c->y < wy)
c->y = wy;
- c->b
order
= BORDERPX;
+ c->b
w
= BORDERPX;
}
}
- wc.border_width = c->b
order
;
+ wc.border_width = c->b
w
;
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
configure(c); /* propagates border_width, if size doesn't change */
XConfigureWindow(dpy, w, CWBorderWidth, &wc);
XSetWindowBorder(dpy, w, dc.norm[ColBorder]);
configure(c); /* propagates border_width, if size doesn't change */
@@
-1068,7
+1074,7
@@
monocle(void) {
for(c = clients; c; c = c->next)
if(isvisible(c))
for(c = clients; c; c = c->next)
if(isvisible(c))
- resize(c, mox, moy, mow
, moh
, RESIZEHINTS);
+ resize(c, mox, moy, mow
- 2 * c->bw, moh - 2 * c->bw
, RESIZEHINTS);
}
void
}
void
@@
-1101,12
+1107,12
@@
movemouse(Client *c) {
ny = ocy + (ev.xmotion.y - y1);
if(abs(wx - nx) < SNAP)
nx = wx;
ny = ocy + (ev.xmotion.y - y1);
if(abs(wx - nx) < SNAP)
nx = wx;
- else if(abs((wx + ww) - (nx + c->w + 2 * c->b
order
)) < SNAP)
- nx = wx + ww - c->w - 2 * c->b
order
;
+ else if(abs((wx + ww) - (nx + c->w + 2 * c->b
w
)) < SNAP)
+ nx = wx + ww - c->w - 2 * c->b
w
;
if(abs(wy - ny) < SNAP)
ny = wy;
if(abs(wy - ny) < SNAP)
ny = wy;
- else if(abs((wy + wh) - (ny + c->h + 2 * c->b
order
)) < SNAP)
- ny = wy + wh - c->h - 2 * c->b
order
;
+ else if(abs((wy + wh) - (ny + c->h + 2 * c->b
w
)) < SNAP)
+ ny = wy + wh - c->h - 2 * c->b
w
;
if(!c->isfloating && !lt->isfloating && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP))
togglefloating(NULL);
if((lt->isfloating) || c->isfloating)
if(!c->isfloating && !lt->isfloating && (abs(nx - c->x) > SNAP || abs(ny - c->y) > SNAP))
togglefloating(NULL);
if((lt->isfloating) || c->isfloating)
@@
-1216,19
+1222,19
@@
resize(Client *c, int x, int y, int w, int h, Bool sizehints) {
if(w <= 0 || h <= 0)
return;
if(x > sx + sw)
if(w <= 0 || h <= 0)
return;
if(x > sx + sw)
- x = sw - w - 2 * c->b
order
;
+ x = sw - w - 2 * c->b
w
;
if(y > sy + sh)
if(y > sy + sh)
- y = sh - h - 2 * c->b
order
;
- if(x + w + 2 * c->b
order
< sx)
+ y = sh - h - 2 * c->b
w
;
+ if(x + w + 2 * c->b
w
< sx)
x = sx;
x = sx;
- if(y + h + 2 * c->b
order
< sy)
+ if(y + h + 2 * c->b
w
< sy)
y = sy;
if(c->x != x || c->y != y || c->w != w || c->h != h) {
c->x = wc.x = x;
c->y = wc.y = y;
c->w = wc.width = w;
c->h = wc.height = h;
y = sy;
if(c->x != x || c->y != y || c->w != w || c->h != h) {
c->x = wc.x = x;
c->y = wc.y = y;
c->w = wc.width = w;
c->h = wc.height = h;
- wc.border_width = c->b
order
;
+ wc.border_width = c->b
w
;
XConfigureWindow(dpy, c->win,
CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c);
XConfigureWindow(dpy, c->win,
CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
configure(c);
@@
-1247,13
+1253,13
@@
resizemouse(Client *c) {
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
None, cursor[CurResize], CurrentTime) != GrabSuccess)
return;
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync,
None, cursor[CurResize], CurrentTime) != GrabSuccess)
return;
- XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->b
order - 1, c->h + c->border
- 1);
+ XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->b
w - 1, c->h + c->bw
- 1);
for(;;) {
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev);
switch(ev.type) {
case ButtonRelease:
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0,
for(;;) {
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask , &ev);
switch(ev.type) {
case ButtonRelease:
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0,
- c->w + c->b
order - 1, c->h + c->border
- 1);
+ c->w + c->b
w - 1, c->h + c->bw
- 1);
XUngrabPointer(dpy, CurrentTime);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
return;
XUngrabPointer(dpy, CurrentTime);
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev));
return;
@@
-1264,9
+1270,9
@@
resizemouse(Client *c) {
break;
case MotionNotify:
XSync(dpy, False);
break;
case MotionNotify:
XSync(dpy, False);
- if((nw = ev.xmotion.x - ocx - 2 * c->b
order
+ 1) <= 0)
+ if((nw = ev.xmotion.x - ocx - 2 * c->b
w
+ 1) <= 0)
nw = 1;
nw = 1;
- if((nh = ev.xmotion.y - ocy - 2 * c->b
order
+ 1) <= 0)
+ if((nh = ev.xmotion.y - ocy - 2 * c->b
w
+ 1) <= 0)
nh = 1;
if(!c->isfloating && !lt->isfloating && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP))
togglefloating(NULL);
nh = 1;
if(!c->isfloating && !lt->isfloating && (abs(nw - c->w) > SNAP || abs(nh - c->h) > SNAP))
togglefloating(NULL);
@@
-1442,7
+1448,7
@@
setlayout(const char *arg) {
void
setup(void) {
void
setup(void) {
- unsigned int i;
+ unsigned int i
, w
;
XSetWindowAttributes wa;
/* init screen */
XSetWindowAttributes wa;
/* init screen */
@@
-1497,9
+1503,14
@@
setup(void) {
/* init bar */
for(blw = i = 0; i < LENGTH(layouts); i++) {
/* init bar */
for(blw = i = 0; i < LENGTH(layouts); i++) {
- i = textw(layouts[i].symbol);
- if(i > blw)
- blw = i;
+ w = textw(layouts[i].symbol);
+ if(w > blw)
+ blw = w;
+ }
+ for(bgw = i = 0; i < LENGTH(geoms); i++) {
+ w = textw(geoms[i].symbol);
+ if(w > bgw)
+ bgw = w;
}
wa.override_redirect = 1;
}
wa.override_redirect = 1;
@@
-1600,11
+1611,11
@@
tileh(void) {
for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i + 1 == n) /* remainder */
for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i + 1 == n) /* remainder */
- tileresize(c, x, ty, (tx + tw) - x - 2 * c->b
order, th - 2 * c->border
);
+ tileresize(c, x, ty, (tx + tw) - x - 2 * c->b
w, th - 2 * c->bw
);
else
else
- tileresize(c, x, ty, w - 2 * c->b
order, th - 2 * c->border
);
+ tileresize(c, x, ty, w - 2 * c->b
w, th - 2 * c->bw
);
if(w != tw)
if(w != tw)
- x = c->x + c->w + 2 * c->b
order
;
+ x = c->x + c->w + 2 * c->b
w
;
}
}
}
}
@@
-1613,9
+1624,9
@@
tilemaster(unsigned int n) {
Client *c = nexttiled(clients);
if(n == 1)
Client *c = nexttiled(clients);
if(n == 1)
- tileresize(c, mox, moy, mow - 2 * c->b
order, moh - 2 * c->border
);
+ tileresize(c, mox, moy, mow - 2 * c->b
w, moh - 2 * c->bw
);
else
else
- tileresize(c, mx, my, mw - 2 * c->b
order, mh - 2 * c->border
);
+ tileresize(c, mx, my, mw - 2 * c->b
w, mh - 2 * c->bw
);
return c;
}
return c;
}
@@
-1646,11
+1657,11
@@
tilev(void) {
for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i + 1 == n) /* remainder */
for(i = 0, c = nexttiled(c->next); c; c = nexttiled(c->next), i++) {
if(i + 1 == n) /* remainder */
- tileresize(c, tx, y, tw - 2 * c->b
order, (ty + th) - y - 2 * c->border
);
+ tileresize(c, tx, y, tw - 2 * c->b
w, (ty + th) - y - 2 * c->bw
);
else
else
- tileresize(c, tx, y, tw - 2 * c->b
order, h - 2 * c->border
);
+ tileresize(c, tx, y, tw - 2 * c->b
w, h - 2 * c->bw
);
if(h != th)
if(h != th)
- y = c->y + c->h + 2 * c->b
order
;
+ y = c->y + c->h + 2 * c->b
w
;
}
}
}
}
@@
-1702,7
+1713,7
@@
void
unmanage(Client *c) {
XWindowChanges wc;
unmanage(Client *c) {
XWindowChanges wc;
- wc.border_width = c->oldb
order
;
+ wc.border_width = c->oldb
w
;
/* The server grab construct avoids race conditions. */
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);
/* The server grab construct avoids race conditions. */
XGrabServer(dpy);
XSetErrorHandler(xerrordummy);