all repos — dwm @ 238dd5d2b15b8bdc0f05d5be7f86a1ca03d2920b

my dwm build

renamed view.c into screen.c
Anselm R. Garbe arg@suckless.org
Mon, 19 Feb 2007 15:05:29 +0100
commit

238dd5d2b15b8bdc0f05d5be7f86a1ca03d2920b

parent

64871a7045077bb2ec4cbcd62a74cabbe6b45096

4 files changed, 67 insertions(+), 69 deletions(-)

jump to
M MakefileMakefile

@@ -3,7 +3,7 @@ # (C)opyright MMVI-MMVII Anselm R. Garbe

include config.mk -SRC = client.c draw.c event.c main.c manage.c util.c +SRC = client.c draw.c event.c main.c screen.c util.c OBJ = ${SRC:.c=.o} all: options dwm
M client.cclient.c

@@ -10,6 +10,19 @@

/* static */ static void +attachstack(Client *c) { + c->snext = stack; + stack = c; +} + +static void +detachstack(Client *c) { + Client **tc; + for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext); + *tc = c->snext; +} + +static void grabbuttons(Client *c, Bool focused) { XUngrabButton(dpy, AnyButton, AnyModifier, c->win);

@@ -68,6 +81,24 @@ XChangeProperty(dpy, c->win, wmatom[WMState], wmatom[WMState], 32,

PropModeReplace, (unsigned char *)data, 2); } +static void +togglemax(Client *c) { + XEvent ev; + + if(c->isfixed) + return; + if((c->ismax = !c->ismax)) { + c->rx = c->x; + c->ry = c->y; + c->rw = c->w; + c->rh = c->h; + resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); + } + else + resize(c, c->rx, c->ry, c->rw, c->rh, True); + while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); +} + static int xerrordummy(Display *dsply, XErrorEvent *ee) { return 0;

@@ -81,12 +112,6 @@ if(clients)

clients->prev = c; c->next = clients; clients = c; -} - -void -attachstack(Client *c) { - c->snext = stack; - stack = c; } void

@@ -119,13 +144,6 @@ c->next = c->prev = NULL;

} void -detachstack(Client *c) { - Client **tc; - for(tc=&stack; *tc && *tc != c; tc=&(*tc)->snext); - *tc = c->snext; -} - -void focus(Client *c) { if(c && !isvisible(c)) return;

@@ -254,6 +272,12 @@ setclientstate(c, NormalState);

if(isvisible(c)) focus(c); arrange(); +} + +Client * +nexttiled(Client *c) { + for(; c && (c->isfloat || !isvisible(c)); c = c->next); + return c; } void

@@ -416,3 +440,26 @@ XSetErrorHandler(xerror);

XUngrabServer(dpy); arrange(); } + +void +zoom(Arg *arg) { + unsigned int n; + Client *c; + + if(!sel) + return; + if(sel->isfloat || (arrange == dofloat)) { + togglemax(sel); + return; + } + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) + n++; + + if((c = sel) == nexttiled(clients)) + if(!(c = nexttiled(c->next))) + return; + detach(c); + attach(c); + focus(c); + arrange(); +}
M dwm.hdwm.h

@@ -99,22 +99,20 @@ extern Display *dpy;

extern Window root, barwin; /* client.c */ -extern void attach(Client *c); /* attaches c to global client list */ -extern void attachstack(Client *c); /* attaches client to stack */ extern void configure(Client *c); /* send synthetic configure event */ -extern void detach(Client *c); /* detaches c from global client list */ -extern void detachstack(Client *c); /* detaches client from stack */ extern void focus(Client *c); /* focus c, c may be NULL */ extern void focusnext(Arg *arg); /* focuses next visible client, arg is ignored */ extern void focusprev(Arg *arg); /* focuses previous visible client, arg is ignored */ extern Client *getclient(Window w); /* return client of w */ extern void killclient(Arg *arg); /* kill c nicely */ extern void manage(Window w, XWindowAttributes *wa); /* manage new client */ +Client *nexttiled(Client *c); /* returns tiled successor of c */ extern void resize(Client *c, int x, int y, int w, int h, Bool sizehints); /* resize c*/ extern void updatesizehints(Client *c); /* update the size hint variables of c */ extern void updatetitle(Client *c); /* update the name of c */ extern void unmanage(Client *c); /* destroy c */ +extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ /* draw.c */ extern void drawstatus(void); /* draw the bar */

