provide functions for grabbing and ungrabbing the keyboard and pointer
[dana/openbox.git] / openbox / grab.c
1 #include "openbox.h"
2 #include <glib.h>
3 #include <X11/Xlib.h>
4
5 static guint kgrabs, pgrabs;
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                          GrabModeSync, FALSE, cur, CurrentTime);
25     } else if (pgrabs > 0) {
26         if (--pgrabs == 0)
27             XUngrabPointer(ob_display, CurrentTime);
28     }
29 }
30
31 void grab_startup()
32 {
33     kgrabs = pgrabs = 0;
34 }
35
36 void grab_shutdown()
37 {
38     while (kgrabs) grab_keyboard(FALSE);
39     while (pgrabs) grab_pointer(FALSE, None);
40 }