cvsimport
[fvwm.git] / libs / Grab.c
blob45a57db1a6e35b1d722028792e144dd5d6a5e0a4
1 /* -*-c-*- */
2 /* This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ** MyXGrabServer & MyXUngrabServer - to handle nested grab server calls
21 #include "config.h"
23 #include "Grab.h"
25 /* Made into global for module interface. See module.c. */
26 int myxgrabcount = 0;
27 static unsigned int keyboard_grab_count = 0;
28 static unsigned int key_grab_count = 0;
30 void MyXGrabServer(Display *disp)
32 if (myxgrabcount == 0)
34 XSync(disp, 0);
35 XGrabServer(disp);
37 XSync(disp, 0);
38 ++myxgrabcount;
41 void MyXUngrabServer(Display *disp)
43 if (--myxgrabcount < 0) /* should never happen */
45 myxgrabcount = 0;
47 if (myxgrabcount == 0)
49 XUngrabServer(disp);
51 XSync(disp, 0);
54 void MyXGrabKeyboard(Display *dpy)
56 keyboard_grab_count++;
57 XGrabKeyboard(
58 dpy, RootWindow(dpy, DefaultScreen(dpy)), False, GrabModeAsync,
59 GrabModeAsync, CurrentTime);
61 return;
64 void MyXUngrabKeyboard(Display *dpy)
66 if (keyboard_grab_count > 0)
68 keyboard_grab_count--;
70 if (keyboard_grab_count == 0 && key_grab_count == 0)
72 XUngrabKeyboard(dpy, CurrentTime);
75 return;
78 void MyXGrabKey(Display *disp)
80 key_grab_count++;
82 return;
85 void MyXUngrabKey(Display *disp)
87 if (key_grab_count > 0)
89 key_grab_count--;
90 keyboard_grab_count++;
91 MyXUngrabKeyboard(disp);
94 return;