|
|
@ -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();
|
|
|
|