aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/xkb/ddxPrivate.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-01-20 08:42:58 +0100
committermarha <marha@users.sourceforge.net>2012-01-20 09:06:25 +0100
commit27bec2ba601ec12334e6b7564034f87ab7c9522b (patch)
treeb1100c03326ab526b3f19c18e0fb8ea41ea5db69 /xorg-server/xkb/ddxPrivate.c
parente72d316876aad2b8c8ea76dd6f09f3f2f92fc562 (diff)
downloadvcxsrv-27bec2ba601ec12334e6b7564034f87ab7c9522b.tar.gz
vcxsrv-27bec2ba601ec12334e6b7564034f87ab7c9522b.tar.bz2
vcxsrv-27bec2ba601ec12334e6b7564034f87ab7c9522b.zip
Implemented prgrbs ungrab clsgrb and prwins actions
Now the active grabs can be ungrapped with CTRL+ALT+NKP/ and CTRL+ALT+NKP* (also kill clients)
Diffstat (limited to 'xorg-server/xkb/ddxPrivate.c')
-rw-r--r--xorg-server/xkb/ddxPrivate.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/xorg-server/xkb/ddxPrivate.c b/xorg-server/xkb/ddxPrivate.c
index f1c85f6ea..c4bcab437 100644
--- a/xorg-server/xkb/ddxPrivate.c
+++ b/xorg-server/xkb/ddxPrivate.c
@@ -3,12 +3,44 @@
#include <dix-config.h>
#endif
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include <stdio.h>
#include <X11/X.h>
#include "windowstr.h"
+#define XKBSRV_NEED_FILE_FUNCS
#include <xkbsrv.h>
+#include "dixgrabs.h"
+#include "os.h"
+#include "xf86.h"
+
int
XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act)
{
+ XkbAnyAction *xf86act = &(act->any);
+ char msgbuf[XkbAnyActionDataSize+1];
+
+ if (xf86act->type == XkbSA_XFree86Private) {
+ memcpy(msgbuf, xf86act->data, XkbAnyActionDataSize);
+ msgbuf[XkbAnyActionDataSize]= '\0';
+ if (strcasecmp(msgbuf, "prgrbs")==0) {
+ DeviceIntPtr tmp;
+ ErrorF("Printing all currently active device grabs:\n");
+ for (tmp = inputInfo.devices; tmp; tmp = tmp->next)
+ if (tmp->deviceGrab.grab)
+ PrintDeviceGrabInfo(tmp);
+ ErrorF("End list of active device grabs\n");
+ }
+ else if (strcasecmp(msgbuf, "ungrab")==0)
+ UngrabAllDevices(FALSE);
+ else if (strcasecmp(msgbuf, "clsgrb")==0)
+ UngrabAllDevices(TRUE);
+ else if (strcasecmp(msgbuf, "prwins")==0)
+ PrintWindowTree();
+ }
+
return 0;
}