From 2d5247af4ac90e304b2f1bb0125262a97c67f8b8 Mon Sep 17 00:00:00 2001 From: Bert Date: Fri, 21 Jan 2011 10:30:10 +0100 Subject: More robust key handling --- main.c | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index e6f05c8..ceac9e3 100644 --- a/main.c +++ b/main.c @@ -20,6 +20,7 @@ #include #include +#include #include #include "sxiv.h" @@ -112,44 +113,60 @@ void cleanup() { } void on_keypress(XEvent *ev) { + char key; + int len; KeySym keysym; if (!ev) return; - keysym = XLookupKeysym(&ev->xkey, 0); + len = XLookupString(&ev->xkey, &key, 1, &keysym, NULL); switch (keysym) { case XK_Escape: cleanup(); - exit(1); - case XK_q: + exit(2); + case XK_space: + key = 'n'; + len = 1; + break; + case XK_BackSpace: + key = 'p'; + len = 1; + break; + } + + if (!len) + return; + + printf("%c\n", key); + + switch (key) { + case 'q': cleanup(); exit(0); - case XK_n: - case XK_space: + case 'n': if (fileidx + 1 < filecnt) { img_load(&img, filenames[++fileidx]); img_display(&img, &win); update_title(); } break; - case XK_p: - case XK_BackSpace: + case 'p': if (fileidx > 0) { img_load(&img, filenames[--fileidx]); img_display(&img, &win); update_title(); } break; - case XK_plus: - case XK_equal: + case '+': + case '=': if (img_zoom_in(&img)) { img_render(&img, &win); update_title(); } break; - case XK_minus: + case '-': if (img_zoom_out(&img)) { img_render(&img, &win); update_title(); -- cgit v1.2.3-54-g00ecf