Mercurial > aewl
comparison event.c @ 489:d34374cbe926
simplified mouse resizals
author | arg@mmvi |
---|---|
date | Mon, 25 Sep 2006 21:19:18 +0200 |
parents | 0d2559f46b9e |
children | 303d3384720e |
comparison
equal
deleted
inserted
replaced
488:0d2559f46b9e | 489:d34374cbe926 |
---|---|
19 KEYS | 19 KEYS |
20 | 20 |
21 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) | 21 #define CLEANMASK(mask) (mask & ~(numlockmask | LockMask)) |
22 | 22 |
23 static void | 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 movemouse(Client *c) { | 24 movemouse(Client *c) { |
42 int x1, y1, ocx, ocy, di; | 25 int x1, y1, ocx, ocy, di; |
43 unsigned int dui; | 26 unsigned int dui; |
44 Window dummy; | 27 Window dummy; |
45 XEvent ev; | 28 XEvent ev; |
50 None, cursor[CurMove], CurrentTime) != GrabSuccess) | 33 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
51 return; | 34 return; |
52 c->ismax = False; | 35 c->ismax = False; |
53 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); | 36 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
54 for(;;) { | 37 for(;;) { |
55 XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev); | 38 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); |
56 switch (ev.type) { | 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 case Expose: | 40 case Expose: |
64 handler[Expose](&ev); | 41 handler[Expose](&ev); |
65 break; | 42 break; |
66 case MotionNotify: | 43 case MotionNotify: |
67 XSync(dpy, False); | 44 XSync(dpy, False); |
70 resize(c, False, TopLeft); | 47 resize(c, False, TopLeft); |
71 break; | 48 break; |
72 case ButtonRelease: | 49 case ButtonRelease: |
73 XUngrabPointer(dpy, CurrentTime); | 50 XUngrabPointer(dpy, CurrentTime); |
74 return; | 51 return; |
75 case DestroyNotify: | |
76 case UnmapNotify: | |
77 XUngrabPointer(dpy, CurrentTime); | |
78 handler[ev.type](&ev); | |
79 return; | |
80 } | 52 } |
81 } | 53 } |
82 } | 54 } |
83 | 55 |
84 static void | 56 static void |
94 None, cursor[CurResize], CurrentTime) != GrabSuccess) | 66 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
95 return; | 67 return; |
96 c->ismax = False; | 68 c->ismax = False; |
97 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); | 69 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); |
98 for(;;) { | 70 for(;;) { |
99 XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev); | 71 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); |
100 switch(ev.type) { | 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 case Expose: | 73 case Expose: |
108 handler[Expose](&ev); | 74 handler[Expose](&ev); |
109 break; | 75 break; |
110 case MotionNotify: | 76 case MotionNotify: |
111 XSync(dpy, False); | 77 XSync(dpy, False); |
122 resize(c, True, sticky); | 88 resize(c, True, sticky); |
123 break; | 89 break; |
124 case ButtonRelease: | 90 case ButtonRelease: |
125 XUngrabPointer(dpy, CurrentTime); | 91 XUngrabPointer(dpy, CurrentTime); |
126 return; | 92 return; |
127 case DestroyNotify: | |
128 case UnmapNotify: | |
129 XUngrabPointer(dpy, CurrentTime); | |
130 handler[ev.type](&ev); | |
131 return; | |
132 } | 93 } |
133 } | 94 } |
134 } | 95 } |
135 | 96 |
136 static void | 97 static void |
185 static void | 146 static void |
186 configurerequest(XEvent *e) { | 147 configurerequest(XEvent *e) { |
187 unsigned long newmask; | 148 unsigned long newmask; |
188 Client *c; | 149 Client *c; |
189 XConfigureRequestEvent *ev = &e->xconfigurerequest; | 150 XConfigureRequestEvent *ev = &e->xconfigurerequest; |
151 XEvent synev; | |
190 XWindowChanges wc; | 152 XWindowChanges wc; |
191 | 153 |
192 if((c = getclient(ev->window))) { | 154 if((c = getclient(ev->window))) { |
193 c->ismax = False; | 155 c->ismax = False; |
194 gravitate(c, True); | 156 gravitate(c, True); |
208 wc.width = c->w; | 170 wc.width = c->w; |
209 wc.height = c->h; | 171 wc.height = c->h; |
210 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); | 172 newmask = ev->value_mask & (~(CWSibling | CWStackMode | CWBorderWidth)); |
211 if(newmask) | 173 if(newmask) |
212 XConfigureWindow(dpy, c->win, newmask, &wc); | 174 XConfigureWindow(dpy, c->win, newmask, &wc); |
213 else | 175 else { |
214 synconfig(c, c->x, c->y, c->w, c->h, c->border); | 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 XSync(dpy, False); | 188 XSync(dpy, False); |
216 if(c->isfloat) | 189 if(c->isfloat) |
217 resize(c, False, TopLeft); | 190 resize(c, False, TopLeft); |
218 else | 191 else |
219 arrange(NULL); | 192 arrange(NULL); |