summaryrefslogtreecommitdiffstats
path: root/main.c
diff options
context:
space:
mode:
authorBert <ber.t@gmx.com>2011-01-21 10:30:10 +0100
committerBert <ber.t@gmx.com>2011-01-21 10:30:10 +0100
commit2d5247af4ac90e304b2f1bb0125262a97c67f8b8 (patch)
treeb5e23a46dfae8289aaf3cf72c17a8a4aebf3493f /main.c
parent9dc46c1d81e74716f643dfab8c267cc6c3d8ec08 (diff)
downloadnsxiv-2d5247af4ac90e304b2f1bb0125262a97c67f8b8.tar.zst
More robust key handling
Diffstat (limited to 'main.c')
-rw-r--r--main.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/main.c b/main.c
index e6f05c8..ceac9e3 100644
--- a/main.c
+++ b/main.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
#include <X11/keysym.h>
#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();