@@ -80,6 +80,11 @@ - (id)init
8080
8181 signImages = [[NSMutableDictionary alloc ] init ];
8282
83+ useMouseTime =
84+ [[NSUserDefaults standardUserDefaults ] boolForKey: MMUseMouseTimeKey];
85+ if (useMouseTime)
86+ mouseDownTime = [[NSDate date ] retain ];
87+
8388 return self;
8489}
8590
@@ -91,6 +96,7 @@ - (void)dealloc
9196 [markedText release ]; markedText = nil ;
9297 [markedTextAttributes release ]; markedTextAttributes = nil ;
9398 [signImages release ]; signImages = nil ;
99+ [mouseDownTime release ]; mouseDownTime = nil ;
94100
95101#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5)
96102 if (asciiImSource) {
@@ -380,7 +386,21 @@ - (void)mouseDown:(NSEvent *)event
380386
381387 int button = [event buttonNumber ];
382388 int flags = [event modifierFlags ];
383- int count = [event clickCount ];
389+ int repeat = 0 ;
390+
391+ if (useMouseTime) {
392+ // Use Vim mouseTime option to handle multiple mouse down events
393+ NSDate *now = [[NSDate date ] retain ];
394+ id mouset = [[[self vimController ] vimState ] objectForKey: @" p_mouset" ];
395+ NSTimeInterval interval =
396+ [now timeIntervalSinceDate: mouseDownTime] * 1000.0 ;
397+ if (interval < (NSTimeInterval )[mouset longValue ])
398+ repeat = 1 ;
399+ mouseDownTime = now;
400+ } else {
401+ repeat = [event clickCount ] > 1 ;
402+ }
403+
384404 NSMutableData *data = [NSMutableData data ];
385405
386406 // If desired, intepret Ctrl-Click as a right mouse click.
@@ -398,7 +418,7 @@ - (void)mouseDown:(NSEvent *)event
398418 [data appendBytes: &col length: sizeof (int )];
399419 [data appendBytes: &button length: sizeof (int )];
400420 [data appendBytes: &flags length: sizeof (int )];
401- [data appendBytes: &count length: sizeof (int )];
421+ [data appendBytes: &repeat length: sizeof (int )];
402422
403423 [[self vimController ] sendMessage: MouseDownMsgID data: data];
404424}
0 commit comments