]> Dogcows Code - chaz/openbox/blob - openbox/grab.c
rm debug prints
[chaz/openbox] / openbox / grab.c
1 #include "openbox.h"
2 #include "event.h"
3 #include "xerror.h"
4
5 #include <glib.h>
6 #include <X11/Xlib.h>
7
8 static guint kgrabs, pgrabs, sgrabs;
9
10 #define MASK_LIST_SIZE 8
11
12 /*! A list of all possible combinations of keyboard lock masks */
13 static unsigned int mask_list[MASK_LIST_SIZE];
14
15 void grab_keyboard(gboolean grab)
16 {
17 if (grab) {
18 if (kgrabs++ == 0)
19 XGrabKeyboard(ob_display, ob_root, 0, GrabModeAsync, GrabModeSync,
20 event_lasttime);
21 } else if (kgrabs > 0) {
22 if (--kgrabs == 0)
23 XUngrabKeyboard(ob_display, event_lasttime);
24 }
25 }
26
27 void grab_pointer(gboolean grab, Cursor cur)
28 {
29 if (grab) {
30 if (pgrabs++ == 0)
31 XGrabPointer(ob_display, ob_root, False, 0, GrabModeAsync,
32 GrabModeAsync, FALSE, cur, event_lasttime);
33 } else if (pgrabs > 0) {
34 if (--pgrabs == 0)
35 XUngrabPointer(ob_display, event_lasttime);
36 }
37 }
38
39 void grab_server(gboolean grab)
40 {
41 if (grab) {
42 if (sgrabs++ == 0) {
43 XGrabServer(ob_display);
44 XSync(ob_display, FALSE);
45 }
46 } else if (sgrabs > 0) {
47 if (--sgrabs == 0) {
48 XUngrabServer(ob_display);
49 XFlush(ob_display);
50 }
51 }
52 }
53
54 void grab_startup()
55 {
56 guint i = 0;
57
58 kgrabs = pgrabs = sgrabs = 0;
59
60 mask_list[i++] = 0;
61 mask_list[i++] = LockMask;
62 mask_list[i++] = NumLockMask;
63 mask_list[i++] = LockMask | NumLockMask;
64 mask_list[i++] = ScrollLockMask;
65 mask_list[i++] = ScrollLockMask | LockMask;
66 mask_list[i++] = ScrollLockMask | NumLockMask;
67 mask_list[i++] = ScrollLockMask | LockMask | NumLockMask;
68 g_assert(i == MASK_LIST_SIZE);
69 }
70
71 void grab_shutdown()
72 {
73 while (kgrabs) grab_keyboard(FALSE);
74 while (pgrabs) grab_pointer(FALSE, None);
75 while (sgrabs) grab_server(FALSE);
76 }
77
78 void grab_button(guint button, guint state, Window win, guint mask,
79 int pointer_mode)
80 {
81 guint i;
82
83 for (i = 0; i < MASK_LIST_SIZE; ++i)
84 XGrabButton(ob_display, button, state | mask_list[i], win, FALSE, mask,
85 pointer_mode, GrabModeSync, None, None);
86 }
87
88 void ungrab_button(guint button, guint state, Window win)
89 {
90 guint i;
91
92 for (i = 0; i < MASK_LIST_SIZE; ++i)
93 XUngrabButton(ob_display, button, state | mask_list[i], win);
94 }
95
96 void grab_key(guint keycode, guint state, int keyboard_mode)
97 {
98 guint i;
99
100 xerror_set_ignore(TRUE); /* can get BadAccess' from these */
101 xerror_occured = FALSE;
102 for (i = 0; i < MASK_LIST_SIZE; ++i)
103 XGrabKey(ob_display, keycode, state | mask_list[i], ob_root, FALSE,
104 GrabModeSync, keyboard_mode);
105 xerror_set_ignore(FALSE);
106 if (xerror_occured)
107 g_warning("failed to grab keycode %d modifiers %d", keycode, state);
108 }
109
110 void ungrab_all_keys()
111 {
112 XUngrabKey(ob_display, AnyKey, AnyModifier, ob_root);
113 }
This page took 0.039254 seconds and 5 git commands to generate.