provide functions for grabbing and ungrabbing the keyboard and pointer
This commit is contained in:
parent
3dfe9f4ebe
commit
598c5d6c07
4 changed files with 60 additions and 3 deletions
|
@ -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
40
openbox/grab.c
Normal 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
13
openbox/grab.h
Normal 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
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue