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 }