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; | 	clients = c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | ban(Client *c) { | ||||||
|  | 	if (c->isbanned) | ||||||
|  | 		return; | ||||||
|  | 	XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y); | ||||||
|  | 	c->isbanned = True; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| configure(Client *c) { | configure(Client *c) { | ||||||
| 	XConfigureEvent ce; | 	XConfigureEvent ce; | ||||||
| @ -298,6 +306,37 @@ togglefloating(const char *arg) { | |||||||
| 	lt->arrange(); | 	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 | void | ||||||
| updatesizehints(Client *c) { | updatesizehints(Client *c) { | ||||||
| 	long msize; | 	long msize; | ||||||
| @ -376,26 +415,3 @@ updatetitle(Client *c) { | |||||||
| 	c->name[sizeof c->name - 1] = '\0'; | 	c->name[sizeof c->name - 1] = '\0'; | ||||||
| 	XFree(name.value); | 	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 */ | /* client.c */ | ||||||
| void attach(Client *c);			/* attaches c to global client list */ | 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 configure(Client *c);		/* send synthetic configure event */ | ||||||
| void detach(Client *c);			/* detaches c from global client list */ | void detach(Client *c);			/* detaches c from global client list */ | ||||||
| void focus(Client *c);			/* focus c if visible && !NULL, or focus top visible */ | 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, | void resize(Client *c, int x, int y, | ||||||
| 		int w, int h, Bool sizehints);	/* resize with given coordinates c*/ | 		int w, int h, Bool sizehints);	/* resize with given coordinates c*/ | ||||||
| void togglefloating(const char *arg);	/* toggles sel between floating/tiled state */ | 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 updatesizehints(Client *c);	/* update the size hint variables of c */ | ||||||
| void updatetitle(Client *c);		/* update the name of c */ | void updatetitle(Client *c);		/* update the name of c */ | ||||||
| void unmanage(Client *c);		/* destroy c */ |  | ||||||
| 
 | 
 | ||||||
| /* draw.c */ | /* draw.c */ | ||||||
| void drawstatus(void);			/* draw the bar */ | 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 | static void | ||||||
| destroynotify(XEvent *e) { | destroynotify(XEvent *e) { | ||||||
| 	Client *c; | 	Client *c; | ||||||
| @ -350,6 +363,7 @@ void (*handler[LASTEvent]) (XEvent *) = { | |||||||
| 	[ButtonPress] = buttonpress, | 	[ButtonPress] = buttonpress, | ||||||
| 	[ConfigureRequest] = configurerequest, | 	[ConfigureRequest] = configurerequest, | ||||||
| 	[ConfigureNotify] = configurenotify, | 	[ConfigureNotify] = configurenotify, | ||||||
|  | 	[CreateNotify] = createnotify, | ||||||
| 	[DestroyNotify] = destroynotify, | 	[DestroyNotify] = destroynotify, | ||||||
| 	[EnterNotify] = enternotify, | 	[EnterNotify] = enternotify, | ||||||
| 	[LeaveNotify] = leavenotify, | 	[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 masterw = MASTERWIDTH; | ||||||
| static unsigned int nmaster = NMASTER; | 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 | static void | ||||||
| tile(void) { | tile(void) { | ||||||
| 	unsigned int i, n, nx, ny, nw, nh, mw, mh, tw, th; | 	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