|
|
@ -380,7 +380,6 @@ void |
|
|
|
arrange(void) { |
|
|
|
arrange(void) { |
|
|
|
Monitor *m; |
|
|
|
Monitor *m; |
|
|
|
|
|
|
|
|
|
|
|
/* optimise two loops into one, check focus(NULL) */ |
|
|
|
|
|
|
|
for(m = mons; m; m = m->next) |
|
|
|
for(m = mons; m; m = m->next) |
|
|
|
showhide(m->stack); |
|
|
|
showhide(m->stack); |
|
|
|
focus(NULL); |
|
|
|
focus(NULL); |
|
|
@ -440,7 +439,7 @@ buttonpress(XEvent *e) { |
|
|
|
} |
|
|
|
} |
|
|
|
for(i = 0; i < LENGTH(buttons); i++) |
|
|
|
for(i = 0; i < LENGTH(buttons); i++) |
|
|
|
if(click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button |
|
|
|
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); |
|
|
|
buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -885,7 +884,7 @@ getstate(Window w) { |
|
|
|
Atom real; |
|
|
|
Atom real; |
|
|
|
|
|
|
|
|
|
|
|
status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], |
|
|
|
status = XGetWindowProperty(dpy, w, wmatom[WMState], 0L, 2L, False, wmatom[WMState], |
|
|
|
&real, &format, &n, &extra, (unsigned char **)&p); |
|
|
|
&real, &format, &n, &extra, (unsigned char **)&p); |
|
|
|
if(status != Success) |
|
|
|
if(status != Success) |
|
|
|
return -1; |
|
|
|
return -1; |
|
|
|
if(n != 0) |
|
|
|
if(n != 0) |
|
|
@ -909,9 +908,7 @@ gettextprop(Window w, Atom atom, char *text, unsigned int size) { |
|
|
|
if(name.encoding == XA_STRING) |
|
|
|
if(name.encoding == XA_STRING) |
|
|
|
strncpy(text, (char *)name.value, size - 1); |
|
|
|
strncpy(text, (char *)name.value, size - 1); |
|
|
|
else { |
|
|
|
else { |
|
|
|
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success |
|
|
|
if(XmbTextPropertyToTextList(dpy, &name, &list, &n) >= Success && n > 0 && *list) { |
|
|
|
&& n > 0 && *list) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
strncpy(text, *list, size - 1); |
|
|
|
strncpy(text, *list, size - 1); |
|
|
|
XFreeStringList(list); |
|
|
|
XFreeStringList(list); |
|
|
|
} |
|
|
|
} |
|
|
@ -1022,8 +1019,8 @@ keypress(XEvent *e) { |
|
|
|
keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
|
|
|
keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0); |
|
|
|
for(i = 0; i < LENGTH(keys); i++) |
|
|
|
for(i = 0; i < LENGTH(keys); i++) |
|
|
|
if(keysym == keys[i].keysym |
|
|
|
if(keysym == keys[i].keysym |
|
|
|
&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) |
|
|
|
&& CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) |
|
|
|
&& keys[i].func) |
|
|
|
&& keys[i].func) |
|
|
|
keys[i].func(&(keys[i].arg)); |
|
|
|
keys[i].func(&(keys[i].arg)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1168,7 +1165,7 @@ movemouse(const Arg *arg) { |
|
|
|
nx = ocx + (ev.xmotion.x - x); |
|
|
|
nx = ocx + (ev.xmotion.x - x); |
|
|
|
ny = ocy + (ev.xmotion.y - y); |
|
|
|
ny = ocy + (ev.xmotion.y - y); |
|
|
|
if(snap && nx >= selmon->wx && nx <= selmon->wx + selmon->ww |
|
|
|
if(snap && nx >= selmon->wx && nx <= selmon->wx + selmon->ww |
|
|
|
&& ny >= selmon->wy && ny <= selmon->wy + selmon->wh) { |
|
|
|
&& ny >= selmon->wy && ny <= selmon->wy + selmon->wh) { |
|
|
|
if(abs(selmon->wx - nx) < snap) |
|
|
|
if(abs(selmon->wx - nx) < snap) |
|
|
|
nx = selmon->wx; |
|
|
|
nx = selmon->wx; |
|
|
|
else if(abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) |
|
|
|
else if(abs((selmon->wx + selmon->ww) - (nx + WIDTH(c))) < snap) |
|
|
@ -1178,7 +1175,7 @@ movemouse(const Arg *arg) { |
|
|
|
else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) |
|
|
|
else if(abs((selmon->wy + selmon->wh) - (ny + HEIGHT(c))) < snap) |
|
|
|
ny = selmon->wy + selmon->wh - HEIGHT(c); |
|
|
|
ny = selmon->wy + selmon->wh - HEIGHT(c); |
|
|
|
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange |
|
|
|
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange |
|
|
|
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) |
|
|
|
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) |
|
|
|
togglefloating(NULL); |
|
|
|
togglefloating(NULL); |
|
|
|
} |
|
|
|
} |
|
|
|
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) |
|
|
|
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) |
|
|
@ -1279,7 +1276,7 @@ resizemouse(const Arg *arg) { |
|
|
|
ocx = c->x; |
|
|
|
ocx = c->x; |
|
|
|
ocy = c->y; |
|
|
|
ocy = c->y; |
|
|
|
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
|
|
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
|
|
None, cursor[CurResize], CurrentTime) != GrabSuccess) |
|
|
|
None, cursor[CurResize], CurrentTime) != GrabSuccess) |
|
|
|
return; |
|
|
|
return; |
|
|
|
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); |
|
|
|
do { |
|
|
|
do { |
|
|
@ -1294,9 +1291,10 @@ resizemouse(const Arg *arg) { |
|
|
|
nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); |
|
|
|
nw = MAX(ev.xmotion.x - ocx - 2 * c->bw + 1, 1); |
|
|
|
nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); |
|
|
|
nh = MAX(ev.xmotion.y - ocy - 2 * c->bw + 1, 1); |
|
|
|
if(snap && nw >= selmon->wx && nw <= selmon->wx + selmon->ww |
|
|
|
if(snap && nw >= selmon->wx && nw <= selmon->wx + selmon->ww |
|
|
|
&& nh >= selmon->wy && nh <= selmon->wy + selmon->wh) { |
|
|
|
&& nh >= selmon->wy && nh <= selmon->wy + selmon->wh) |
|
|
|
|
|
|
|
{ |
|
|
|
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange |
|
|
|
if(!c->isfloating && selmon->lt[selmon->sellt]->arrange |
|
|
|
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) |
|
|
|
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap)) |
|
|
|
togglefloating(NULL); |
|
|
|
togglefloating(NULL); |
|
|
|
} |
|
|
|
} |
|
|
|
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) |
|
|
|
if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) |
|
|
@ -1473,8 +1471,8 @@ setup(void) { |
|
|
|
/* select for events */ |
|
|
|
/* select for events */ |
|
|
|
wa.cursor = cursor[CurNormal]; |
|
|
|
wa.cursor = cursor[CurNormal]; |
|
|
|
wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask |
|
|
|
wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask |
|
|
|
|EnterWindowMask|LeaveWindowMask|StructureNotifyMask |
|
|
|
|EnterWindowMask|LeaveWindowMask|StructureNotifyMask |
|
|
|
|PropertyChangeMask; |
|
|
|
|PropertyChangeMask; |
|
|
|
XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); |
|
|
|
XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa); |
|
|
|
XSelectInput(dpy, root, wa.event_mask); |
|
|
|
XSelectInput(dpy, root, wa.event_mask); |
|
|
|
grabkeys(); |
|
|
|
grabkeys(); |
|
|
|