diff options
| author | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-15 19:27:32 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@gmail.com> | 2007-08-15 19:27:32 +0200 | 
| commit | 10d13f01ff764ba0e875adf5d2b83c49aa08d148 (patch) | |
| tree | cad3a1162879cdf53d3a6ac7f97a025d4a65ff40 | |
| parent | 8fcc4ff0ae2b20f9605370cee02ebcda50f8777c (diff) | |
fififi
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | client.c | 14 | ||||
| -rw-r--r-- | dwm.h | 6 | ||||
| -rw-r--r-- | event.c | 5 | ||||
| -rw-r--r-- | main.c | 7 | ||||
| -rw-r--r-- | tag.c | 31 | 
6 files changed, 35 insertions, 30 deletions
| @@ -36,7 +36,7 @@ dist: clean  	@echo creating dist tarball  	@mkdir -p dwm-${VERSION}  	@cp -R LICENSE Makefile README config.*.h config.mk \ -		dwm.1 dwm.h ${SRC} dwm-${VERSION} +		dwm.1 dwm.h tile.h ${SRC} dwm-${VERSION}  	@tar -cf dwm-${VERSION}.tar dwm-${VERSION}  	@gzip dwm-${VERSION}.tar  	@rm -rf dwm-${VERSION} @@ -297,16 +297,6 @@ resize(Client *c, int x, int y, int w, int h, Bool sizehints) {  }  void -togglefloating(const char *arg) { -	if(!sel || isfloating()) -		return; -	sel->isfloating = !sel->isfloating; -	if(sel->isfloating) -		resize(sel, sel->x, sel->y, sel->w, sel->h, True); -	arrange(); -} - -void  unban(Client *c) {  	if(!c->isbanned)  		return; @@ -316,7 +306,7 @@ unban(Client *c) {  }  void -unmanage(Client *c) { +unmanage(Client *c, long state) {  	XWindowChanges wc;  	wc.border_width = c->oldborder; @@ -329,7 +319,7 @@ unmanage(Client *c) {  	if(sel == c)  		focus(NULL);  	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); -	setclientstate(c, WithdrawnState); +	setclientstate(c, state);  	free(c->tags);  	free(c);  	XSync(dpy, False); @@ -81,7 +81,7 @@ extern int wax, way, wah, waw;			/* windowarea geometry */  extern unsigned int bh, blw, bpos;		/* bar height, bar layout label width, bar position */  extern unsigned int ntags, numlockmask;		/* number of tags, numlock mask */  extern void (*handler[LASTEvent])(XEvent *);	/* event handler */ -extern Atom dwmtags, wmatom[WMLast], netatom[NetLast]; +extern Atom dwmconfig, wmatom[WMLast], netatom[NetLast];  extern Bool selscreen, *seltag;			/* seltag is array of Bool */  extern Client *clients, *sel, *stack;		/* global client list and stack */  extern Cursor cursor[CurLast]; @@ -99,9 +99,8 @@ void killclient(const char *arg);	/* kill sel  nicely */  void manage(Window w, XWindowAttributes *wa);	/* manage new client */  void resize(Client *c, int x, int y,  		int w, int h, Bool sizehints);	/* resize with given coordinates c*/ -void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */  void unban(Client *c);			/* unbans c */ -void unmanage(Client *c);		/* destroy c */ +void unmanage(Client *c, long state);	/* unmanage c */  void updatesizehints(Client *c);	/* update the size hint variables of c */  void updatetitle(Client *c);		/* update the name of c */ @@ -136,6 +135,7 @@ void compileregs(void);			/* initialize regexps of rules defined in config.h */  Bool isvisible(Client *c);		/* returns True if client is visible */  void settags(Client *c, Client *trans);	/* sets tags of c */  void tag(const char *arg);		/* tags sel with arg's index */ +void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */  void toggletag(const char *arg);	/* toggles sel tags with arg's index */  void toggleview(const char *arg);	/* toggles the tag with arg's index (in)visible */  void view(const char *arg);		/* views the tag with arg's index */ @@ -4,6 +4,7 @@  #include <stdlib.h>  #include <X11/keysym.h>  #include <X11/Xatom.h> +#include <X11/Xutil.h>  /* static */ @@ -226,7 +227,7 @@ destroynotify(XEvent *e) {  	XDestroyWindowEvent *ev = &e->xdestroywindow;  	if((c = getclient(ev->window))) -		unmanage(c); +		unmanage(c, WithdrawnState);  }  static void @@ -338,7 +339,7 @@ unmapnotify(XEvent *e) {  	if((c = getclient(ev->window)) && (ev->event == root)) {  		if(ev->send_event || c->unmapped-- == 0) -			unmanage(c); +			unmanage(c, WithdrawnState);  	}  } @@ -11,6 +11,7 @@  #include <X11/keysym.h>  #include <X11/Xatom.h>  #include <X11/Xproto.h> +#include <X11/Xutil.h>  /* extern */ @@ -19,7 +20,7 @@ int screen, sx, sy, sw, sh, wax, way, waw, wah;  unsigned int bh, ntags;  unsigned int bpos = BARPOS;  unsigned int numlockmask = 0; -Atom dwmtags, wmatom[WMLast], netatom[NetLast]; +Atom dwmconfig, wmatom[WMLast], netatom[NetLast];  Bool *seltag;  Bool selscreen = True;  Client *clients = NULL; @@ -41,7 +42,7 @@ cleanup(void) {  	close(STDIN_FILENO);  	while(stack) {  		unban(stack); -		unmanage(stack); +		unmanage(stack, NormalState);  	}  	if(dc.font.set)  		XFreeFontSet(dpy, dc.font.set); @@ -139,7 +140,7 @@ setup(void) {  	XSetWindowAttributes wa;  	/* init atoms */ -	dwmtags = XInternAtom(dpy, "__DWM_TAGS", False); +	dwmconfig = XInternAtom(dpy, "_DWM_CONFIG", False);  	wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False);  	wmatom[WMDelete] = XInternAtom(dpy, "WM_DELETE_WINDOW", False);  	wmatom[WMState] = XInternAtom(dpy, "WM_STATE", False); @@ -28,14 +28,15 @@ static unsigned int nrules = 0;  static char prop[512];  static void -persisttags(Client *c) -{ +persistconfig(Client *c) {  	unsigned int i;  	for(i = 0; i < ntags && i < sizeof prop - 1; i++) -		prop[i] = c->tags[i] ? '+' : '-'; +		prop[i] = c->tags[i] ? '1' : '0'; +	if(i < sizeof prop - 1) +		prop[i++] = c->isfloating ? '1' : '0';  	prop[i] = '\0'; -	XChangeProperty(dpy, c->win, dwmtags, XA_STRING, 8, +	XChangeProperty(dpy, c->win, dwmconfig, XA_STRING, 8,  			PropModeReplace, (unsigned char *)prop, i);  } @@ -93,14 +94,16 @@ settags(Client *c, Client *trans) {  	else {  		/* check if window has set a property */  		name.nitems = 0; -		XGetTextProperty(dpy, c->win, &name, dwmtags); +		XGetTextProperty(dpy, c->win, &name, dwmconfig);  		if(name.nitems && name.encoding == XA_STRING) {  			strncpy(prop, (char *)name.value, sizeof prop - 1);  			prop[sizeof prop - 1] = '\0';  			XFree(name.value);  			for(i = 0; i < ntags && i < sizeof prop - 1 && prop[i] != '\0'; i++) -				if((c->tags[i] = prop[i] == '+')) +				if((c->tags[i] = prop[i] == '1'))  					matched = True; +			if(i < sizeof prop - 1 && prop[i] != '\0') +				c->isfloating = prop[i] == '1';  		}  	}  	if(!matched) { @@ -127,7 +130,7 @@ settags(Client *c, Client *trans) {  	if(!matched)  		for(i = 0; i < ntags; i++)  			c->tags[i] = seltag[i]; -	persisttags(c); +	persistconfig(c);  }  void @@ -142,7 +145,17 @@ tag(const char *arg) {  	if(i >= 0 && i < ntags)  		sel->tags[i] = True;  	if(sel) -		persisttags(sel); +		persistconfig(sel); +	arrange(); +} + +void +togglefloating(const char *arg) { +	if(!sel || isfloating()) +		return; +	sel->isfloating = !sel->isfloating; +	if(sel->isfloating) +		resize(sel, sel->x, sel->y, sel->w, sel->h, True);  	arrange();  } @@ -158,7 +171,7 @@ toggletag(const char *arg) {  	if(j == ntags)  		sel->tags[i] = True;  	if(sel) -		persisttags(sel); +		persistconfig(sel);  	arrange();  } | 
