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;