Nicer key handling, does not fix problems
This commit is contained in:
parent
03bfe1015e
commit
f7a66469e6
69
main.c
69
main.c
|
@ -136,79 +136,60 @@ void cleanup() {
|
|||
|
||||
void on_keypress(XEvent *ev) {
|
||||
char key;
|
||||
KeySym keysym;
|
||||
KeySym ksym;
|
||||
int changed;
|
||||
|
||||
if (!ev)
|
||||
return;
|
||||
|
||||
XLookupString(&ev->xkey, &key, 1, &keysym, NULL);
|
||||
XLookupString(&ev->xkey, &key, 1, &ksym, NULL);
|
||||
changed = 0;
|
||||
|
||||
switch (keysym) {
|
||||
switch (ksym) {
|
||||
case XK_Escape:
|
||||
cleanup();
|
||||
exit(2);
|
||||
case XK_space:
|
||||
key = 'n';
|
||||
break;
|
||||
case XK_BackSpace:
|
||||
key = 'p';
|
||||
break;
|
||||
case XK_Left:
|
||||
key = 'h';
|
||||
break;
|
||||
case XK_Down:
|
||||
key = 'j';
|
||||
break;
|
||||
case XK_Up:
|
||||
key = 'k';
|
||||
break;
|
||||
case XK_Right:
|
||||
key = 'l';
|
||||
break;
|
||||
}
|
||||
|
||||
switch (key) {
|
||||
case 'q':
|
||||
case XK_q:
|
||||
cleanup();
|
||||
exit(0);
|
||||
|
||||
/* navigate image list */
|
||||
case 'n':
|
||||
case XK_n:
|
||||
case XK_space:
|
||||
if (fileidx + 1 < filecnt) {
|
||||
img_load(&img, filenames[++fileidx]);
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
case XK_p:
|
||||
case XK_BackSpace:
|
||||
if (fileidx > 0) {
|
||||
img_load(&img, filenames[--fileidx]);
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case '[':
|
||||
case XK_bracketleft:
|
||||
if (fileidx != 0) {
|
||||
fileidx = MAX(0, fileidx - 10);
|
||||
img_load(&img, filenames[fileidx]);
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case ']':
|
||||
case XK_bracketright:
|
||||
if (fileidx != filecnt - 1) {
|
||||
fileidx = MIN(fileidx + 10, filecnt - 1);
|
||||
img_load(&img, filenames[fileidx]);
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case 'g':
|
||||
case XK_g:
|
||||
if (fileidx != 0) {
|
||||
fileidx = 0;
|
||||
img_load(&img, filenames[fileidx]);
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case 'G':
|
||||
case XK_G:
|
||||
if (fileidx != filecnt - 1) {
|
||||
fileidx = filecnt - 1;
|
||||
img_load(&img, filenames[fileidx]);
|
||||
|
@ -217,43 +198,47 @@ void on_keypress(XEvent *ev) {
|
|||
break;
|
||||
|
||||
/* zooming */
|
||||
case '+':
|
||||
case '=':
|
||||
case XK_plus:
|
||||
case XK_equal:
|
||||
changed = img_zoom_in(&img);
|
||||
break;
|
||||
case '-':
|
||||
case XK_minus:
|
||||
changed = img_zoom_out(&img);
|
||||
break;
|
||||
|
||||
/* panning */
|
||||
case 'h':
|
||||
case XK_h:
|
||||
case XK_Left:
|
||||
changed = img_pan(&img, &win, PAN_LEFT);
|
||||
break;
|
||||
case 'j':
|
||||
case XK_j:
|
||||
case XK_Down:
|
||||
changed = img_pan(&img, &win, PAN_DOWN);
|
||||
break;
|
||||
case 'k':
|
||||
case XK_k:
|
||||
case XK_Up:
|
||||
changed = img_pan(&img, &win, PAN_UP);
|
||||
break;
|
||||
case 'l':
|
||||
case XK_l:
|
||||
case XK_Right:
|
||||
changed = img_pan(&img, &win, PAN_RIGHT);
|
||||
break;
|
||||
|
||||
/* rotation */
|
||||
case '<':
|
||||
case XK_less:
|
||||
changed = img_rotate_left(&img, &win);
|
||||
break;
|
||||
case '>':
|
||||
case XK_greater:
|
||||
changed = img_rotate_right(&img, &win);
|
||||
break;
|
||||
|
||||
/* control window */
|
||||
case 'f':
|
||||
case XK_f:
|
||||
win_toggle_fullscreen(&win);
|
||||
break;
|
||||
|
||||
/* miscellaneous */
|
||||
case 'a':
|
||||
case XK_a:
|
||||
changed = img_toggle_antialias(&img);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue