diff options
| -rw-r--r-- | client.c | 18 | ||||
| -rw-r--r-- | dwm.h | 1 | ||||
| -rw-r--r-- | event.c | 21 | 
3 files changed, 27 insertions, 13 deletions
| @@ -81,6 +81,23 @@ ban(Client *c) {  }  void +configure(Client *c) { +	XEvent synev; + +	synev.type = ConfigureNotify; +	synev.xconfigure.display = dpy; +	synev.xconfigure.event = c->win; +	synev.xconfigure.window = c->win; +	synev.xconfigure.x = c->x; +	synev.xconfigure.y = c->y; +	synev.xconfigure.width = c->w; +	synev.xconfigure.height = c->h; +	synev.xconfigure.border_width = c->border; +	synev.xconfigure.above = None; +	XSendEvent(dpy, c->win, True, NoEventMask, &synev); +} + +void  focus(Client *c) {  	Client *old; @@ -299,6 +316,7 @@ resize(Client *c, Bool sizehints, Corner sticky) {  	else  		wc.border_width = 1;  	XConfigureWindow(dpy, c->win, CWX | CWY | CWWidth | CWHeight | CWBorderWidth, &wc); +	configure(c);  	XSync(dpy, False);  } @@ -109,6 +109,7 @@ extern Window root, barwin;  /* client.c */  extern void ban(Client *c);			/* ban c from screen */ +extern void configure(Client *c);		/* send synthetic configure event */  extern void focus(Client *c);			/* focus c, c may be NULL */  extern Client *getclient(Window w);		/* return client of w */  extern Client *getctitle(Window w);		/* return client of title window */ @@ -1,3 +1,4 @@ +#include <stdio.h>  /*   * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com>   * See LICENSE file for license details. @@ -38,6 +39,7 @@ movemouse(Client *c) {  		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);  		switch (ev.type) {  		case ButtonRelease: +			resize(c, True, TopLeft);  			XUngrabPointer(dpy, CurrentTime);  			return;  		case Expose: @@ -71,6 +73,7 @@ resizemouse(Client *c) {  		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);  		switch(ev.type) {  		case ButtonRelease: +			resize(c, True, TopLeft);  			XUngrabPointer(dpy, CurrentTime);  			return;  		case Expose: @@ -151,6 +154,7 @@ configurerequest(XEvent *e) {  	XEvent synev;  	XWindowChanges wc; +	fputs("configurerequest\n", stderr);  	if((c = getclient(ev->window))) {  		c->ismax = False;  		gravitate(c, True); @@ -172,19 +176,8 @@ configurerequest(XEvent *e) {  		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));  		if(newmask)  			XConfigureWindow(dpy, c->win, newmask, &wc); -		else { -			synev.type = ConfigureNotify; -			synev.xconfigure.display = dpy; -			synev.xconfigure.event = c->win; -			synev.xconfigure.window = c->win; -			synev.xconfigure.x = c->x; -			synev.xconfigure.y = c->y; -			synev.xconfigure.width = c->w; -			synev.xconfigure.height = c->h; -			synev.xconfigure.border_width = c->border; -			synev.xconfigure.above = None; -			XSendEvent(dpy, c->win, True, NoEventMask, &synev); -		} +		else +			configure(c);  		XSync(dpy, False);  		if(c->isfloat)  			resize(c, False, TopLeft); @@ -218,6 +211,7 @@ enternotify(XEvent *e) {  	Client *c;  	XCrossingEvent *ev = &e->xcrossing; +	fputs("enternotify\n", stderr);  	if(ev->mode != NotifyNormal || ev->detail == NotifyInferior)  		return; @@ -305,6 +299,7 @@ propertynotify(XEvent *e) {  	Window trans;  	XPropertyEvent *ev = &e->xproperty; +	fputs("propertynotify\n", stderr);  	if(ev->state == PropertyDelete)  		return; /* ignore */ | 
