diff options
author | Daniel Stone <daniel@fooishbar.org> | 2010-12-29 12:03:01 +0000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-07-01 08:46:20 +1000 |
commit | 7d2543a3cb3089241982ce4f8984fd723d5312a1 (patch) | |
tree | 2398e2bfbb22a29bedce6ca02ae66d1bfbcadcbb /hw/xfree86/dixmods | |
parent | ddf735fd4e9658bb5610f5e911f3b4055d5acf89 (diff) |
XKB: Add debug key actions for grabs & window tree
Add four new private XKB actions for debugging:
* PrGrbs: print active grabs to the log file
* Ungrab: ungrab all currently active grabs
* ClsGrb: kill clients with active grabs
* PrWins: dump the current window tree to the log file
To use these, you need to modify your XKB maps, e.g. the following to
have Ctrl+Alt+(F9-F12) mapped to the above:
- compat/xfree86:
interpret XF86LogGrabInfo {
action = Private(type=0x86, data="PrGrbs");
};
interpret XF86Ungrab {
action = Private(type=0x86, data="Ungrab");
}
interpret XF86ClearGrab {
action = Private(type=0x86, data="ClsGrb");
}
interpret XF86LogWindowTree {
action = Private(type=0x86, data="PrWins");
}
- symbols/pc:
key <FK09> { type="CTRL+ALT", [ Return, XF86LogGrabInfo ] };
key <FK10> { type="CTRL+ALT", [ Return, XF86Ungrab ] };
key <FK11> { type="CTRL+ALT", [ Return, XF86ClearGrab ] };
key <FK12> { type="CTRL+ALT", [ Return, XF86LogWindowTree ] };
At the moment, this only works if the grabbing client continues to call
AllowEvents, as the server does no event processing at all when a device
is frozen.
Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'hw/xfree86/dixmods')
-rw-r--r-- | hw/xfree86/dixmods/xkbPrivate.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/hw/xfree86/dixmods/xkbPrivate.c b/hw/xfree86/dixmods/xkbPrivate.c index 9742eaf31..06d1c2b3d 100644 --- a/hw/xfree86/dixmods/xkbPrivate.c +++ b/hw/xfree86/dixmods/xkbPrivate.c @@ -13,6 +13,7 @@ #define XKBSRV_NEED_FILE_FUNCS #include <xkbsrv.h> +#include "dixgrabs.h" #include "os.h" #include "xf86.h" @@ -29,6 +30,20 @@ XkbDDXPrivate(DeviceIntPtr dev,KeyCode key,XkbAction *act) xf86ProcessActionEvent(ACTION_PREV_MODE, NULL); else if (strcasecmp(msgbuf, "+vmode")==0) xf86ProcessActionEvent(ACTION_NEXT_MODE, NULL); + else if (strcasecmp(msgbuf, "prgrbs")==0) { + DeviceIntPtr tmp; + xf86Msg(X_INFO, "Printing all currently active device grabs:\n"); + for (tmp = inputInfo.devices; tmp; tmp = tmp->next) + if (tmp->deviceGrab.grab) + PrintDeviceGrabInfo(tmp); + xf86Msg(X_INFO, "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; |