Krolyxon
Commit 9c92de8

Branches

Refs →

nsxiv9c92de8

Added support for multiple commands per key/button mapping; elegant fix for issue #150

Author
Bert Münnich
Date
2014-07-23 23:41 +0200
Parent
06164c2
Commit
9c92de858484b6bbe90252955bef5f77a80f3c45

+22 −22

4 files changed

  1. M config.def.h +2 −0
  2. M image.c +8 −14
  3. M main.c +8 −4
  4. M types.h +4 −4
M config.def.h View
@@ -102,8 +102,10 @@ static const keymap_t keys[] = {
102102 { 0, XK_R, t_reload_all, (arg_t) None },
103103
104104 { 0, XK_n, i_navigate, (arg_t) +1 },
105+ { 0, XK_n, i_scroll_to_edge, (arg_t) (DIR_LEFT | DIR_UP) },
105106 { 0, XK_space, i_navigate, (arg_t) +1 },
106107 { 0, XK_p, i_navigate, (arg_t) -1 },
108+ { 0, XK_p, i_scroll_to_edge, (arg_t) (DIR_LEFT | DIR_UP) },
107109 { 0, XK_BackSpace, i_navigate, (arg_t) -1 },
108110 { 0, XK_bracketright, i_navigate, (arg_t) +10 },
109111 { 0, XK_bracketleft, i_navigate, (arg_t) -10 },
M image.c View
@@ -687,20 +687,14 @@ bool img_pan_edge(img_t *img, direction_t dir)
687687 ox = img->x;
688688 oy = img->y;
689689
690− switch (dir) {
691− case DIR_LEFT:
692− img->x = 0;
693− break;
694− case DIR_RIGHT:
695− img->x = img->win->w - img->w * img->zoom;
696− break;
697− case DIR_UP:
698− img->y = 0;
699− break;
700− case DIR_DOWN:
701− img->y = img->win->h - img->h * img->zoom;
702− break;
703− }
690+ if (dir & DIR_LEFT)
691+ img->x = 0;
692+ if (dir & DIR_RIGHT)
693+ img->x = img->win->w - img->w * img->zoom;
694+ if (dir & DIR_UP)
695+ img->y = 0;
696+ if (dir & DIR_DOWN)
697+ img->y = img->win->h - img->h * img->zoom;
704698
705699 img_check_pan(img, true);
706700
M main.c View
@@ -541,6 +541,7 @@ void on_keypress(XKeyEvent *kev)
541541 unsigned int sh;
542542 KeySym ksym, shksym;
543543 char key;
544+ bool dirty = false;
544545
545546 if (kev == NULL)
546547 return;
@@ -571,16 +572,18 @@ void on_keypress(XKeyEvent *kev)
571572 (cmds[keys[i].cmd].mode < 0 || cmds[keys[i].cmd].mode == mode))
572573 {
573574 if (cmds[keys[i].cmd].func(keys[i].arg))
574− redraw();
575− break;
575+ dirty = true;
576576 }
577577 }
578+ if (dirty)
579+ redraw();
578580 prefix = 0;
579581 }
580582
581583 void on_buttonpress(XButtonEvent *bev)
582584 {
583585 int i, sel;
586+ bool dirty = false;
584587 static Time firstclick;
585588
586589 if (bev == NULL)
@@ -597,10 +600,11 @@ void on_buttonpress(XButtonEvent *bev)
597600 (cmds[buttons[i].cmd].mode < 0 || cmds[buttons[i].cmd].mode == mode))
598601 {
599602 if (cmds[buttons[i].cmd].func(buttons[i].arg))
600− redraw();
601− break;
603+ dirty = true;
602604 }
603605 }
606+ if (dirty)
607+ redraw();
604608 } else {
605609 /* thumbnail mode (hard-coded) */
606610 switch (bev->button) {
M types.h View
@@ -32,10 +32,10 @@ typedef enum {
3232 } appmode_t;
3333
3434 typedef enum {
35− DIR_LEFT,
36− DIR_RIGHT,
37− DIR_UP,
38− DIR_DOWN
35+ DIR_LEFT = 1,
36+ DIR_RIGHT = 2,
37+ DIR_UP = 4,
38+ DIR_DOWN = 8
3939 } direction_t;
4040
4141 typedef enum {