simplified configurerequest 71857b87
Anselm R. Garbe · 2007-02-13 13:39 2 file(s) · +29 −47
client.c +13 −12
69 69
70 70
void
71 71
configure(Client *c) {
72 -
	XEvent synev;
72 +
	XConfigureEvent ce;
73 73
74 -
	synev.type = ConfigureNotify;
75 -
	synev.xconfigure.display = dpy;
76 -
	synev.xconfigure.event = c->win;
77 -
	synev.xconfigure.window = c->win;
78 -
	synev.xconfigure.x = c->x;
79 -
	synev.xconfigure.y = c->y;
80 -
	synev.xconfigure.width = c->w;
81 -
	synev.xconfigure.height = c->h;
82 -
	synev.xconfigure.border_width = c->border;
83 -
	synev.xconfigure.above = None;
84 -
	XSendEvent(dpy, c->win, True, NoEventMask, &synev);
74 +
	ce.type = ConfigureNotify;
75 +
	ce.display = dpy;
76 +
	ce.event = c->win;
77 +
	ce.window = c->win;
78 +
	ce.x = c->x;
79 +
	ce.y = c->y;
80 +
	ce.width = c->w;
81 +
	ce.height = c->h;
82 +
	ce.border_width = c->border;
83 +
	ce.above = None;
84 +
	ce.override_redirect = False;
85 +
	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&ce);
85 86
}
86 87
87 88
void
event.c +16 −35
166 166
167 167
static void
168 168
configurerequest(XEvent *e) {
169 -
	unsigned long newmask;
170 169
	Client *c;
171 170
	XConfigureRequestEvent *ev = &e->xconfigurerequest;
172 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 180
	if((c = getclient(ev->window))) {
175 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 182
		if(ev->value_mask & CWBorderWidth)
185 183
			c->border = ev->border_width;
186 -
		wc.x = c->x;
187 -
		wc.y = c->y;
188 -
		wc.width = c->w;
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
184 +
		if((!c->isfloat && (arrange != dofloat))
185 +
			|| ((ev->value_mask & (CWX|CWY)) && !(ev->value_mask & (CWWidth|CWHeight))))
186 +
		{
194 187
			configure(c);
195 -
		XSync(dpy, False);
196 -
		if(c->isfloat) {
197 -
			resize(c, False);
198 -
			if(!isvisible(c))
199 -
				XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
188 +
			XSync(dpy, False);
189 +
			return;
200 190
		}
201 -
		else
202 -
			arrange();
203 191
	}
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 -
	}
192 +
	XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
193 +
	if(c && !isvisible(c))
194 +
		XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
195 +
	XSync(dpy, False);
215 196
}
216 197
217 198
static void