diff options
| author | Akshay Nair <phenax5@gmail.com> | 2020-06-16 20:21:22 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2020-06-16 20:21:22 +0530 |
| commit | 9dc0cc7b2493d0304bd9b5798ebde90ecd9f859e (patch) | |
| tree | 65ec667a78185727674787b558394fb44f678add /daemonic.c | |
| parent | 7bc460eb28b829537ba9b117eba238d4eaf7b059 (diff) | |
| download | shotkey-9dc0cc7b2493d0304bd9b5798ebde90ecd9f859e.tar.gz shotkey-9dc0cc7b2493d0304bd9b5798ebde90ecd9f859e.zip | |
refactors keypress handler out and adds log
Diffstat (limited to '')
| -rw-r--r-- | daemonic.c | 35 |
1 files changed, 20 insertions, 15 deletions
@@ -10,19 +10,15 @@ typedef struct Key { #include "config.h" -#define LENGTH(X) (sizeof X / sizeof X[0]) +#define LENGTH(X) (sizeof X / sizeof X[0]) +#define CLEANMASK(mask) (mask & ~LockMask & (ShiftMask|ControlMask|Mod1Mask|Mod2Mask|Mod3Mask|Mod4Mask|Mod5Mask)) -void -bind_key(Display *dpy, Window win, unsigned int mod, KeySym key) -{ +void bind_key(Display *dpy, Window win, unsigned int mod, KeySym key) { int keycode = XKeysymToKeycode(dpy, key); - XGrabKey(dpy, keycode, mod, win, False, GrabModeAsync, GrabModeAsync); } -int -error_handler(Display *disp, XErrorEvent *xe) -{ +int error_handler(Display *disp, XErrorEvent *xe) { if (xe->error_code == BadAccess) { printf("daemonic: [BadAccess] Cant grab key binding. Already grabbed\n"); return 0; @@ -32,17 +28,27 @@ error_handler(Display *disp, XErrorEvent *xe) return 1; } -int -main() -{ - int running = 10; +void keypress(Display *dpy, XKeyEvent *ev) { + unsigned int i; + KeySym keysym = XKeycodeToKeysym(dpy, (KeyCode) ev->keycode, 0); + + for (i = 0; i < LENGTH(keys); i++) { + if (keysym == keys[i].key && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state) && keys[i].command) { + printf("Executin: %s\n", keys[i].command); + } + } +} + +int main() { XSetErrorHandler(error_handler); + int running = 10; + int i; + Display *dpy = XOpenDisplay(0); Window root = DefaultRootWindow(dpy); // Grab keys - int i; for (i = 0; i < LENGTH(keys); i++) { bind_key(dpy, root, keys[i].mod, keys[i].key); } @@ -54,8 +60,7 @@ main() XSync(dpy, False); while (running && !XNextEvent(dpy, &ev)) { if (ev.type == KeyPress) { - printf("Key: %d\n", ev.xkey.keycode); - + keypress(dpy, &ev.xkey); running--; } } |
