]> Dogcows Code - chaz/openbox/blob - openbox/grab.c
mouse and key bindings plugins work. segfault somewhere still on shutdown
[chaz/openbox] / openbox / grab.c
1 #include "openbox.h"
2 #include <glib.h>
3 #include <X11/Xlib.h>
4
5 static guint kgrabs, pgrabs, sgrabs;
6
7 void grab_keyboard(gboolean grab)
8 {
9 if (grab) {
10 if (kgrabs++ == 0)
11 XGrabKeyboard(ob_display, ob_root, 0, GrabModeAsync, GrabModeSync,
12 CurrentTime);
13 } else if (kgrabs > 0) {
14 if (--kgrabs == 0)
15 XUngrabKeyboard(ob_display, CurrentTime);
16 }
17 }
18
19 void grab_pointer(gboolean grab, Cursor cur)
20 {
21 if (grab) {
22 if (pgrabs++ == 0)
23 XGrabPointer(ob_display, ob_root, False, 0, GrabModeAsync,
24 GrabModeAsync, FALSE, cur, CurrentTime);
25 } else if (pgrabs > 0) {
26 if (--pgrabs == 0)
27 XUngrabPointer(ob_display, CurrentTime);
28 }
29 }
30
31 void grab_server(gboolean grab)
32 {
33 if (grab) {
34 if (sgrabs++ == 0) {
35 XGrabServer(ob_display);
36 XSync(ob_display, FALSE);
37 }
38 } else if (sgrabs > 0) {
39 if (--sgrabs == 0) {
40 XUngrabServer(ob_display);
41 XFlush(ob_display);
42 }
43 }
44 }
45
46 void grab_startup()
47 {
48 kgrabs = pgrabs = sgrabs = 0;
49 }
50
51 void grab_shutdown()
52 {
53 while (kgrabs) grab_keyboard(FALSE);
54 while (pgrabs) grab_pointer(FALSE, None);
55 while (sgrabs) grab_server(FALSE);
56 }
This page took 0.036639 seconds and 5 git commands to generate.