diff options
| author | Anselm R. Garbe <garbeam@wmii.de> | 2006-07-11 13:02:22 +0200 | 
|---|---|---|
| committer | Anselm R. Garbe <garbeam@wmii.de> | 2006-07-11 13:02:22 +0200 | 
| commit | 005362043d8b0bbf856f301c231d4f10c519b8c4 (patch) | |
| tree | 3901197bc7ec4ad48613683c34516c2fa8c6542e /client.c | |
| parent | 16c67f32d62849792c8e6d4fdec22a1896f9c279 (diff) | |
changed how manage client works
Diffstat (limited to 'client.c')
| -rw-r--r-- | client.c | 45 | 
1 files changed, 33 insertions, 12 deletions
@@ -3,6 +3,7 @@   * See LICENSE file for license details.   */ +#include <stdlib.h>  #include <string.h>  #include <X11/Xatom.h> @@ -36,10 +37,10 @@ update_client_name(Client *c)  	XFree(name.value);  } -Client * -create_client(Window w, XWindowAttributes *wa) +void +manage(Window w, XWindowAttributes *wa)  { -	Client *c; +	Client *c, **l;  	XSetWindowAttributes twa;  	long msize; @@ -68,24 +69,44 @@ create_client(Window w, XWindowAttributes *wa)  			DefaultDepth(dpy, screen), CopyFromParent,  			DefaultVisual(dpy, screen),  			CWOverrideRedirect | CWBackPixmap | CWEventMask, &twa); + +	for(l=&clients; *l; l=&(*l)->next); +	c->next = *l; /* *l == nil */ +	*l = c; +	XMapRaised(dpy, c->win); +	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);  	XFlush(dpy); +} -#if 0 -	for(t=&client, i=0; *t; t=&(*t)->next, i++); -	c->next = *t; /* *t == nil */ -	*t = c; -#endif -	return c; +static int +dummy_error_handler(Display *dpy, XErrorEvent *error) +{ +	return 0;  }  void -manage(Client *c) +unmanage(Client *c)  { -	XMapRaised(dpy, c->win); -	XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); +	Client **l; + +	XGrabServer(dpy); +	XSetErrorHandler(dummy_error_handler); + +	XUnmapWindow(dpy, c->win); +	XDestroyWindow(dpy, c->title); + +	for(l=&clients; *l && *l != c; l=&(*l)->next); +	eassert(*l == c); +	*l = c->next; +	free(c); +  	XFlush(dpy); +	XSetErrorHandler(error_handler); +	XUngrabServer(dpy); +	/*flush_masked_events(EnterWindowMask); ? */  } +  Client *  getclient(Window w)  {  | 
