event.c
changeset 752 9fe042b02e18
parent 750 154b5d4b4a26
child 753 db484aa5c2cf
equal deleted inserted replaced
751:c5f9c2d806e7 752:9fe042b02e18
   164 	}
   164 	}
   165 }
   165 }
   166 
   166 
   167 static void
   167 static void
   168 configurerequest(XEvent *e) {
   168 configurerequest(XEvent *e) {
   169 	unsigned long newmask;
       
   170 	Client *c;
   169 	Client *c;
   171 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   170 	XConfigureRequestEvent *ev = &e->xconfigurerequest;
   172 	XWindowChanges wc;
   171 	XWindowChanges wc;
   173 
   172 
       
   173 	wc.x = ev->x;
       
   174 	wc.y = ev->y;
       
   175 	wc.width = ev->width;
       
   176 	wc.height = ev->height;
       
   177 	wc.border_width = ev->border_width;
       
   178 	wc.sibling = ev->above;
       
   179 	wc.stack_mode = ev->detail;
   174 	if((c = getclient(ev->window))) {
   180 	if((c = getclient(ev->window))) {
   175 		c->ismax = False;
   181 		c->ismax = False;
   176 		if(ev->value_mask & CWX)
       
   177 			c->x = ev->x;
       
   178 		if(ev->value_mask & CWY)
       
   179 			c->y = ev->y;
       
   180 		if(ev->value_mask & CWWidth)
       
   181 			c->w = ev->width;
       
   182 		if(ev->value_mask & CWHeight)
       
   183 			c->h = ev->height;
       
   184 		if(ev->value_mask & CWBorderWidth)
   182 		if(ev->value_mask & CWBorderWidth)
   185 			c->border = ev->border_width;
   183 			c->border = ev->border_width;
   186 		wc.x = c->x;
   184 		if((!c->isfloat && (arrange != dofloat))
   187 		wc.y = c->y;
   185 			|| ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))))
   188 		wc.width = c->w;
   186 		{
   189 		wc.height = c->h;
       
   190 		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
       
   191 		if(newmask)
       
   192 			XConfigureWindow(dpy, c->win, newmask, &wc);
       
   193 		else
       
   194 			configure(c);
   187 			configure(c);
   195 		XSync(dpy, False);
   188 			XSync(dpy, False);
   196 		if(c->isfloat) {
   189 			return;
   197 			resize(c, False);
   190 		}
   198 			if(!isvisible(c))
   191 	}
   199 				XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
   192 	XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
   200 		}
   193 	if(c && !isvisible(c))
   201 		else
   194 		XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
   202 			arrange();
   195 	XSync(dpy, False);
   203 	}
       
   204 	else {
       
   205 		wc.x = ev->x;
       
   206 		wc.y = ev->y;
       
   207 		wc.width = ev->width;
       
   208 		wc.height = ev->height;
       
   209 		wc.border_width = ev->border_width;
       
   210 		wc.sibling = ev->above;
       
   211 		wc.stack_mode = ev->detail;
       
   212 		XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
       
   213 		XSync(dpy, False);
       
   214 	}
       
   215 }
   196 }
   216 
   197 
   217 static void
   198 static void
   218 destroynotify(XEvent *e) {
   199 destroynotify(XEvent *e) {
   219 	Client *c;
   200 	Client *c;