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_LDFLAGS=-export-dynamic
|
||||||
ob3_SOURCES=client.c event.c extensions.c focus.c frame.c openbox.c prop.c \
|
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 \
|
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 \
|
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 \
|
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
|
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 "focus.h"
|
||||||
#include "extensions.h"
|
#include "extensions.h"
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
|
#include "grab.h"
|
||||||
#include "engine.h"
|
#include "engine.h"
|
||||||
#include "themerc.h"
|
#include "themerc.h"
|
||||||
#include "plugin.h"
|
#include "plugin.h"
|
||||||
|
@ -137,11 +138,13 @@ int main(int argc, char **argv)
|
||||||
screen_startup();
|
screen_startup();
|
||||||
focus_startup();
|
focus_startup();
|
||||||
client_startup();
|
client_startup();
|
||||||
|
grab_startup();
|
||||||
plugin_startup();
|
plugin_startup();
|
||||||
|
|
||||||
/* XXX load all plugins!! */
|
/* XXX load all plugins!! */
|
||||||
plugin_open("focus");
|
plugin_open("focus");
|
||||||
plugin_open("keyboard");
|
plugin_open("keyboard");
|
||||||
|
plugin_open("mouse");
|
||||||
|
|
||||||
/* get all the existing windows */
|
/* get all the existing windows */
|
||||||
client_manage_all();
|
client_manage_all();
|
||||||
|
@ -154,7 +157,8 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
client_unmanage_all();
|
client_unmanage_all();
|
||||||
|
|
||||||
plugin_shutdown();
|
plugin_shutdown(); /* calls all the plugins' shutdown functions */
|
||||||
|
grab_shutdown();
|
||||||
client_shutdown();
|
client_shutdown();
|
||||||
screen_shutdown();
|
screen_shutdown();
|
||||||
event_shutdown();
|
event_shutdown();
|
||||||
|
|
Loading…
Reference in a new issue