Wrap the pointer when the edge of the window is reached
This commit is contained in:
parent
408b75a0b4
commit
c8fcc3d354
23
commands.c
23
commands.c
|
@ -289,10 +289,29 @@ bool i_drag(arg_t a)
|
||||||
case MotionNotify:
|
case MotionNotify:
|
||||||
x = e.xmotion.x;
|
x = e.xmotion.x;
|
||||||
y = e.xmotion.y;
|
y = e.xmotion.y;
|
||||||
if (x >= 0 && x <= win.w && y >= 0 && y <= win.h) {
|
|
||||||
|
#define WARP(x, y) \
|
||||||
|
XWarpPointer(win.env.dpy, \
|
||||||
|
None, win.xwin, \
|
||||||
|
0, 0, 0, 0, \
|
||||||
|
x, y); \
|
||||||
|
ox = x, oy = y; \
|
||||||
|
break
|
||||||
|
|
||||||
|
/* wrap the mouse around */
|
||||||
|
if(x < 0){
|
||||||
|
WARP(win.w, y);
|
||||||
|
}else if(x > win.w){
|
||||||
|
WARP(0, y);
|
||||||
|
}else if(y < 0){
|
||||||
|
WARP(x, win.h);
|
||||||
|
}else if(y > win.h){
|
||||||
|
WARP(x, 0);
|
||||||
|
}
|
||||||
|
|
||||||
dx += x - ox;
|
dx += x - ox;
|
||||||
dy += y - oy;
|
dy += y - oy;
|
||||||
}
|
|
||||||
ox = x;
|
ox = x;
|
||||||
oy = y;
|
oy = y;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue