diff options
author | Bert Münnich <ber.t@posteo.de> | 2014-07-23 23:41:23 +0200 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2014-07-23 23:41:23 +0200 |
commit | 9c92de858484b6bbe90252955bef5f77a80f3c45 (patch) | |
tree | 6cc5e92a83f29e3082848e41ee8bd981e80f3b3f | |
parent | 06164c29b759c3e21e79be03b285bdf3da6f5a25 (diff) |
Added support for multiple commands per key/button mapping; elegant fix for issue #150
-rw-r--r-- | config.def.h | 2 | ||||
-rw-r--r-- | image.c | 22 | ||||
-rw-r--r-- | main.c | 12 | ||||
-rw-r--r-- | types.h | 8 |
4 files changed, 22 insertions, 22 deletions
diff --git a/config.def.h b/config.def.h index 5d1a6e2..2742e65 100644 --- a/config.def.h +++ b/config.def.h @@ -102,8 +102,10 @@ static const keymap_t keys[] = { { 0, XK_R, t_reload_all, (arg_t) None }, { 0, XK_n, i_navigate, (arg_t) +1 }, + { 0, XK_n, i_scroll_to_edge, (arg_t) (DIR_LEFT | DIR_UP) }, { 0, XK_space, i_navigate, (arg_t) +1 }, { 0, XK_p, i_navigate, (arg_t) -1 }, + { 0, XK_p, i_scroll_to_edge, (arg_t) (DIR_LEFT | DIR_UP) }, { 0, XK_BackSpace, i_navigate, (arg_t) -1 }, { 0, XK_bracketright, i_navigate, (arg_t) +10 }, { 0, XK_bracketleft, i_navigate, (arg_t) -10 }, @@ -687,20 +687,14 @@ bool img_pan_edge(img_t *img, direction_t dir) ox = img->x; oy = img->y; - switch (dir) { - case DIR_LEFT: - img->x = 0; - break; - case DIR_RIGHT: - img->x = img->win->w - img->w * img->zoom; - break; - case DIR_UP: - img->y = 0; - break; - case DIR_DOWN: - img->y = img->win->h - img->h * img->zoom; - break; - } + if (dir & DIR_LEFT) + img->x = 0; + if (dir & DIR_RIGHT) + img->x = img->win->w - img->w * img->zoom; + if (dir & DIR_UP) + img->y = 0; + if (dir & DIR_DOWN) + img->y = img->win->h - img->h * img->zoom; img_check_pan(img, true); @@ -541,6 +541,7 @@ void on_keypress(XKeyEvent *kev) unsigned int sh; KeySym ksym, shksym; char key; + bool dirty = false; if (kev == NULL) return; @@ -571,16 +572,18 @@ void on_keypress(XKeyEvent *kev) (cmds[keys[i].cmd].mode < 0 || cmds[keys[i].cmd].mode == mode)) { if (cmds[keys[i].cmd].func(keys[i].arg)) - redraw(); - break; + dirty = true; } } + if (dirty) + redraw(); prefix = 0; } void on_buttonpress(XButtonEvent *bev) { int i, sel; + bool dirty = false; static Time firstclick; if (bev == NULL) @@ -597,10 +600,11 @@ void on_buttonpress(XButtonEvent *bev) (cmds[buttons[i].cmd].mode < 0 || cmds[buttons[i].cmd].mode == mode)) { if (cmds[buttons[i].cmd].func(buttons[i].arg)) - redraw(); - break; + dirty = true; } } + if (dirty) + redraw(); } else { /* thumbnail mode (hard-coded) */ switch (bev->button) { @@ -32,10 +32,10 @@ typedef enum { } appmode_t; typedef enum { - DIR_LEFT, - DIR_RIGHT, - DIR_UP, - DIR_DOWN + DIR_LEFT = 1, + DIR_RIGHT = 2, + DIR_UP = 4, + DIR_DOWN = 8 } direction_t; typedef enum { |