summaryrefslogtreecommitdiff
path: root/openbox/grab.c
blob: 3bba14b3a434ca30edb3c6051cd456a571004e2e (plain)
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
#include "openbox.h"
#include <glib.h>
#include <X11/Xlib.h>

static guint kgrabs, pgrabs;

void grab_keyboard(gboolean grab)
{
    if (grab) {
        if (kgrabs++ == 0)
            XGrabKeyboard(ob_display, ob_root, 0, GrabModeAsync, GrabModeSync,
                          CurrentTime);
    } else if (kgrabs > 0) {
        if (--kgrabs == 0)
            XUngrabKeyboard(ob_display, CurrentTime);
    }
}

void grab_pointer(gboolean grab, Cursor cur)
{
    if (grab) {
        if (pgrabs++ == 0)
            XGrabPointer(ob_display, ob_root, False, 0, GrabModeAsync,
                         GrabModeSync, FALSE, cur, CurrentTime);
    } else if (pgrabs > 0) {
        if (--pgrabs == 0)
            XUngrabPointer(ob_display, CurrentTime);
    }
}

void grab_startup()
{
    kgrabs = pgrabs = 0;
}

void grab_shutdown()
{
    while (kgrabs) grab_keyboard(FALSE);
    while (pgrabs) grab_pointer(FALSE, None);
}