More robust key handling
This commit is contained in:
parent
9dc46c1d81
commit
2d5247af4a
37
main.c
37
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();
|
||||
|
|
Loading…
Reference in New Issue