event.c
changeset 115 329fd7dae530
parent 114 dfa5cd0969a6
child 121 eb3165734f00
equal deleted inserted replaced
114:dfa5cd0969a6 115:329fd7dae530
    68 	XEvent ev;
    68 	XEvent ev;
    69 	int x1, y1, ocx, ocy, di;
    69 	int x1, y1, ocx, ocy, di;
    70 	unsigned int dui;
    70 	unsigned int dui;
    71 	Window dummy;
    71 	Window dummy;
    72 
    72 
    73 	ocx = *c->x;
    73 	ocx = c->x;
    74 	ocy = *c->y;
    74 	ocy = c->y;
    75 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
    75 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
    76 				None, cursor[CurMove], CurrentTime) != GrabSuccess)
    76 				None, cursor[CurMove], CurrentTime) != GrabSuccess)
    77 		return;
    77 		return;
    78 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
    78 	XQueryPointer(dpy, root, &dummy, &dummy, &x1, &y1, &di, &di, &dui);
    79 	for(;;) {
    79 	for(;;) {
    83 		case Expose:
    83 		case Expose:
    84 			handler[Expose](&ev);
    84 			handler[Expose](&ev);
    85 			break;
    85 			break;
    86 		case MotionNotify:
    86 		case MotionNotify:
    87 			XSync(dpy, False);
    87 			XSync(dpy, False);
    88 			*c->x = ocx + (ev.xmotion.x - x1);
    88 			c->x = ocx + (ev.xmotion.x - x1);
    89 			*c->y = ocy + (ev.xmotion.y - y1);
    89 			c->y = ocy + (ev.xmotion.y - y1);
    90 			resize(c, False, TopLeft);
    90 			resize(c, False, TopLeft);
    91 			break;
    91 			break;
    92 		case ButtonRelease:
    92 		case ButtonRelease:
    93 			XUngrabPointer(dpy, CurrentTime);
    93 			XUngrabPointer(dpy, CurrentTime);
    94 			return;
    94 			return;
   101 {
   101 {
   102 	XEvent ev;
   102 	XEvent ev;
   103 	int ocx, ocy;
   103 	int ocx, ocy;
   104 	Corner sticky;
   104 	Corner sticky;
   105 
   105 
   106 	ocx = *c->x;
   106 	ocx = c->x;
   107 	ocy = *c->y;
   107 	ocy = c->y;
   108 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
   108 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
   109 				None, cursor[CurResize], CurrentTime) != GrabSuccess)
   109 				None, cursor[CurResize], CurrentTime) != GrabSuccess)
   110 		return;
   110 		return;
   111 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, *c->w, *c->h);
   111 	XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w, c->h);
   112 	for(;;) {
   112 	for(;;) {
   113 		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
   113 		XMaskEvent(dpy, MouseMask | ExposureMask, &ev);
   114 		switch(ev.type) {
   114 		switch(ev.type) {
   115 		default: break;
   115 		default: break;
   116 		case Expose:
   116 		case Expose:
   117 			handler[Expose](&ev);
   117 			handler[Expose](&ev);
   118 			break;
   118 			break;
   119 		case MotionNotify:
   119 		case MotionNotify:
   120 			XSync(dpy, False);
   120 			XSync(dpy, False);
   121 			*c->w = abs(ocx - ev.xmotion.x);
   121 			c->w = abs(ocx - ev.xmotion.x);
   122 			*c->h = abs(ocy - ev.xmotion.y);
   122 			c->h = abs(ocy - ev.xmotion.y);
   123 			*c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - *c->w;
   123 			c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - c->w;
   124 			*c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - *c->h;
   124 			c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - c->h;
   125 			if(ocx <= ev.xmotion.x)
   125 			if(ocx <= ev.xmotion.x)
   126 				sticky = (ocy <= ev.xmotion.y) ? TopLeft : BotLeft;
   126 				sticky = (ocy <= ev.xmotion.y) ? TopLeft : BotLeft;
   127 			else
   127 			else
   128 				sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight;
   128 				sticky = (ocy <= ev.xmotion.y) ? TopRight : BotRight;
   129 			resize(c, True, sticky);
   129 			resize(c, True, sticky);
   201 
   201 
   202 	ev->value_mask &= ~CWSibling;
   202 	ev->value_mask &= ~CWSibling;
   203 	if((c = getclient(ev->window))) {
   203 	if((c = getclient(ev->window))) {
   204 		gravitate(c, True);
   204 		gravitate(c, True);
   205 		if(ev->value_mask & CWX)
   205 		if(ev->value_mask & CWX)
   206 			*c->x = ev->x;
   206 			c->x = ev->x;
   207 		if(ev->value_mask & CWY)
   207 		if(ev->value_mask & CWY)
   208 			*c->y = ev->y;
   208 			c->y = ev->y;
   209 		if(ev->value_mask & CWWidth)
   209 		if(ev->value_mask & CWWidth)
   210 			*c->w = ev->width;
   210 			c->w = ev->width;
   211 		if(ev->value_mask & CWHeight)
   211 		if(ev->value_mask & CWHeight)
   212 			*c->h = ev->height;
   212 			c->h = ev->height;
   213 		if(ev->value_mask & CWBorderWidth)
   213 		if(ev->value_mask & CWBorderWidth)
   214 			c->border = 1;
   214 			c->border = 1;
   215 		gravitate(c, False);
   215 		gravitate(c, False);
   216 		resize(c, True, TopLeft);
   216 		resize(c, True, TopLeft);
   217 	}
   217 	}