diff options
| author | Anselm R Garbe <garbeam@gmail.com> | 2008-05-26 09:39:57 +0100 | 
|---|---|---|
| committer | Anselm R Garbe <garbeam@gmail.com> | 2008-05-26 09:39:57 +0100 | 
| commit | 0fe2e783e9e6b097bc6529dc286b4b697f7e1fde (patch) | |
| tree | 65f5b49cdee714a3c6f3194d7f18e1268cac8ecf | |
| parent | cd3d83f571d1e3d9e765df448617ab859bbda584 (diff) | |
| download | dwm-0fe2e783e9e6b097bc6529dc286b4b697f7e1fde.tar.gz | |
applied yiyus domax patch with slight modifications
| -rw-r--r-- | config.def.h | 52 | ||||
| -rw-r--r-- | dwm.1 | 3 | ||||
| -rw-r--r-- | dwm.c | 76 | 
3 files changed, 55 insertions, 76 deletions
| diff --git a/config.def.h b/config.def.h index 12d72b2..ba45347 100644 --- a/config.def.h +++ b/config.def.h @@ -34,6 +34,12 @@ Layout layouts[] = {  /* key definitions */  #define MODKEY Mod1Mask +#define TAGKEYS(KEY,TAG) \ +        { MODKEY,                       KEY,      view,           TAG }, \ +        { MODKEY|ControlMask,           KEY,      toggleview,     TAG }, \ +        { MODKEY|ShiftMask,             KEY,      tag,            TAG }, \ +        { MODKEY|ControlMask|ShiftMask, KEY,      toggletag,      TAG }, +  Key keys[] = {  	/* modifier                     key        function        argument */  	{ MODKEY,                       XK_p,      spawn,          (char *)"exec dmenu_run -fn '"FONT"' -nb '"NORMBGCOLOR"' -nf '"NORMFGCOLOR"' -sb '"SELBGCOLOR"' -sf '"SELFGCOLOR"'" }, @@ -43,48 +49,22 @@ Key keys[] = {  	{ MODKEY,                       XK_k,      focusprev,      NULL },  	{ MODKEY,                       XK_h,      setmfact,       (double[]){-0.05} },  	{ MODKEY,                       XK_l,      setmfact,       (double[]){+0.05} }, +	{ MODKEY,                       XK_m,      togglemax,      NULL },  	{ MODKEY,                       XK_Return, zoom,           NULL },  	{ MODKEY,                       XK_Tab,    viewprevtag,    NULL },  	{ MODKEY|ShiftMask,             XK_c,      killclient,     NULL },  	{ MODKEY,                       XK_space,  togglelayout,   NULL },  	{ MODKEY|ShiftMask,             XK_space,  togglefloating, NULL },  	{ MODKEY,                       XK_0,      view,           (uint[]){ ~0 } }, -	{ MODKEY,                       XK_1,      view,           (uint[]){ 1 << 0 } }, -	{ MODKEY,                       XK_2,      view,           (uint[]){ 1 << 1 } }, -	{ MODKEY,                       XK_3,      view,           (uint[]){ 1 << 2 } }, -	{ MODKEY,                       XK_4,      view,           (uint[]){ 1 << 3 } }, -	{ MODKEY,                       XK_5,      view,           (uint[]){ 1 << 4 } }, -	{ MODKEY,                       XK_6,      view,           (uint[]){ 1 << 5 } }, -	{ MODKEY,                       XK_7,      view,           (uint[]){ 1 << 6 } }, -	{ MODKEY,                       XK_8,      view,           (uint[]){ 1 << 7 } }, -	{ MODKEY,                       XK_9,      view,           (uint[]){ 1 << 8 } }, -	{ MODKEY|ControlMask,           XK_1,      toggleview,     (uint[]){ 1 << 0 } }, -	{ MODKEY|ControlMask,           XK_2,      toggleview,     (uint[]){ 1 << 1 } }, -	{ MODKEY|ControlMask,           XK_3,      toggleview,     (uint[]){ 1 << 2 } }, -	{ MODKEY|ControlMask,           XK_4,      toggleview,     (uint[]){ 1 << 3 } }, -	{ MODKEY|ControlMask,           XK_5,      toggleview,     (uint[]){ 1 << 4 } }, -	{ MODKEY|ControlMask,           XK_6,      toggleview,     (uint[]){ 1 << 5 } }, -	{ MODKEY|ControlMask,           XK_7,      toggleview,     (uint[]){ 1 << 6 } }, -	{ MODKEY|ControlMask,           XK_8,      toggleview,     (uint[]){ 1 << 7 } }, -	{ MODKEY|ControlMask,           XK_9,      toggleview,     (uint[]){ 1 << 8 } },  	{ MODKEY|ShiftMask,             XK_0,      tag,            (uint[]){ ~0 } }, -	{ MODKEY|ShiftMask,             XK_1,      tag,            (uint[]){ 1 << 0 } }, -	{ MODKEY|ShiftMask,             XK_2,      tag,            (uint[]){ 1 << 1 } }, -	{ MODKEY|ShiftMask,             XK_3,      tag,            (uint[]){ 1 << 2 } }, -	{ MODKEY|ShiftMask,             XK_4,      tag,            (uint[]){ 1 << 3 } }, -	{ MODKEY|ShiftMask,             XK_5,      tag,            (uint[]){ 1 << 4 } }, -	{ MODKEY|ShiftMask,             XK_6,      tag,            (uint[]){ 1 << 5 } }, -	{ MODKEY|ShiftMask,             XK_7,      tag,            (uint[]){ 1 << 6 } }, -	{ MODKEY|ShiftMask,             XK_8,      tag,            (uint[]){ 1 << 7 } }, -	{ MODKEY|ShiftMask,             XK_9,      tag,            (uint[]){ 1 << 8 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_1,      toggletag,      (uint[]){ 1 << 0 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_2,      toggletag,      (uint[]){ 1 << 1 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_3,      toggletag,      (uint[]){ 1 << 2 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_4,      toggletag,      (uint[]){ 1 << 3 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_5,      toggletag,      (uint[]){ 1 << 4 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_6,      toggletag,      (uint[]){ 1 << 5 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_7,      toggletag,      (uint[]){ 1 << 6 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_8,      toggletag,      (uint[]){ 1 << 7 } }, -	{ MODKEY|ControlMask|ShiftMask, XK_9,      toggletag,      (uint[]){ 1 << 8 } }, +	TAGKEYS(                        XK_1,                      (uint[]){ 1 << 0} ) +	TAGKEYS(                        XK_2,                      (uint[]){ 1 << 1} ) +	TAGKEYS(                        XK_3,                      (uint[]){ 1 << 2} ) +	TAGKEYS(                        XK_4,                      (uint[]){ 1 << 3} ) +	TAGKEYS(                        XK_5,                      (uint[]){ 1 << 4} ) +	TAGKEYS(                        XK_6,                      (uint[]){ 1 << 5} ) +	TAGKEYS(                        XK_7,                      (uint[]){ 1 << 6} ) +	TAGKEYS(                        XK_8,                      (uint[]){ 1 << 7} ) +	TAGKEYS(                        XK_9,                      (uint[]){ 1 << 8} )  	{ MODKEY|ShiftMask,             XK_q,      quit,           NULL },  }; @@ -75,6 +75,9 @@ Decrease master area size.  .B Mod1\-l  Increase master area size.  .TP +.B Mod1\-m +Toggle focused window between maximisation and normal state. +.TP  .B Mod1\-Return  Zooms/cycles focused window to/from master area (tiled layouts only).  .TP @@ -71,7 +71,7 @@ struct Client {  	int minax, maxax, minay, maxay;  	long flags;  	int bw, oldbw; -	Bool isbanned, isfixed, isfloating, isurgent; +	Bool isbanned, isfixed, isfloating, ismax, isurgent;  	uint tags;  	Client *next;  	Client *prev; @@ -120,7 +120,6 @@ void applyrules(Client *c);  void arrange(void);  void attach(Client *c);  void attachstack(Client *c); -void ban(Client *c);  void buttonpress(XEvent *e);  void checkotherwm(void);  void cleanup(void); @@ -176,9 +175,9 @@ void tileresize(Client *c, int x, int y, int w, int h);  void togglebar(const void *arg);  void togglefloating(const void *arg);  void togglelayout(const void *arg); +void togglemax(const void *arg);  void toggletag(const void *arg);  void toggleview(const void *arg); -void unban(Client *c);  void unmanage(Client *c);  void unmapnotify(XEvent *e);  void updatebar(void); @@ -217,6 +216,7 @@ void (*handler[LASTEvent]) (XEvent *) = {  	[UnmapNotify] = unmapnotify  };  Atom wmatom[WMLast], netatom[NetLast]; +Bool domax = False;  Bool otherwm, readin;  Bool running = True;  uint tagset[] = {1, 1}; /* after start, first tag is selected */ @@ -268,15 +268,16 @@ arrange(void) {  	for(c = clients; c; c = c->next)  		if(VISIBLE(c)) { -			unban(c);  			if(!lt->arrange || c->isfloating)  				resize(c, c->x, c->y, c->w, c->h, True);  		} -		else -			ban(c); +		else if(!c->isbanned) { +			XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); +			c->isbanned = True; +		}  	focus(NULL); -	if(lt->arrange) +	if(lt->arrange && !domax)  		lt->arrange();  	restack();  } @@ -296,14 +297,6 @@ attachstack(Client *c) {  }  void -ban(Client *c) { -	if(c->isbanned) -		return; -	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); -	c->isbanned = True; -} - -void  buttonpress(XEvent *e) {  	uint i, x, mask;  	Client *c; @@ -330,23 +323,23 @@ buttonpress(XEvent *e) {  				return;  			}  		} -		if((ev->x < x + blw) && ev->button == Button1)  -			togglelayout(NULL); +		if(ev->x < x + blw) { +			if(ev->button == Button1)  +				togglelayout(NULL); +			else if(ev->button == Button3)  +				togglemax(NULL); +		}  	}  	else if((c = getclient(ev->window))) {  		focus(c); -		if(CLEANMASK(ev->state) != MODKEY) +		if(CLEANMASK(ev->state) != MODKEY || domax)  			return; -		if(ev->button == Button1) { -			restack(); +		if(ev->button == Button1)  			movemouse(c); -		}  		else if(ev->button == Button2)  			togglefloating(NULL); -		else if(ev->button == Button3 && !c->isfixed) { -			restack(); +		else if(ev->button == Button3 && !c->isfixed)  			resizemouse(c); -		}  	}  } @@ -369,10 +362,9 @@ checkotherwm(void) {  void  cleanup(void) {  	close(STDIN_FILENO); -	while(stack) { -		unban(stack); +	view(NULL); +	while(stack)  		unmanage(stack); -	}  	if(dc.font.set)  		XFreeFontSet(dpy, dc.font.set);  	else @@ -512,7 +504,7 @@ drawbar(void) {  	}  	if(blw > 0) {  		dc.w = blw; -		drawtext(lt->symbol, dc.norm, False); +		drawtext(lt->symbol, dc.norm, domax);  		x = dc.x + dc.w;  	}  	else @@ -641,6 +633,10 @@ focus(Client *c) {  	}  	sel = c;  	if(c) { +		if(domax) { +			XMoveResizeWindow(dpy, c->win, wx, wy, ww - 2 * c->bw, wh - 2 * c->bw); +			c->ismax = True; +		}  		XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);  		XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);  	} @@ -960,7 +956,6 @@ manage(Window w, XWindowAttributes *wa) {  	attach(c);  	attachstack(c);  	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h); /* some windows require this */ -	ban(c);  	XMapWindow(dpy, c->win);  	setclientstate(c, NormalState);  	arrange(); @@ -995,6 +990,7 @@ movemouse(Client *c) {  	Window dummy;  	XEvent ev; +	restack();  	ocx = nx = c->x;  	ocy = ny = c->y;  	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, @@ -1130,7 +1126,8 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {  		x = sx;  	if(y + h + 2 * c->bw < sy)  		y = sy; -	if(c->x != x || c->y != y || c->w != w || c->h != h) { +	if(c->x != x || c->y != y || c->w != w || c->h != h || c->isbanned || c->ismax) { +		c->isbanned = c->ismax = False;  		c->x = wc.x = x;  		c->y = wc.y = y;  		c->w = wc.width = w; @@ -1149,6 +1146,7 @@ resizemouse(Client *c) {  	int nw, nh;  	XEvent ev; +	restack();  	ocx = c->x;  	ocy = c->y;  	if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, @@ -1196,9 +1194,9 @@ restack(void) {  	drawbar();  	if(!sel)  		return; -	if(sel->isfloating || !lt->arrange) +	if(domax || sel->isfloating || !lt->arrange)  		XRaiseWindow(dpy, sel->win); -	if(lt->arrange) { +	if(!domax && lt->arrange) {  		wc.stack_mode = Below;  		wc.sibling = barwin;  		for(c = stack; c; c = c->snext) @@ -1532,6 +1530,12 @@ togglelayout(const void *arg) {  }  void +togglemax(const void *arg) { +	domax = !domax; +	arrange(); +} + +void  toggletag(const void *arg) {  	if(sel && (sel->tags ^ ((*(int *)arg) & TAGMASK))) {  		sel->tags ^= (*(int *)arg) & TAGMASK; @@ -1548,14 +1552,6 @@ toggleview(const void *arg) {  }  void -unban(Client *c) { -	if(!c->isbanned) -		return; -	XMoveWindow(dpy, c->win, c->x, c->y); -	c->isbanned = False; -} - -void  unmanage(Client *c) {  	XWindowChanges wc; | 
