new resize stuff (using XConfigureWindow instead of XSendEvent) 52021851
arg@10ksloc.org · 2006-08-02 10:43 2 file(s) · +20 −31
client.c +10 −18
271 271
{
272 272
	int bottom = c->y + c->h;
273 273
	int right = c->x + c->w;
274 -
	XConfigureEvent e;
274 +
	XWindowChanges wc;
275 275
276 276
	if(sizehints) {
277 277
		if(c->incw)
287 287
		if(c->maxh && c->h > c->maxh)
288 288
			c->h = c->maxh;
289 289
	}
290 -
	if(c->x > sw) /* might happen on restart */
291 -
		c->x = sw - c->w;
292 -
	if(c->y > sh)
293 -
		c->y = sh - c->h;
294 290
	if(sticky == TopRight || sticky == BotRight)
295 291
		c->x = right - c->w;
296 292
	if(sticky == BotLeft || sticky == BotRight)
297 293
		c->y = bottom - c->h;
298 294
299 295
	resizetitle(c);
300 -
	XSetWindowBorderWidth(dpy, c->win, 1);
301 -
	XMoveResizeWindow(dpy, c->win, c->x, c->y, c->w, c->h);
302 296
303 -
	e.type = ConfigureNotify;
304 -
	e.event = c->win;
305 -
	e.window = c->win;
306 -
	e.x = c->x;
307 -
	e.y = c->y;
308 -
	e.width = c->w;
309 -
	e.height = c->h;
310 -
	e.border_width = c->border;
311 -
	e.above = None;
312 -
	e.override_redirect = False;
313 -
	XSendEvent(dpy, c->win, False, StructureNotifyMask, (XEvent *)&e);
297 +
	if(c->tags[tsel])
298 +
		wc.x = c->x;
299 +
	else
300 +
		wc.x = c->x + 2 * sw;
301 +
	wc.y = c->y;
302 +
	wc.width = c->w;
303 +
	wc.height = c->h;
304 +
	wc.border_width = 1;
305 +
	XConfigureWindow(dpy, c->win, CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
314 306
	XSync(dpy, False);
315 307
}
316 308
event.c +10 −13
153 153
	XConfigureRequestEvent *ev = &e->xconfigurerequest;
154 154
	XWindowChanges wc;
155 155
156 -
	ev->value_mask &= ~CWSibling;
157 156
	if((c = getclient(ev->window))) {
158 157
		gravitate(c, True);
159 158
		if(ev->value_mask & CWX)
169 168
		gravitate(c, False);
170 169
		resize(c, True, TopLeft);
171 170
	}
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 = 1;
178 -
	wc.sibling = None;
179 -
	wc.stack_mode = Above;
180 -
	ev->value_mask &= ~CWStackMode;
181 -
	ev->value_mask |= CWBorderWidth;
182 -
	XConfigureWindow(dpy, ev->window, ev->value_mask, &wc);
183 -
	XSync(dpy, False);
171 +
	else {
172 +
		wc.x = ev->x;
173 +
		wc.y = ev->y;
174 +
		wc.width = ev->width;
175 +
		wc.height = ev->height;
176 +
		wc.border_width = 1;
177 +
		XConfigureWindow(dpy, ev->window,
178 +
				CWX|CWY|CWWidth|CWHeight|CWBorderWidth, &wc);
179 +
		XSync(dpy, False);
180 +
	}
184 181
}
185 182
186 183
static void