From 2d5247af4ac90e304b2f1bb0125262a97c67f8b8 Mon Sep 17 00:00:00 2001
From: Bert <ber.t@gmx.com>
Date: Fri, 21 Jan 2011 10:30:10 +0100
Subject: More robust key handling

---
 main.c | 37 +++++++++++++++++++++++++++----------
 1 file 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();
-- 
cgit v1.2.3