You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
1.8 KiB
83 lines
1.8 KiB
void |
|
dragcfact(const Arg *arg) |
|
{ |
|
int prev_x, prev_y, dist_x, dist_y; |
|
float fact; |
|
Client *c; |
|
XEvent ev; |
|
Time lasttime = 0; |
|
|
|
if (!(c = selmon->sel)) |
|
return; |
|
if (c->isfloating) { |
|
resizemouse(arg); |
|
return; |
|
} |
|
#if !FAKEFULLSCREEN_PATCH |
|
#if FAKEFULLSCREEN_CLIENT_PATCH |
|
if (c->isfullscreen && !c->fakefullscreen) /* no support resizing fullscreen windows by mouse */ |
|
return; |
|
#else |
|
if (c->isfullscreen) /* no support resizing fullscreen windows by mouse */ |
|
return; |
|
#endif // FAKEFULLSCREEN_CLIENT_PATCH |
|
#endif // !FAKEFULLSCREEN_PATCH |
|
restack(selmon); |
|
|
|
if (XGrabPointer(dpy, root, False, MOUSEMASK, GrabModeAsync, GrabModeAsync, |
|
None, cursor[CurIronCross]->cursor, CurrentTime) != GrabSuccess) |
|
return; |
|
|
|
#if WARP_PATCH |
|
ignore_warp = 1; |
|
#endif // WARP_PATCH |
|
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); |
|
|
|
prev_x = prev_y = -999999; |
|
|
|
do { |
|
XMaskEvent(dpy, MOUSEMASK|ExposureMask|SubstructureRedirectMask, &ev); |
|
switch(ev.type) { |
|
case ConfigureRequest: |
|
case Expose: |
|
case MapRequest: |
|
handler[ev.type](&ev); |
|
break; |
|
case MotionNotify: |
|
if ((ev.xmotion.time - lasttime) <= (1000 / 60)) |
|
continue; |
|
lasttime = ev.xmotion.time; |
|
if (prev_x == -999999) { |
|
prev_x = ev.xmotion.x_root; |
|
prev_y = ev.xmotion.y_root; |
|
} |
|
|
|
dist_x = ev.xmotion.x - prev_x; |
|
dist_y = ev.xmotion.y - prev_y; |
|
|
|
if (abs(dist_x) > abs(dist_y)) { |
|
fact = (float) 4.0 * dist_x / c->mon->ww; |
|
} else { |
|
fact = (float) -4.0 * dist_y / c->mon->wh; |
|
} |
|
|
|
if (fact) |
|
setcfact(&((Arg) { .f = fact })); |
|
|
|
prev_x = ev.xmotion.x; |
|
prev_y = ev.xmotion.y; |
|
break; |
|
} |
|
} while (ev.type != ButtonRelease); |
|
|
|
#if WARP_PATCH |
|
ignore_warp = 0; |
|
#endif // WARP_PATCH |
|
|
|
XWarpPointer(dpy, None, c->win, 0, 0, 0, 0, c->w/2, c->h/2); |
|
|
|
XUngrabPointer(dpy, CurrentTime); |
|
while (XCheckMaskEvent(dpy, EnterWindowMask, &ev)); |
|
} |
|
|
|
|