aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nnn.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/nnn.c b/src/nnn.c
index dec7ee1..27f5cee 100644
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -107,6 +107,7 @@
#define S_BLKSIZE 512 /* S_BLKSIZE is missing on Android NDK (Termux) */
#endif
+#define _ABSSUB(N, M) (((N) <= (M)) ? ((M) - (N)) : ((N) - (M)))
#define LEN(x) (sizeof(x) / sizeof(*(x)))
#undef MIN
#define MIN(x, y) ((x) < (y) ? (x) : (y))
@@ -1015,12 +1016,12 @@ static bool initcurses(mmask_t *oldmask)
//intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
#if NCURSES_MOUSE_VERSION <= 1
- mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED, oldmask);
+ mousemask(BUTTON1_PRESSED | BUTTON1_DOUBLE_CLICKED, oldmask);
#else
- mousemask(BUTTON1_CLICKED | BUTTON1_DOUBLE_CLICKED | BUTTON4_PRESSED | BUTTON5_PRESSED,
+ mousemask(BUTTON1_PRESSED | BUTTON4_PRESSED | BUTTON5_PRESSED,
oldmask);
#endif
- mouseinterval(400);
+ mouseinterval(0);
curs_set(FALSE); /* Hide cursor */
start_color();
use_default_colors();
@@ -3542,6 +3543,8 @@ static void browse(char *ipath)
struct stat sb;
char *path, *lastdir, *lastname, *dir, *tmp;
MEVENT event;
+ struct timespec mousetimings[2] = {{.tv_sec = 0, .tv_nsec = 0}, {.tv_sec = 0, .tv_nsec = 0}};
+ bool currentmouse = 1;
atexit(dentfree);
@@ -3663,7 +3666,7 @@ nochange:
goto nochange; // fallthrough
case SEL_BACK:
/* Handle clicking on a context at the top */
- if (sel == SEL_CLICK && event.bstate == BUTTON1_CLICKED && event.y == 0) {
+ if (sel == SEL_CLICK && event.bstate == BUTTON1_PRESSED && event.y == 0) {
/* Get context from: "[1 2 3 4]..." */
r = event.x >> 1;
@@ -3715,7 +3718,7 @@ nochange:
#endif
/* Toggle filter mode on left click on last 2 lines */
- if (event.y >= xlines - 2) {
+ if (event.y >= xlines - 2 && event.bstate == BUTTON1_PRESSED) {
cfg.filtermode ^= 1;
if (cfg.filtermode) {
presel = FILTER;
@@ -3731,13 +3734,18 @@ nochange:
}
/* Handle clicking on a file */
- if (2 <= event.y && event.y <= ndents + 1) {
+ if (2 <= event.y && event.y <= ndents + 1 && event.bstate == BUTTON1_PRESSED) {
r = curscroll + (event.y - 2);
move_cursor(r, 1);
+ currentmouse ^= 1;
+ clock_gettime(CLOCK_MONOTONIC_RAW, &mousetimings[currentmouse]);
/*Single click just selects, double click also opens */
- if (event.bstate != BUTTON1_DOUBLE_CLICKED)
+ if (((_ABSSUB(mousetimings[0].tv_sec, mousetimings[1].tv_sec) << 30)
+ + (mousetimings[0].tv_nsec - mousetimings[1].tv_nsec))
+ > 400000000)
break;
+ mousetimings[currentmouse].tv_sec = 0;
} else {
if (cfg.filtermode)
presel = FILTER;