Krolyxon
Commit 2d5247a

Branches

Refs →

nsxiv2d5247a

More robust key handling

Author
Bert
Date
2011-01-21 10:30 +0100
Parent
9dc46c1
Commit
2d5247af4ac90e304b2f1bb0125262a97c67f8b8

+27 −10

1 file changed

  1. M main.c +27 −10
M main.c View
@@ -20,6 +20,7 @@
2020 #include <stdio.h>
2121
2222 #include <X11/Xlib.h>
23+#include <X11/Xutil.h>
2324 #include <X11/keysym.h>
2425
2526 #include "sxiv.h"
@@ -112,44 +113,60 @@ void cleanup() {
112113 }
113114
114115 void on_keypress(XEvent *ev) {
116+ char key;
117+ int len;
115118 KeySym keysym;
116119
117120 if (!ev)
118121 return;
119122
120− keysym = XLookupKeysym(&ev->xkey, 0);
123+ len = XLookupString(&ev->xkey, &key, 1, &keysym, NULL);
121124
122125 switch (keysym) {
123126 case XK_Escape:
124127 cleanup();
125− exit(1);
126− case XK_q:
128+ exit(2);
129+ case XK_space:
130+ key = 'n';
131+ len = 1;
132+ break;
133+ case XK_BackSpace:
134+ key = 'p';
135+ len = 1;
136+ break;
137+ }
138+
139+ if (!len)
140+ return;
141+
142+ printf("%c\n", key);
143+
144+ switch (key) {
145+ case 'q':
127146 cleanup();
128147 exit(0);
129− case XK_n:
130− case XK_space:
148+ case 'n':
131149 if (fileidx + 1 < filecnt) {
132150 img_load(&img, filenames[++fileidx]);
133151 img_display(&img, &win);
134152 update_title();
135153 }
136154 break;
137− case XK_p:
138− case XK_BackSpace:
155+ case 'p':
139156 if (fileidx > 0) {
140157 img_load(&img, filenames[--fileidx]);
141158 img_display(&img, &win);
142159 update_title();
143160 }
144161 break;
145− case XK_plus:
146− case XK_equal:
162+ case '+':
163+ case '=':
147164 if (img_zoom_in(&img)) {
148165 img_render(&img, &win);
149166 update_title();
150167 }
151168 break;
152− case XK_minus:
169+ case '-':
153170 if (img_zoom_out(&img)) {
154171 img_render(&img, &win);
155172 update_title();