]> Sergey Matveev's repositories - nnn.git/commitdiff
Double click only works on same item (#555)
author0xACE <0xACE@users.noreply.github.com>
Tue, 5 May 2020 12:32:42 +0000 (14:32 +0200)
committerGitHub <noreply@github.com>
Tue, 5 May 2020 12:32:42 +0000 (18:02 +0530)
This patch disables accidental triggering of double clicking when you
are just single clicking on multiple objects fast.

src/nnn.c

index 789e80d177e6293a1d3988beaf6ada779939c70c..13d9815cb9c5da05870c08fd0e7caf57ffd3723c 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
@@ -5190,6 +5190,7 @@ static bool browse(char *ipath, const char *session)
 #ifndef NOMOUSE
        MEVENT event;
        struct timespec mousetimings[2] = {{.tv_sec = 0, .tv_nsec = 0}, {.tv_sec = 0, .tv_nsec = 0} };
+       int mousedent[2] = {-1, -1};
        bool currentmouse = 1;
        bool rightclicksel = 0;
 #endif
@@ -5423,13 +5424,16 @@ nochange:
                                    CLOCK_REALTIME,
 #endif
                                    &mousetimings[currentmouse]);
+                               mousedent[currentmouse] = cur;
 
-                               /*Single click just selects, double click also opens */
-                               if (((_ABSSUB(mousetimings[0].tv_sec, mousetimings[1].tv_sec) << 30)
-                                 + (mousetimings[0].tv_nsec - mousetimings[1].tv_nsec))
-                                       > DOUBLECLICK_INTERVAL_NS)
+                               /* Single click just selects, double click falls through to SEL_GOIN */
+                               if ((mousedent[0] != mousedent[1]) ||
+                                 (((_ABSSUB(mousetimings[0].tv_sec, mousetimings[1].tv_sec) << 30)
+                                 + (_ABSSUB(mousetimings[0].tv_nsec, mousetimings[1].tv_nsec)))
+                                       > DOUBLECLICK_INTERVAL_NS))
                                        break;
                                mousetimings[currentmouse].tv_sec = 0;
+                               mousedent[currentmouse] = -1;
                        } else {
                                if (cfg.filtermode || filterset())
                                        presel = FILTER;