provide functions for grabbing and ungrabbing the keyboard and pointer

This commit is contained in:
Dana Jansens 2003-03-18 19:51:56 +00:00
parent 3dfe9f4ebe
commit 598c5d6c07
4 changed files with 60 additions and 3 deletions

View file

@ -20,11 +20,11 @@ ob3_LDADD=@LIBINTL@ ../render/librender.a
ob3_LDFLAGS=-export-dynamic
ob3_SOURCES=client.c event.c extensions.c focus.c frame.c openbox.c prop.c \
screen.c stacking.c xerror.c themerc.c timer.c dispatch.c \
engine.c plugin.c action.c
engine.c plugin.c action.c grab.c
noinst_HEADERS=client.h event.h extensions.h focus.h frame.h geom.h gettext.h \
openbox.h prop.h screen.h stacking.h xerror.h themerc.h dispatch.h \
timer.h engine.h plugin.h action.h
timer.h engine.h plugin.h action.h grab.h
MAINTAINERCLEANFILES= Makefile.in

40
openbox/grab.c Normal file
View file

@ -0,0 +1,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);
}

13
openbox/grab.h Normal file
View file

@ -0,0 +1,13 @@
#ifndef __grab_h
#define __grab_h
#include <glib.h>
#include <X11/Xlib.h>
void grab_startup();
void grab_shutdown();
void grab_keyboard(gboolean grab);
void grab_pointer(gboolean grab, Cursor cur);
#endif

View file

@ -8,6 +8,7 @@
#include "focus.h"
#include "extensions.h"
#include "gettext.h"
#include "grab.h"
#include "engine.h"
#include "themerc.h"
#include "plugin.h"
@ -137,11 +138,13 @@ int main(int argc, char **argv)
screen_startup();
focus_startup();
client_startup();
grab_startup();
plugin_startup();
/* XXX load all plugins!! */
plugin_open("focus");
plugin_open("keyboard");
plugin_open("mouse");
/* get all the existing windows */
client_manage_all();
@ -154,7 +157,8 @@ int main(int argc, char **argv)
client_unmanage_all();
plugin_shutdown();
plugin_shutdown(); /* calls all the plugins' shutdown functions */
grab_shutdown();
client_shutdown();
screen_shutdown();
event_shutdown();