|
|
@@ -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(); |
|
|
|