added an creatnotify event handler
This commit is contained in:
		
							parent
							
								
									5a1a2edf0e
								
							
						
					
					
						commit
						83aa110c6f
					
				
							
								
								
									
										62
									
								
								client.c
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								client.c
									
									
									
									
									
								
							| @ -96,6 +96,14 @@ attach(Client *c) { | ||||
| 	clients = c; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| ban(Client *c) { | ||||
| 	if (c->isbanned) | ||||
| 		return; | ||||
| 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | ||||
| 	c->isbanned = True; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| configure(Client *c) { | ||||
| 	XConfigureEvent ce; | ||||
| @ -298,6 +306,37 @@ togglefloating(const char *arg) { | ||||
| 	lt->arrange(); | ||||
| } | ||||
| 
 | ||||
| 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; | ||||
| 
 | ||||
| 	wc.border_width = c->oldborder; | ||||
| 	/* The server grab construct avoids race conditions. */ | ||||
| 	XGrabServer(dpy); | ||||
| 	XSetErrorHandler(xerrordummy); | ||||
| 	XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ | ||||
| 	detach(c); | ||||
| 	detachstack(c); | ||||
| 	if(sel == c) | ||||
| 		focus(NULL); | ||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||
| 	setclientstate(c, WithdrawnState); | ||||
| 	free(c->tags); | ||||
| 	free(c); | ||||
| 	XSync(dpy, False); | ||||
| 	XSetErrorHandler(xerror); | ||||
| 	XUngrabServer(dpy); | ||||
| 	lt->arrange(); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| updatesizehints(Client *c) { | ||||
| 	long msize; | ||||
| @ -376,26 +415,3 @@ updatetitle(Client *c) { | ||||
| 	c->name[sizeof c->name - 1] = '\0'; | ||||
| 	XFree(name.value); | ||||
| } | ||||
| 
 | ||||
| void | ||||
| unmanage(Client *c) { | ||||
| 	XWindowChanges wc; | ||||
| 
 | ||||
| 	wc.border_width = c->oldborder; | ||||
| 	/* The server grab construct avoids race conditions. */ | ||||
| 	XGrabServer(dpy); | ||||
| 	XSetErrorHandler(xerrordummy); | ||||
| 	XConfigureWindow(dpy, c->win, CWBorderWidth, &wc); /* restore border */ | ||||
| 	detach(c); | ||||
| 	detachstack(c); | ||||
| 	if(sel == c) | ||||
| 		focus(NULL); | ||||
| 	XUngrabButton(dpy, AnyButton, AnyModifier, c->win); | ||||
| 	setclientstate(c, WithdrawnState); | ||||
| 	free(c->tags); | ||||
| 	free(c); | ||||
| 	XSync(dpy, False); | ||||
| 	XSetErrorHandler(xerror); | ||||
| 	XUngrabServer(dpy); | ||||
| 	lt->arrange(); | ||||
| } | ||||
|  | ||||
							
								
								
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								dwm.h
									
									
									
									
									
								
							| @ -96,6 +96,7 @@ extern Window root, barwin; | ||||
| 
 | ||||
| /* client.c */ | ||||
| void attach(Client *c);			/* attaches c to global client list */ | ||||
| void ban(Client *c);			/* bans c */ | ||||
| void configure(Client *c);		/* send synthetic configure event */ | ||||
| void detach(Client *c);			/* detaches c from global client list */ | ||||
| void focus(Client *c);			/* focus c if visible && !NULL, or focus top visible */ | ||||
| @ -104,9 +105,10 @@ 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 updatesizehints(Client *c);	/* update the size hint variables of c */ | ||||
| void updatetitle(Client *c);		/* update the name of c */ | ||||
| void unmanage(Client *c);		/* destroy c */ | ||||
| 
 | ||||
| /* draw.c */ | ||||
| void drawstatus(void);			/* draw the bar */ | ||||
|  | ||||
							
								
								
									
										14
									
								
								event.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								event.c
									
									
									
									
									
								
							| @ -224,6 +224,19 @@ configurenotify(XEvent *e) { | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| createnotify(XEvent *e) { | ||||
| 	static XWindowAttributes wa; | ||||
| 	XCreateWindowEvent *ev = &e->xcreatewindow; | ||||
| 
 | ||||
| 	if(!XGetWindowAttributes(dpy, ev->window, &wa)) | ||||
| 		return; | ||||
| 	if(wa.override_redirect) | ||||
| 		return; | ||||
| 	if(!getclient(ev->window) && (wa.map_state == IsViewable)) | ||||
| 		manage(ev->window, &wa); | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| destroynotify(XEvent *e) { | ||||
| 	Client *c; | ||||
| @ -350,6 +363,7 @@ void (*handler[LASTEvent]) (XEvent *) = { | ||||
| 	[ButtonPress] = buttonpress, | ||||
| 	[ConfigureRequest] = configurerequest, | ||||
| 	[ConfigureNotify] = configurenotify, | ||||
| 	[CreateNotify] = createnotify, | ||||
| 	[DestroyNotify] = destroynotify, | ||||
| 	[EnterNotify] = enternotify, | ||||
| 	[LeaveNotify] = leavenotify, | ||||
|  | ||||
							
								
								
									
										16
									
								
								layout.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								layout.c
									
									
									
									
									
								
							| @ -11,22 +11,6 @@ static unsigned int nlayouts = 0; | ||||
| static unsigned int masterw = MASTERWIDTH; | ||||
| static unsigned int nmaster = NMASTER; | ||||
| 
 | ||||
| static void | ||||
| ban(Client *c) { | ||||
| 	if (c->isbanned) | ||||
| 		return; | ||||
| 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | ||||
| 	c->isbanned = True; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| unban(Client *c) { | ||||
| 	if (!c->isbanned) | ||||
| 		return; | ||||
| 	XMoveWindow(dpy, c->win, c->x, c->y); | ||||
| 	c->isbanned = False; | ||||
| } | ||||
| 
 | ||||
| static void | ||||
| tile(void) { | ||||
| 	unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Anselm R. Garbe
						Anselm R. Garbe