diff options
| -rw-r--r-- | commands.c | 4 | ||||
| -rw-r--r-- | config.def.h | 5 | ||||
| -rw-r--r-- | main.c | 19 | 
3 files changed, 22 insertions, 6 deletions
@@ -29,7 +29,7 @@ void load_image(int);  bool mark_image(int, bool);  void close_info(void);  void open_info(void); -int ptr_third_x(void); +int nav_button(void);  void redraw(void);  void reset_cursor(void);  void animate(void); @@ -286,7 +286,7 @@ bool ci_navigate(arg_t n)  bool ci_cursor_navigate(arg_t _)  { -	return ci_navigate(ptr_third_x() - 1); +	return ci_navigate(nav_button() - 1);  }  bool ci_alternate(arg_t _) diff --git a/config.def.h b/config.def.h index 75c5eed..1ccf5a4 100644 --- a/config.def.h +++ b/config.def.h @@ -173,6 +173,11 @@ static const button_t buttons[] = {  	{ 0,            5,                g_zoom,               -1 },  }; +/* true means NAV_WIDTH is relative (33%), false means absolute (33 pixels) */ +static const bool NAV_IS_REL = true; +/* width of navigation area, 0 disables cursor navigation, */ +static const unsigned int NAV_WIDTH = 33; +  /* mouse cursor on left, middle and right part of the window */  static const cursor_t imgcursor[3] = {  	CURSOR_LEFT, CURSOR_ARROW, CURSOR_RIGHT @@ -392,12 +392,23 @@ void update_info(void)  	}  } -int ptr_third_x(void) +int nav_button(void)  { -	int x, y; +	int x, y, nw; + +	if (NAV_WIDTH == 0) +		return 1;  	win_cursor_pos(&win, &x, &y); -	return MAX(0, MIN(2, (x / (win.w * 0.33)))); +	nw = NAV_IS_REL ? win.w * NAV_WIDTH / 100 : NAV_WIDTH; +	nw = MIN(nw, (win.w + 1) / 2); + +	if (x < nw) +		return 0; +	else if (x < win.w-nw) +		return 1; +	else +		return 2;  }  void redraw(void) @@ -431,7 +442,7 @@ void reset_cursor(void)  		for (i = 0; i < ARRLEN(timeouts); i++) {  			if (timeouts[i].handler == reset_cursor) {  				if (timeouts[i].active) { -					c = ptr_third_x(); +					c = nav_button();  					c = MAX(fileidx > 0 ? 0 : 1, c);  					c = MIN(fileidx + 1 < filecnt ? 2 : 1, c);  					cursor = imgcursor[c];  | 
