simplified mouse resizals bcb07de7
arg@mmvi · 2006-09-25 21:19 1 file(s) · +16 −43
event.c +16 −43
21 21
#define CLEANMASK(mask) (mask & ~(numlockmask | LockMask))
22 22
23 23
static void
24 -
synconfig(Client *c, int x, int y, int w, int h, unsigned int border) {
25 -
	XEvent synev;
26 -
27 -
	synev.type = ConfigureNotify;
28 -
	synev.xconfigure.display = dpy;
29 -
	synev.xconfigure.event = c->win;
30 -
	synev.xconfigure.window = c->win;
31 -
	synev.xconfigure.x = x;
32 -
	synev.xconfigure.y = y;
33 -
	synev.xconfigure.width = w;
34 -
	synev.xconfigure.height = h;
35 -
	synev.xconfigure.border_width = border;
36 -
	synev.xconfigure.above = None;
37 -
	XSendEvent(dpy, c->win, True, NoEventMask, &synev);
38 -
}
39 -
40 -
static void
41 24
movemouse(Client *c) {
42 25
	int x1, y1, ocx, ocy, di;
43 26
	unsigned int dui;
52 35
	c->ismax = False;
53 36
	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
54 37
	for(;;) {
55 -
		XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev);
38 +
		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
56 39
		switch (ev.type) {
57 -
		default:
58 -
			break;
59 -
		case ConfigureRequest:
60 -
			synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width);
61 -
			XSync(dpy, False);
62 -
			break;
63 40
		case Expose:
64 41
			handler[Expose](&ev);
65 42
			break;
71 48
			break;
72 49
		case ButtonRelease:
73 50
			XUngrabPointer(dpy, CurrentTime);
74 -
			return;
75 -
		case DestroyNotify:
76 -
		case UnmapNotify:
77 -
			XUngrabPointer(dpy, CurrentTime);
78 -
			handler[ev.type](&ev);
79 51
			return;
80 52
		}
81 53
	}
96 68
	c->ismax = False;
97 69
	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
98 70
	for(;;) {
99 -
		XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev);
71 +
		XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev);
100 72
		switch(ev.type) {
101 -
		default:
102 -
			break;
103 -
		case ConfigureRequest:
104 -
			synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width);
105 -
			XSync(dpy, False);
106 -
			break;
107 73
		case Expose:
108 74
			handler[Expose](&ev);
109 75
			break;
123 89
			break;
124 90
		case ButtonRelease:
125 91
			XUngrabPointer(dpy, CurrentTime);
126 -
			return;
127 -
		case DestroyNotify:
128 -
		case UnmapNotify:
129 -
			XUngrabPointer(dpy, CurrentTime);
130 -
			handler[ev.type](&ev);
131 92
			return;
132 93
		}
133 94
	}
187 148
	unsigned long newmask;
188 149
	Client *c;
189 150
	XConfigureRequestEvent *ev = &e->xconfigurerequest;
151 +
	XEvent synev;
190 152
	XWindowChanges wc;
191 153
192 154
	if((c = getclient(ev->window))) {
210 172
		newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth));
211 173
		if(newmask)
212 174
			XConfigureWindow(dpy, c->win, newmask, &wc);
213 -
		else
214 -
			synconfig(c, c->x, c->y, c->w, c->h, c->border);
175 +
		else {
176 +
			synev.type = ConfigureNotify;
177 +
			synev.xconfigure.display = dpy;
178 +
			synev.xconfigure.event = c->win;
179 +
			synev.xconfigure.window = c->win;
180 +
			synev.xconfigure.x = c->x;
181 +
			synev.xconfigure.y = c->y;
182 +
			synev.xconfigure.width = c->w;
183 +
			synev.xconfigure.height = c->h;
184 +
			synev.xconfigure.border_width = c->border;
185 +
			synev.xconfigure.above = None;
186 +
			XSendEvent(dpy, c->win, True, NoEventMask, &synev);
187 +
		}
215 188
		XSync(dpy, False);
216 189
		if(c->isfloat)
217 190
			resize(c, False, TopLeft);