Mercurial > aewl
comparison event.c @ 95:5d88952cbf96
implemened distinguishing float/managed geometries of clients (works quite well)
author | Anselm R. Garbe <garbeam@wmii.de> |
---|---|
date | Tue, 18 Jul 2006 12:36:57 +0200 |
parents | c498da7520c7 |
children | a19556fe83b5 |
comparison
equal
deleted
inserted
replaced
94:6efe82c775c9 | 95:5d88952cbf96 |
---|---|
60 XEvent ev; | 60 XEvent ev; |
61 int x1, y1, ocx, ocy, di; | 61 int x1, y1, ocx, ocy, di; |
62 unsigned int dui; | 62 unsigned int dui; |
63 Window dummy; | 63 Window dummy; |
64 | 64 |
65 ocx = c->x; | 65 ocx = *c->x; |
66 ocy = c->y; | 66 ocy = *c->y; |
67 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, | 67 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
68 None, cursor[CurMove], CurrentTime) != GrabSuccess) | 68 None, cursor[CurMove], CurrentTime) != GrabSuccess) |
69 return; | 69 return; |
70 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); | 70 XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui); |
71 for(;;) { | 71 for(;;) { |
75 case Expose: | 75 case Expose: |
76 handler[Expose](&ev); | 76 handler[Expose](&ev); |
77 break; | 77 break; |
78 case MotionNotify: | 78 case MotionNotify: |
79 XSync(dpy, False); | 79 XSync(dpy, False); |
80 c->x = ocx + (ev.xmotion.x - x1); | 80 *c->x = ocx + (ev.xmotion.x - x1); |
81 c->y = ocy + (ev.xmotion.y - y1); | 81 *c->y = ocy + (ev.xmotion.y - y1); |
82 resize(c, False); | 82 resize(c, False); |
83 break; | 83 break; |
84 case ButtonRelease: | 84 case ButtonRelease: |
85 XUngrabPointer(dpy, CurrentTime); | 85 XUngrabPointer(dpy, CurrentTime); |
86 return; | 86 return; |
92 resizemouse(Client *c) | 92 resizemouse(Client *c) |
93 { | 93 { |
94 XEvent ev; | 94 XEvent ev; |
95 int ocx, ocy; | 95 int ocx, ocy; |
96 | 96 |
97 ocx = c->x; | 97 ocx = *c->x; |
98 ocy = c->y; | 98 ocy = *c->y; |
99 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, | 99 if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync, |
100 None, cursor[CurResize], CurrentTime) != GrabSuccess) | 100 None, cursor[CurResize], CurrentTime) != GrabSuccess) |
101 return; | 101 return; |
102 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h); | 102 XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, *c->w, *c->h); |
103 for(;;) { | 103 for(;;) { |
104 XMaskEvent(dpy, MouseMask | ExposureMask, &ev); | 104 XMaskEvent(dpy, MouseMask | ExposureMask, &ev); |
105 switch(ev.type) { | 105 switch(ev.type) { |
106 default: break; | 106 default: break; |
107 case Expose: | 107 case Expose: |
108 handler[Expose](&ev); | 108 handler[Expose](&ev); |
109 break; | 109 break; |
110 case MotionNotify: | 110 case MotionNotify: |
111 XSync(dpy, False); | 111 XSync(dpy, False); |
112 c->w = abs(ocx - ev.xmotion.x); | 112 *c->w = abs(ocx - ev.xmotion.x); |
113 c->h = abs(ocy - ev.xmotion.y); | 113 *c->h = abs(ocy - ev.xmotion.y); |
114 c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w; | 114 *c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - *c->w; |
115 c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h; | 115 *c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - *c->h; |
116 resize(c, True); | 116 resize(c, True); |
117 break; | 117 break; |
118 case ButtonRelease: | 118 case ButtonRelease: |
119 XUngrabPointer(dpy, CurrentTime); | 119 XUngrabPointer(dpy, CurrentTime); |
120 return; | 120 return; |
185 | 185 |
186 ev->value_mask &= ~CWSibling; | 186 ev->value_mask &= ~CWSibling; |
187 if((c = getclient(ev->window))) { | 187 if((c = getclient(ev->window))) { |
188 gravitate(c, True); | 188 gravitate(c, True); |
189 if(ev->value_mask & CWX) | 189 if(ev->value_mask & CWX) |
190 c->x = ev->x; | 190 *c->x = ev->x; |
191 if(ev->value_mask & CWY) | 191 if(ev->value_mask & CWY) |
192 c->y = ev->y; | 192 *c->y = ev->y; |
193 if(ev->value_mask & CWWidth) | 193 if(ev->value_mask & CWWidth) |
194 c->w = ev->width; | 194 *c->w = ev->width; |
195 if(ev->value_mask & CWHeight) | 195 if(ev->value_mask & CWHeight) |
196 c->h = ev->height; | 196 *c->h = ev->height; |
197 if(ev->value_mask & CWBorderWidth) | 197 if(ev->value_mask & CWBorderWidth) |
198 c->border = 1; | 198 c->border = 1; |
199 gravitate(c, False); | 199 gravitate(c, False); |
200 resize(c, True); | 200 resize(c, True); |
201 } | 201 } |