@@ -102,8 +102,10 @@ static const keymap_t keys[] = { | |||||
{ 0, XK_R, t_reload_all, (arg_t) None }, | { 0, XK_R, t_reload_all, (arg_t) None }, | ||||
{ 0, XK_n, i_navigate, (arg_t) +1 }, | { 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_space, i_navigate, (arg_t) +1 }, | ||||
{ 0, XK_p, 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_BackSpace, i_navigate, (arg_t) -1 }, | ||||
{ 0, XK_bracketright, i_navigate, (arg_t) +10 }, | { 0, XK_bracketright, i_navigate, (arg_t) +10 }, | ||||
{ 0, XK_bracketleft, 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; | ox = img->x; | ||||
oy = img->y; | 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); | img_check_pan(img, true); | ||||
@@ -541,6 +541,7 @@ void on_keypress(XKeyEvent *kev) | |||||
unsigned int sh; | unsigned int sh; | ||||
KeySym ksym, shksym; | KeySym ksym, shksym; | ||||
char key; | char key; | ||||
bool dirty = false; | |||||
if (kev == NULL) | if (kev == NULL) | ||||
return; | return; | ||||
@@ -571,16 +572,18 @@ void on_keypress(XKeyEvent *kev) | |||||
(cmds[keys[i].cmd].mode < 0 || cmds[keys[i].cmd].mode == mode)) | (cmds[keys[i].cmd].mode < 0 || cmds[keys[i].cmd].mode == mode)) | ||||
{ | { | ||||
if (cmds[keys[i].cmd].func(keys[i].arg)) | if (cmds[keys[i].cmd].func(keys[i].arg)) | ||||
redraw(); | |||||
break; | |||||
dirty = true; | |||||
} | } | ||||
} | } | ||||
if (dirty) | |||||
redraw(); | |||||
prefix = 0; | prefix = 0; | ||||
} | } | ||||
void on_buttonpress(XButtonEvent *bev) | void on_buttonpress(XButtonEvent *bev) | ||||
{ | { | ||||
int i, sel; | int i, sel; | ||||
bool dirty = false; | |||||
static Time firstclick; | static Time firstclick; | ||||
if (bev == NULL) | if (bev == NULL) | ||||
@@ -597,10 +600,11 @@ void on_buttonpress(XButtonEvent *bev) | |||||
(cmds[buttons[i].cmd].mode < 0 || cmds[buttons[i].cmd].mode == mode)) | (cmds[buttons[i].cmd].mode < 0 || cmds[buttons[i].cmd].mode == mode)) | ||||
{ | { | ||||
if (cmds[buttons[i].cmd].func(buttons[i].arg)) | if (cmds[buttons[i].cmd].func(buttons[i].arg)) | ||||
redraw(); | |||||
break; | |||||
dirty = true; | |||||
} | } | ||||
} | } | ||||
if (dirty) | |||||
redraw(); | |||||
} else { | } else { | ||||
/* thumbnail mode (hard-coded) */ | /* thumbnail mode (hard-coded) */ | ||||
switch (bev->button) { | switch (bev->button) { | ||||
@@ -32,10 +32,10 @@ typedef enum { | |||||
} appmode_t; | } appmode_t; | ||||
typedef enum { | typedef enum { | ||||
DIR_LEFT, | |||||
DIR_RIGHT, | |||||
DIR_UP, | |||||
DIR_DOWN | |||||
DIR_LEFT = 1, | |||||
DIR_RIGHT = 2, | |||||
DIR_UP = 4, | |||||
DIR_DOWN = 8 | |||||
} direction_t; | } direction_t; | ||||
typedef enum { | typedef enum { | ||||