2 * Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
3 * Copyright (C) 2004-2008 Kim Woelders
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
6 * of this software and associated documentation files (the "Software"), to
7 * deal in the Software without restriction, including without limitation the
8 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9 * sell copies of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in
13 * all copies of the Software, its documentation and marketing & publicity
14 * materials, and acknowledgment shall be given in the documentation, materials
15 * and software packages that this Software was used.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 GrabKeyboardSet(Win win)
35 XGrabKeyboard(disp, WinGetXwin(win), False, GrabModeAsync, GrabModeAsync,
39 Eprintf("GrabKeyboardSet %#lx %d\n", WinGetXwin(win), rc);
45 GrabKeyboardRelease(void)
49 rc = XUngrabKeyboard(disp, CurrentTime);
52 Eprintf("GrabKeyboardRelease %d\n", rc);
58 GrabPointerSet(Win win, unsigned int csr, int confine)
61 Window confine_to = (confine) ? WinGetXwin(VROOT) : None;
63 ret = XGrabPointer(disp, WinGetXwin(win), False,
64 ButtonPressMask | ButtonReleaseMask | PointerMotionMask |
65 ButtonMotionMask | EnterWindowMask | LeaveWindowMask,
66 GrabModeAsync, GrabModeAsync, confine_to, ECsrGet(csr),
69 Mode.grabs.pointer_grab_window = WinGetXwin(win);
70 Mode.grabs.pointer_grab_active = 1;
72 if (EDebug(EDBUG_TYPE_GRABS))
73 Eprintf("GrabPointerSet: %#lx, ret=%d\n", Mode.grabs.pointer_grab_window,
80 GrabPointerRelease(void)
82 XUngrabPointer(disp, CurrentTime);
84 if (EDebug(EDBUG_TYPE_GRABS))
85 Eprintf("GrabPointerRelease: %#lx\n", Mode.grabs.pointer_grab_window);
87 Mode.grabs.pointer_grab_active = 0;
88 Mode.grabs.pointer_grab_window = None;
92 GrabButtonSet(unsigned int button, unsigned int modifiers, Win win,
93 unsigned int event_mask, unsigned int csr, int confine)
95 Bool owner_events = False;
96 int pointer_mode = GrabModeSync;
97 int keyboard_mode = GrabModeAsync;
98 Window confine_to = (confine) ? WinGetXwin(win) : None;
101 if (modifiers == AnyModifier)
103 XGrabButton(disp, button, modifiers,
104 WinGetXwin(win), owner_events, event_mask, pointer_mode,
105 keyboard_mode, confine_to, ECsrGet(csr));
109 for (i = 0; i < 8; i++)
111 if (i && !Mode.masks.mod_combos[i])
113 XGrabButton(disp, button, modifiers | Mode.masks.mod_combos[i],
114 WinGetXwin(win), owner_events, event_mask, pointer_mode,
115 keyboard_mode, confine_to, ECsrGet(csr));
120 GrabButtonRelease(unsigned int button, unsigned int modifiers, Win win)
124 if (modifiers == AnyModifier)
126 XUngrabButton(disp, button, modifiers, WinGetXwin(win));
130 for (i = 0; i < 8; i++)
132 if (i && !Mode.masks.mod_combos[i])
134 XUngrabButton(disp, button, modifiers | Mode.masks.mod_combos[i],
140 GrabKeySet(unsigned int key, unsigned int modifiers, Win win)
142 Bool owner_events = False;
143 int pointer_mode = GrabModeAsync;
144 int keyboard_mode = GrabModeSync;
147 if (modifiers == AnyModifier)
149 XGrabKey(disp, key, modifiers, WinGetXwin(win), owner_events,
150 pointer_mode, keyboard_mode);
154 for (i = 0; i < 8; i++)
156 if (i && !Mode.masks.mod_combos[i])
158 XGrabKey(disp, key, modifiers | Mode.masks.mod_combos[i],
159 WinGetXwin(win), owner_events, pointer_mode, keyboard_mode);
164 GrabKeyRelease(unsigned int key, unsigned int modifiers, Win win)
168 if (modifiers == AnyModifier)
170 XUngrabKey(disp, key, modifiers, WinGetXwin(win));
174 for (i = 0; i < 8; i++)
176 if (i && !Mode.masks.mod_combos[i])
178 XUngrabKey(disp, key, modifiers | Mode.masks.mod_combos[i],