]> granicus.if.org Git - vim/commitdiff
patch 8.1.2337: double-click time sometimes miscomputed v8.1.2337
authorBram Moolenaar <Bram@vim.org>
Fri, 22 Nov 2019 21:21:59 +0000 (22:21 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 22 Nov 2019 21:21:59 +0000 (22:21 +0100)
Problem:    Double-click time sometimes miscomputed.
Solution:   Correct time computation. (Dominique Pelle, closes #5259)

src/mouse.c
src/testdir/runtest.vim
src/version.c

index c141800689910e560833e3910c17e9ddc596a7c0..9d0e39409d2d717d21aac538ca8767113dd0ab4c 100644 (file)
 
 #include "vim.h"
 
+#ifdef CHECK_DOUBLE_CLICK
+/*
+ * Return the duration from t1 to t2 in milliseconds.
+ */
+    static long
+time_diff_ms(struct timeval *t1, struct timeval *t2)
+{
+    // This handles wrapping of tv_usec correctly without any special case.
+    // Example of 2 pairs (tv_sec, tv_usec) with a duration of 5 ms:
+    //    t1 = (1, 998000) t2 = (2, 3000) gives:
+    //    (2 - 1) * 1000 + (3000 - 998000) / 1000 -> 5 ms.
+    return (t2->tv_sec - t1->tv_sec) * 1000
+        + (t2->tv_usec - t1->tv_usec) / 1000;
+}
+#endif
+
 /*
  * Get class of a character for selection: same class means same word.
  * 0: blank
@@ -2713,14 +2729,7 @@ check_termcode_mouse(
                        timediff = p_mouset;
                    }
                    else
-                   {
-                       timediff = (mouse_time.tv_usec
-                               - orig_mouse_time.tv_usec) / 1000;
-                       if (timediff < 0)
-                           --orig_mouse_time.tv_sec;
-                       timediff += (mouse_time.tv_sec
-                               - orig_mouse_time.tv_sec) * 1000;
-                   }
+                       timediff = time_diff_ms(&orig_mouse_time, &mouse_time);
                    orig_mouse_time = mouse_time;
                    if (mouse_code == orig_mouse_code
                            && timediff < p_mouset
index 2b416b910a3742169f8985a2b820c4dcfbd59081..c05bd25fe89cd5707e9f62815ddbfd7bb9130081 100644 (file)
@@ -343,8 +343,6 @@ let s:flaky_tests = [
       \ 'Test_reltime()',
       \ 'Test_server_crash()',
       \ 'Test_state()',
-      \ 'Test_term_mouse_double_click_to_create_tab()',
-      \ 'Test_term_mouse_multiple_clicks_to_visually_select()',
       \ 'Test_terminal_ansicolors_default()',
       \ 'Test_terminal_ansicolors_func()',
       \ 'Test_terminal_ansicolors_global()',
index 137db0ec2ef151ba51cc881e5ae027d5d18f7180..996c3c5762dadc92eba0354a7a4d97e81da36b79 100644 (file)
@@ -737,6 +737,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2337,
 /**/
     2336,
 /**/