@@ -131,7 +129,7 @@ extern void quit(Arg *arg); /* quit dwm nicely */

extern void sendevent(Window w, Atom a, long value); /* send synthetic event to w */ extern int xerror(Display *dsply, XErrorEvent *ee); /* dwm's X error handler */ -/* manage.c */ +/* screen.c */ extern void compileregexps(void); /* initialize regexps of rules defined in config.h */ extern void dofloat(void); /* arranges all windows floating */ extern void dotile(void); /* arranges all windows tiled */

@@ -146,9 +144,9 @@ extern void togglemode(Arg *arg); /* toggles global arrange function (dotile/dofloat) */

extern void toggletag(Arg *arg); /* toggles c tags with arg's index */ extern void toggleview(Arg *arg); /* toggles the tag with arg's index (in)visible */ extern void view(Arg *arg); /* views the tag with arg's index */ -extern void zoom(Arg *arg); /* zooms the focused client to master area, arg is ignored */ /* util.c */ extern void *emallocz(unsigned int size); /* allocates zero-initialized memory, exits on error */ extern void eprint(const char *errstr, ...); /* prints errstr and exits with 1 */ extern void spawn(Arg *arg); /* forks a new subprocess with to arg's cmd */ +
M view.cscreen.c

@@ -32,30 +32,6 @@

static Regexps *regexps = NULL; static unsigned int len = 0; -static Client * -nextmanaged(Client *c) { - for(; c && (c->isfloat || !isvisible(c)); c = c->next); - return c; -} - -static void -togglemax(Client *c) { - XEvent ev; - - if(c->isfixed) - return; - if((c->ismax = !c->ismax)) { - c->rx = c->x; - c->ry = c->y; - c->rw = c->w; - c->rh = c->h; - resize(c, wax, way, waw - 2 * BORDERPX, wah - 2 * BORDERPX, True); - } - else - resize(c, c->rx, c->ry, c->rw, c->rh, True); - while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)); -} - /* extern */ void

@@ -112,7 +88,7 @@ dotile(void) {

unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; Client *c; - for(n = 0, c = nextmanaged(clients); c; c = nextmanaged(c->next)) + for(n = 0, c = nexttiled(clients); c; c = nexttiled(c->next)) n++; /* window geoms */ mh = (n > nmaster) ? wah / nmaster : wah / (n > 0 ? n : 1);

@@ -209,7 +185,7 @@ XRaiseWindow(dpy, sel->win);

if(arrange != dofloat) { if(!sel->isfloat) XLowerWindow(dpy, sel->win); - for(c = nextmanaged(clients); c; c = nextmanaged(c->next)) { + for(c = nexttiled(clients); c; c = nexttiled(c->next)) { if(c == sel) continue; XLowerWindow(dpy, c->win);

@@ -319,26 +295,3 @@ if(arg->i >= 0 && arg->i < ntags)

seltag[arg->i] = True; arrange(); } - -void -zoom(Arg *arg) { - unsigned int n; - Client *c; - - if(!sel) - return; - if(sel->isfloat || (arrange == dofloat)) { - togglemax(sel); - return; - } - for(n = 0, c = nextmanaged(clients); c; c = nextmanaged(c->next)) - n++; - - if((c = sel) == nextmanaged(clients)) - if(!(c = nextmanaged(c->next))) - return; - detach(c); - attach(c); - focus(c); - arrange(); -}