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

This commit is contained in:
Bert Münnich 2014-07-23 23:41:23 +02:00
parent 06164c29b7
commit 9c92de8584
4 changed files with 22 additions and 22 deletions

View file

@ -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 },

14
image.c
View file

@ -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:
if (dir & DIR_LEFT)
img->x = 0;
break;
case DIR_RIGHT:
if (dir & DIR_RIGHT)
img->x = img->win->w - img->w * img->zoom;
break;
case DIR_UP:
if (dir & DIR_UP)
img->y = 0;
break;
case DIR_DOWN:
if (dir & DIR_DOWN)
img->y = img->win->h - img->h * img->zoom;
break;
}
img_check_pan(img, true);

16
main.c
View file

@ -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))
dirty = true;
}
}
if (dirty)
redraw();
break;
}
}
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))
dirty = true;
}
}
if (dirty)
redraw();
break;
}
}
} else {
/* thumbnail mode (hard-coded) */
switch (bev->button) {

View file

@ -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 {