Mercurial > dwm-meillo
comparison event.c @ 476:3e4596240abb
sander check this
author | arg@mmvi |
---|---|
date | Fri, 22 Sep 2006 09:43:21 +0200 |
parents | 2d8af0d7920d |
children | 635b58a87d20 |
comparison
equal
deleted
inserted
replaced
475:898c54484cb2 | 476:3e4596240abb |
---|---|
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 | |
24 movemouse(Client *c) { | 41 movemouse(Client *c) { |
25 int x1, y1, ocx, ocy, di; | 42 int x1, y1, ocx, ocy, di; |
26 unsigned int dui; | 43 unsigned int dui; |
27 Window dummy; | 44 Window dummy; |
28 XEvent ev; | 45 XEvent ev; |
32 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, | 49 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
33 None, cursor[CurMove], CurrentTime) != GrabSuccess) | 50 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
34 return; | 51 return; |
35 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); | 52 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
36 for(;;) { | 53 for(;;) { |
37 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); | 54 XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev); |
38 switch (ev.type) { | 55 switch (ev.type) { |
39 default: | 56 default: |
57 break; | |
58 case ConfigureRequest: | |
59 synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width); | |
60 XSync(dpy, False); | |
40 break; | 61 break; |
41 case Expose: | 62 case Expose: |
42 handler[Expose](&ev); | 63 handler[Expose](&ev); |
43 break; | 64 break; |
44 case MotionNotify: | 65 case MotionNotify: |
47 c->y = ocy + (ev.xmotion.y - y1); | 68 c->y = ocy + (ev.xmotion.y - y1); |
48 resize(c, False, TopLeft); | 69 resize(c, False, TopLeft); |
49 break; | 70 break; |
50 case ButtonRelease: | 71 case ButtonRelease: |
51 XUngrabPointer(dpy, CurrentTime); | 72 XUngrabPointer(dpy, CurrentTime); |
73 return; | |
74 case DestroyNotify: | |
75 case UnmapNotify: | |
76 XUngrabPointer(dpy, CurrentTime); | |
77 handler[ev.type](&ev); | |
52 return; | 78 return; |
53 } | 79 } |
54 } | 80 } |
55 } | 81 } |
56 | 82 |
66 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, | 92 if(XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
67 None, cursor[CurResize], CurrentTime) != GrabSuccess) | 93 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
68 return; | 94 return; |
69 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); | 95 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); |
70 for(;;) { | 96 for(;;) { |
71 XMaskEvent(dpy, MOUSEMASK | ExposureMask, &ev); | 97 XMaskEvent(dpy, MOUSEMASK | ExposureMask | StructureNotifyMask, &ev); |
72 switch(ev.type) { | 98 switch(ev.type) { |
73 default: | 99 default: |
100 break; | |
101 case ConfigureRequest: | |
102 synconfig(c, c->x, c->y, c->w, c->h, ev.xconfigure.border_width); | |
103 XSync(dpy, False); | |
74 break; | 104 break; |
75 case Expose: | 105 case Expose: |
76 handler[Expose](&ev); | 106 handler[Expose](&ev); |
77 break; | 107 break; |
78 case MotionNotify: | 108 case MotionNotify: |
89 sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight; | 119 sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight; |
90 resize(c, True, sticky); | 120 resize(c, True, sticky); |
91 break; | 121 break; |
92 case ButtonRelease: | 122 case ButtonRelease: |
93 XUngrabPointer(dpy, CurrentTime); | 123 XUngrabPointer(dpy, CurrentTime); |
124 return; | |
125 case DestroyNotify: | |
126 case UnmapNotify: | |
127 XUngrabPointer(dpy, CurrentTime); | |
128 handler[ev.type](&ev); | |
94 return; | 129 return; |
95 } | 130 } |
96 } | 131 } |
97 } | 132 } |
98 | 133 |
141 else if(ev->button == Button3 && (arrange == dofloat || c->isfloat)) { | 176 else if(ev->button == Button3 && (arrange == dofloat || c->isfloat)) { |
142 restack(c); | 177 restack(c); |
143 resizemouse(c); | 178 resizemouse(c); |
144 } | 179 } |
145 } | 180 } |
146 } | |
147 | |
148 static void | |
149 synconfig(Client *c, int x, int y, int w, int h, unsigned int border) { | |
150 XEvent synev; | |
151 | |
152 synev.type = ConfigureNotify; | |
153 synev.xconfigure.display = dpy; | |
154 synev.xconfigure.event = c->win; | |
155 synev.xconfigure.window = c->win; | |
156 synev.xconfigure.x = x; | |
157 synev.xconfigure.y = y; | |
158 synev.xconfigure.width = w; | |
159 synev.xconfigure.height = h; | |
160 synev.xconfigure.border_width = border; | |
161 synev.xconfigure.above = None; | |
162 XSendEvent(dpy, c->win, True, NoEventMask, &synev); | |
163 } | 181 } |
164 | 182 |
165 static void | 183 static void |
166 configurerequest(XEvent *e) { | 184 configurerequest(XEvent *e) { |
167 unsigned long newmask; | 185 unsigned long newmask; |