|
|
@ -61,12 +61,11 @@ typedef struct Client Client; |
|
|
|
struct Client { |
|
|
|
struct Client { |
|
|
|
char name[256]; |
|
|
|
char name[256]; |
|
|
|
int x, y, w, h; |
|
|
|
int x, y, w, h; |
|
|
|
int rx, ry, rw, rh; /* revert geometry */ |
|
|
|
|
|
|
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh; |
|
|
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh; |
|
|
|
int minax, maxax, minay, maxay; |
|
|
|
int minax, maxax, minay, maxay; |
|
|
|
long flags; |
|
|
|
long flags; |
|
|
|
unsigned int border, oldborder; |
|
|
|
unsigned int border, oldborder; |
|
|
|
Bool isbanned, isfixed, ismax, isfloating, wasfloating; |
|
|
|
Bool isbanned, isfixed, isfloating; |
|
|
|
Bool *tags; |
|
|
|
Bool *tags; |
|
|
|
Client *next; |
|
|
|
Client *next; |
|
|
|
Client *prev; |
|
|
|
Client *prev; |
|
|
@ -157,6 +156,7 @@ void leavenotify(XEvent *e); |
|
|
|
void manage(Window w, XWindowAttributes *wa); |
|
|
|
void manage(Window w, XWindowAttributes *wa); |
|
|
|
void mappingnotify(XEvent *e); |
|
|
|
void mappingnotify(XEvent *e); |
|
|
|
void maprequest(XEvent *e); |
|
|
|
void maprequest(XEvent *e); |
|
|
|
|
|
|
|
void maximize(const char *arg); |
|
|
|
void movemouse(Client *c); |
|
|
|
void movemouse(Client *c); |
|
|
|
Client *nexttiled(Client *c); |
|
|
|
Client *nexttiled(Client *c); |
|
|
|
void propertynotify(XEvent *e); |
|
|
|
void propertynotify(XEvent *e); |
|
|
@ -178,7 +178,6 @@ unsigned int textw(const char *text); |
|
|
|
void tile(void); |
|
|
|
void tile(void); |
|
|
|
void togglebar(const char *arg); |
|
|
|
void togglebar(const char *arg); |
|
|
|
void togglefloating(const char *arg); |
|
|
|
void togglefloating(const char *arg); |
|
|
|
void togglemax(const char *arg); |
|
|
|
|
|
|
|
void toggletag(const char *arg); |
|
|
|
void toggletag(const char *arg); |
|
|
|
void toggleview(const char *arg); |
|
|
|
void toggleview(const char *arg); |
|
|
|
void unban(Client *c); |
|
|
|
void unban(Client *c); |
|
|
@ -466,7 +465,6 @@ configurerequest(XEvent *e) { |
|
|
|
XWindowChanges wc; |
|
|
|
XWindowChanges wc; |
|
|
|
|
|
|
|
|
|
|
|
if((c = getclient(ev->window))) { |
|
|
|
if((c = getclient(ev->window))) { |
|
|
|
c->ismax = False; |
|
|
|
|
|
|
|
if(ev->value_mask & CWBorderWidth) |
|
|
|
if(ev->value_mask & CWBorderWidth) |
|
|
|
c->border = ev->border_width; |
|
|
|
c->border = ev->border_width; |
|
|
|
if(c->isfixed || c->isfloating || (floating == layout->arrange)) { |
|
|
|
if(c->isfixed || c->isfloating || (floating == layout->arrange)) { |
|
|
@ -563,7 +561,7 @@ drawbar(void) { |
|
|
|
dc.x = x; |
|
|
|
dc.x = x; |
|
|
|
if(sel) { |
|
|
|
if(sel) { |
|
|
|
drawtext(sel->name, dc.sel); |
|
|
|
drawtext(sel->name, dc.sel); |
|
|
|
drawsquare(sel->ismax, sel->isfloating, dc.sel); |
|
|
|
drawsquare(False, sel->isfloating, dc.sel); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
drawtext(NULL, dc.norm); |
|
|
|
drawtext(NULL, dc.norm); |
|
|
@ -1078,6 +1076,13 @@ maprequest(XEvent *e) { |
|
|
|
manage(ev->window, &wa); |
|
|
|
manage(ev->window, &wa); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
|
|
maximize(const char *arg) { |
|
|
|
|
|
|
|
if(!sel || (!sel->isfloating && layout->arrange != floating)) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
resize(sel, wax, way, waw - 2 * sel->border, wah - 2 * sel->border, True); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
movemouse(Client *c) { |
|
|
|
movemouse(Client *c) { |
|
|
|
int x1, y1, ocx, ocy, di, nx, ny; |
|
|
|
int x1, y1, ocx, ocy, di, nx, ny; |
|
|
@ -1090,7 +1095,6 @@ movemouse(Client *c) { |
|
|
|
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
|
|
if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
|
|
None, cursor[CurMove], CurrentTime) != GrabSuccess) |
|
|
|
None, cursor[CurMove], CurrentTime) != GrabSuccess) |
|
|
|
return; |
|
|
|
return; |
|
|
|
c->ismax = False; |
|
|
|
|
|
|
|
XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
|
|
|
XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
|
|
|
for(;;) { |
|
|
|
for(;;) { |
|
|
|
XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); |
|
|
|
XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask, &ev); |
|
|
@ -1248,7 +1252,6 @@ resizemouse(Client *c) { |
|
|
|
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; |
|
|
|
c->ismax = False; |
|
|
|
|
|
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->border - 1, c->h + c->border - 1); |
|
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w + c->border - 1, c->h + c->border - 1); |
|
|
|
for(;;) { |
|
|
|
for(;;) { |
|
|
|
XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask , &ev); |
|
|
|
XMaskEvent(dpy, MOUSEMASK | ExposureMask | SubstructureRedirectMask , &ev); |
|
|
@ -1609,7 +1612,6 @@ tile(void) { |
|
|
|
ny = way; |
|
|
|
ny = way; |
|
|
|
nw = 0; /* gcc stupidity requires this */ |
|
|
|
nw = 0; /* gcc stupidity requires this */ |
|
|
|
for(i = 0, c = mc = nexttiled(clients); c; c = nexttiled(c->next), i++) { |
|
|
|
for(i = 0, c = mc = nexttiled(clients); c; c = nexttiled(c->next), i++) { |
|
|
|
c->ismax = False; |
|
|
|
|
|
|
|
if(i == 0) { /* master */ |
|
|
|
if(i == 0) { /* master */ |
|
|
|
nw = mw - 2 * c->border; |
|
|
|
nw = mw - 2 * c->border; |
|
|
|
nh = wah - 2 * c->border; |
|
|
|
nh = wah - 2 * c->border; |
|
|
@ -1654,34 +1656,6 @@ togglefloating(const char *arg) { |
|
|
|
arrange(); |
|
|
|
arrange(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
|
|
|
togglemax(const char *arg) { |
|
|
|
|
|
|
|
XEvent ev; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(!sel || sel->isfixed) |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
if((sel->ismax = !sel->ismax)) { |
|
|
|
|
|
|
|
if((layout->arrange == floating) || sel->isfloating) |
|
|
|
|
|
|
|
sel->wasfloating = True; |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
togglefloating(NULL); |
|
|
|
|
|
|
|
sel->wasfloating = False; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
sel->rx = sel->x; |
|
|
|
|
|
|
|
sel->ry = sel->y; |
|
|
|
|
|
|
|
sel->rw = sel->w; |
|
|
|
|
|
|
|
sel->rh = sel->h; |
|
|
|
|
|
|
|
resize(sel, wax, way, waw - 2 * sel->border, wah - 2 * sel->border, True); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
resize(sel, sel->rx, sel->ry, sel->rw, sel->rh, True); |
|
|
|
|
|
|
|
if(!sel->wasfloating) |
|
|
|
|
|
|
|
togglefloating(NULL); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
drawbar(); |
|
|
|
|
|
|
|
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void |
|
|
|
void |
|
|
|
toggletag(const char *arg) { |
|
|
|
toggletag(const char *arg) { |
|
|
|
unsigned int i, j; |
|
|
|
unsigned int i, j; |
|
|
|