| /* Copyright (c) 2005 Russ Cox, see README for licence details */ |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <X11/X.h> |
| #include <X11/Xos.h> |
| #include <X11/Xlib.h> |
| #include <X11/Xutil.h> |
| #include <X11/Xatom.h> |
| #include <X11/keysym.h> |
| #include <X11/extensions/shape.h> |
| #include "dat.h" |
| #include "fns.h" |
| #include "patchlevel.h" |
| |
| enum |
| { |
| GrabAltTab, |
| GrabAltAny |
| }; |
| |
| /*static int tabcode = 0x17; */ |
| /*static int altcode = 0x40; */ |
| /*static int pgupcode = 0x63; */ |
| /*static int pgdowncode = 0x69; */ |
| |
| static void alttab(int shift); |
| |
| void |
| keysetup(void) |
| { |
| int i; |
| int tabcode = XKeysymToKeycode(dpy, XK_Tab); |
| |
| for(i=0; i<num_screens; i++){ |
| XGrabKey(dpy, tabcode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync); |
| XGrabKey(dpy, tabcode, Mod1Mask|ShiftMask, screens[i].root, 0, GrabModeSync, GrabModeAsync); |
| /* XGrabKey(dpy, pgupcode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync); */ |
| /* XGrabKey(dpy, pgdowncode, Mod1Mask, screens[i].root, 0, GrabModeSync, GrabModeAsync); */ |
| /* XGrabKey(dpy, altcode, 0, screens[i].root, 0, GrabModeSync, GrabModeAsync); */ |
| } |
| } |
| |
| void |
| keypress(XKeyEvent *e) |
| { |
| /* |
| * process key press here |
| */ |
| int tabcode = XKeysymToKeycode(dpy, XK_Tab); |
| if(e->keycode == tabcode && (e->state&Mod1Mask) == (1<<3)) |
| alttab(e->state&ShiftMask); |
| XAllowEvents(dpy, SyncKeyboard, e->time); |
| } |
| |
| void |
| keyrelease(XKeyEvent *e) |
| { |
| XAllowEvents(dpy, SyncKeyboard, e->time); |
| } |
| |
| static void |
| alttab(int shift) |
| { |
| shuffle(shift); |
| /* fprintf(stderr, "%sTab\n", shift ? "Back" : ""); */ |
| } |
| |