event.c
changeset 387 dca6aca09653
parent 386 58288246d16c
child 394 1da9a6b94ca9
equal deleted inserted replaced
386:58288246d16c 387:dca6aca09653
   146 		}
   146 		}
   147 	}
   147 	}
   148 }
   148 }
   149 
   149 
   150 static void
   150 static void
       
   151 synconfig(Client *c, int x, int y, int w, int h, unsigned int border)
       
   152 {
       
   153 	XEvent synev;
       
   154 
       
   155 	synev.type = ConfigureNotify;
       
   156 	synev.xconfigure.display = dpy;
       
   157 	synev.xconfigure.event = c->win;
       
   158 	synev.xconfigure.window = c->win;
       
   159 	synev.xconfigure.x = x;
       
   160 	synev.xconfigure.y = y;
       
   161 	synev.xconfigure.width = w;
       
   162 	synev.xconfigure.height = h;
       
   163 	synev.xconfigure.border_width = border;
       
   164 	synev.xconfigure.above = None;
       
   165 	XSendEvent(dpy, c->win, True, NoEventMask, &synev);
       
   166 }
       
   167 
       
   168 static void
   151 configurerequest(XEvent *e)
   169 configurerequest(XEvent *e)
   152 {
   170 {
   153 	unsigned long newmask;
   171 	unsigned long newmask;
   154 	Client *c;
   172 	Client *c;
   155 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   173 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   156 	XEvent synev;
       
   157 	XWindowChanges wc;
   174 	XWindowChanges wc;
   158 
   175 
   159 	if((c = getclient(ev->window))) {
   176 	if((c = getclient(ev->window))) {
   160 		if(!c->isfloat && (arrange != dofloat) && c->ismax) {
   177 		if(!c->isfloat && (arrange != dofloat) && c->ismax) {
   161 			synev.type = ConfigureNotify;
   178 			synconfig(c, sx, sy + bh, sw - 2, sh - 2 - bh, ev->border_width);
   162 			synev.xconfigure.display = dpy;
   179 			XSync(dpy, False);
   163 			synev.xconfigure.event = c->win;
       
   164 			synev.xconfigure.window = c->win;
       
   165 			synev.xconfigure.x = sx;
       
   166 			synev.xconfigure.y = sy + bh;
       
   167 			synev.xconfigure.width = sw - 2;
       
   168 			synev.xconfigure.height = sw - 2 - bh;
       
   169 			synev.xconfigure.border_width = ev->border_width;
       
   170 			synev.xconfigure.above = None;
       
   171 			XSendEvent(dpy, c->win, True, NoEventMask, &synev);
       
   172 			return;
   180 			return;
   173 		}
   181 		}
   174 		gravitate(c, True);
   182 		gravitate(c, True);
   175 		if(ev->value_mask & CWX)
   183 		if(ev->value_mask & CWX)
   176 			c->x = ev->x;
   184 			c->x = ev->x;
   188 		wc.width = c->w;
   196 		wc.width = c->w;
   189 		wc.height = c->h;
   197 		wc.height = c->h;
   190 		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
   198 		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
   191 		if(newmask)
   199 		if(newmask)
   192 			XConfigureWindow(dpy, c->win, newmask, &wc);
   200 			XConfigureWindow(dpy, c->win, newmask, &wc);
   193 		else {
   201 		else
   194 			synev.type = ConfigureNotify;
   202 			synconfig(c, c->x, c->y, c->w, c->h, c->border);
   195 			synev.xconfigure.display = dpy;
       
   196 			synev.xconfigure.event = c->win;
       
   197 			synev.xconfigure.window = c->win;
       
   198 			synev.xconfigure.x = c->x;
       
   199 			synev.xconfigure.y = c->y;
       
   200 			synev.xconfigure.width = c->w;
       
   201 			synev.xconfigure.height = c->h;
       
   202 			synev.xconfigure.border_width = c->border;
       
   203 			synev.xconfigure.above = None;
       
   204 			XSendEvent(dpy, c->win, True, NoEventMask, &synev);
       
   205 		}
       
   206 		XSync(dpy, False);
   203 		XSync(dpy, False);
   207 		if(c->isfloat)
   204 		if(c->isfloat)
   208 			resize(c, False, TopLeft);
   205 			resize(c, False, TopLeft);
   209 		else
   206 		else
   210 			arrange(NULL);
   207 			arrange(NULL);