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
25 /* Made into global for module interface. See module.c. */
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)
41 void MyXUngrabServer(Display
*disp
)
43 if (--myxgrabcount
< 0) /* should never happen */
47 if (myxgrabcount
== 0)
54 void MyXGrabKeyboard(Display
*dpy
)
56 keyboard_grab_count
++;
58 dpy
, RootWindow(dpy
, DefaultScreen(dpy
)), False
, GrabModeAsync
,
59 GrabModeAsync
, CurrentTime
);
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
);
78 void MyXGrabKey(Display
*disp
)
85 void MyXUngrabKey(Display
*disp
)
87 if (key_grab_count
> 0)
90 keyboard_grab_count
++;
91 MyXUngrabKeyboard(disp
);