event.c
changeset 99 a19556fe83b5
parent 95 5d88952cbf96
child 105 3e74cc981e9b
equal deleted inserted replaced
98:f08394353588 99:a19556fe83b5
    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, TopLeft);
    83 			break;
    83 			break;
    84 		case ButtonRelease:
    84 		case ButtonRelease:
    85 			XUngrabPointer(dpy, CurrentTime);
    85 			XUngrabPointer(dpy, CurrentTime);
    86 			return;
    86 			return;
    87 		}
    87 		}
    91 static void
    91 static void
    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 	Corner sticky;
    96 
    97 
    97 	ocx = *c->x;
    98 	ocx = *c->x;
    98 	ocy = *c->y;
    99 	ocy = *c->y;
    99 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
   100 	if(XGrabPointer(dpy, root, False, MouseMask, GrabModeAsync, GrabModeAsync,
   100 				None, cursor[CurResize], CurrentTime) != GrabSuccess)
   101 				None, cursor[CurResize], CurrentTime) != GrabSuccess)
   111 			XSync(dpy, False);
   112 			XSync(dpy, False);
   112 			*c->w = abs(ocx - ev.xmotion.x);
   113 			*c->w = abs(ocx - ev.xmotion.x);
   113 			*c->h = abs(ocy - ev.xmotion.y);
   114 			*c->h = abs(ocy - ev.xmotion.y);
   114 			*c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - *c->w;
   115 			*c->x = (ocx <= ev.xmotion.x) ? ocx : ocx - *c->w;
   115 			*c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - *c->h;
   116 			*c->y = (ocy <= ev.xmotion.y) ? ocy : ocy - *c->h;
   116 			resize(c, True);
   117 			if(ocx <= ev.xmotion.x) {
       
   118 				if(ocy <= ev.xmotion.y)
       
   119 					sticky = TopLeft;
       
   120 				else
       
   121 					sticky = BottomLeft;
       
   122 			} else {
       
   123 				if(ocy <= ev.xmotion.y)
       
   124 					sticky = TopRight;
       
   125 				else
       
   126 					sticky = BottomRight;
       
   127 			}
       
   128 			resize(c, True, sticky);
   117 			break;
   129 			break;
   118 		case ButtonRelease:
   130 		case ButtonRelease:
   119 			XUngrabPointer(dpy, CurrentTime);
   131 			XUngrabPointer(dpy, CurrentTime);
   120 			return;
   132 			return;
   121 		}
   133 		}
   151 			view(&a);
   163 			view(&a);
   152 			break;
   164 			break;
   153 		}
   165 		}
   154 	}
   166 	}
   155 	else if((c = getclient(ev->window))) {
   167 	else if((c = getclient(ev->window))) {
   156 		if(arrange == dotile && !c->isfloat) {
       
   157 			if((ev->state & ControlMask) && (ev->button == Button1))
       
   158 				zoom(NULL);
       
   159 			return;
       
   160 		}
       
   161 		/* floating windows */
       
   162 		higher(c);
       
   163 		switch(ev->button) {
   168 		switch(ev->button) {
   164 		default:
   169 		default:
   165 			break;
   170 			break;
   166 		case Button1:
   171 		case Button1:
   167 			movemouse(c);
   172 			if(arrange == dotile && !c->isfloat) {
       
   173 				if((ev->state & ControlMask) && (ev->button == Button1))
       
   174 					zoom(NULL);
       
   175 			}
       
   176 			else {
       
   177 				higher(c);
       
   178 				movemouse(c);
       
   179 			}
   168 			break;
   180 			break;
   169 		case Button2:
   181 		case Button2:
   170 			lower(c);
   182 			lower(c);
   171 			break;
   183 			break;
   172 		case Button3:
   184 		case Button3:
   173 			resizemouse(c);
   185 			if(arrange == dofloat || c->isfloat) {
       
   186 				higher(c);
       
   187 				resizemouse(c);
       
   188 			}
   174 			break;
   189 			break;
   175 		}
   190 		}
   176 	}
   191 	}
   177 }
   192 }
   178 
   193 
   195 		if(ev->value_mask & CWHeight)
   210 		if(ev->value_mask & CWHeight)
   196 			*c->h = ev->height;
   211 			*c->h = ev->height;
   197 		if(ev->value_mask & CWBorderWidth)
   212 		if(ev->value_mask & CWBorderWidth)
   198 			c->border = 1;
   213 			c->border = 1;
   199 		gravitate(c, False);
   214 		gravitate(c, False);
   200 		resize(c, True);
   215 		resize(c, True, TopLeft);
   201 	}
   216 	}
   202 
   217 
   203 	wc.x = ev->x;
   218 	wc.x = ev->x;
   204 	wc.y = ev->y;
   219 	wc.y = ev->y;
   205 	wc.width = ev->width;
   220 	wc.width = ev->width;