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 <stdio.h>
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
#include <X11/keysym.h>
|
#include <X11/keysym.h>
|
||||||
|
|
||||||
#include "sxiv.h"
|
#include "sxiv.h"
|
||||||
@ -112,44 +113,60 @@ void cleanup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void on_keypress(XEvent *ev) {
|
void on_keypress(XEvent *ev) {
|
||||||
|
char key;
|
||||||
|
int len;
|
||||||
KeySym keysym;
|
KeySym keysym;
|
||||||
|
|
||||||
if (!ev)
|
if (!ev)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
keysym = XLookupKeysym(&ev->xkey, 0);
|
len = XLookupString(&ev->xkey, &key, 1, &keysym, NULL);
|
||||||
|
|
||||||
switch (keysym) {
|
switch (keysym) {
|
||||||
case XK_Escape:
|
case XK_Escape:
|
||||||
cleanup();
|
cleanup();
|
||||||
exit(1);
|
exit(2);
|
||||||
case XK_q:
|
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();
|
cleanup();
|
||||||
exit(0);
|
exit(0);
|
||||||
case XK_n:
|
case 'n':
|
||||||
case XK_space:
|
|
||||||
if (fileidx + 1 < filecnt) {
|
if (fileidx + 1 < filecnt) {
|
||||||
img_load(&img, filenames[++fileidx]);
|
img_load(&img, filenames[++fileidx]);
|
||||||
img_display(&img, &win);
|
img_display(&img, &win);
|
||||||
update_title();
|
update_title();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case XK_p:
|
case 'p':
|
||||||
case XK_BackSpace:
|
|
||||||
if (fileidx > 0) {
|
if (fileidx > 0) {
|
||||||
img_load(&img, filenames[--fileidx]);
|
img_load(&img, filenames[--fileidx]);
|
||||||
img_display(&img, &win);
|
img_display(&img, &win);
|
||||||
update_title();
|
update_title();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case XK_plus:
|
case '+':
|
||||||
case XK_equal:
|
case '=':
|
||||||
if (img_zoom_in(&img)) {
|
if (img_zoom_in(&img)) {
|
||||||
img_render(&img, &win);
|
img_render(&img, &win);
|
||||||
update_title();
|
update_title();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case XK_minus:
|
case '-':
|
||||||
if (img_zoom_out(&img)) {
|
if (img_zoom_out(&img)) {
|
||||||
img_render(&img, &win);
|
img_render(&img, &win);
|
||||||
update_title();
|
update_title();
|
||||||
|
Loading…
Reference in New Issue
Block a user