1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
static Window fw = 0;
static int locked = 0;
void
togglemouse(const Arg *arg)
if (locked) {
XUngrabPointer(dpy, CurrentTime);
XWarpPointer(dpy, None, selmon->sel->win, 0, 0, 0, 0, selmon->sel->w/2, selmon->sel->h/2);
if (fw) {
XDestroyWindow(dpy, fw);
fw = 0;
}
locked = 0;
return;
}
Window root = RootWindow(dpy, screen);
XSetWindowAttributes attrs;
attrs.override_redirect = True;
attrs.event_mask = 0;
fw = XCreateWindow(
dpy, root, 0, sh - 1, 1, 1, 0,
DefaultDepth(dpy, screen),
InputOutput, DefaultVisual(dpy, screen),
CWOverrideRedirect | CWEventMask, &attrs
);
XMapRaised(dpy, fw);
XSync(dpy, False);
XWarpPointer(dpy, None, root, 0, 0, 0, 0, 0, sh - 1);
if (XGrabPointer(dpy, fw, True,
0,
GrabModeAsync,
GrabModeAsync,
fw,
None,
CurrentTime) != GrabSuccess) {
XDestroyWindow(dpy, fw);
fw = 0;
return;
}
locked = 1;
}
|