Skip to content

Commit cbd8ff0

Browse files
committed
Add MMUseMouseTime, Revise #77
`MMUseMouseTime` allows to override the time threshold for detecting multiple mouse down events using Vim `mousetime` option. $ defaults write org.vim.MacVim MMUseMouseTime -bool TRUE
1 parent 11bd9b9 commit cbd8ff0

File tree

5 files changed

+29
-4
lines changed

5 files changed

+29
-4
lines changed

src/MacVim/MMBackend.m

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1844,6 +1844,7 @@ - (void)insertVimStateMessage
18441844
[NSNumber numberWithBool:mmta], @"p_mmta",
18451845
[NSNumber numberWithInt:numTabs], @"numTabs",
18461846
[NSNumber numberWithInt:fuoptions_flags], @"fullScreenOptions",
1847+
[NSNumber numberWithLong:p_mouset], @"p_mouset",
18471848
nil];
18481849

18491850
// Put the state before all other messages.
@@ -1932,12 +1933,12 @@ - (void)handleInputEvent:(int)msgid data:(NSData *)data
19321933
int col = *((int*)bytes); bytes += sizeof(int);
19331934
int button = *((int*)bytes); bytes += sizeof(int);
19341935
int flags = *((int*)bytes); bytes += sizeof(int);
1935-
int count = *((int*)bytes); bytes += sizeof(int);
1936+
int repeat = *((int*)bytes); bytes += sizeof(int);
19361937

19371938
button = eventButtonNumberToVimMouseButton(button);
19381939
if (button >= 0) {
19391940
flags = eventModifierFlagsToVimMouseModMask(flags);
1940-
gui_send_mouse_event(button, col, row, count>1, flags);
1941+
gui_send_mouse_event(button, col, row, repeat, flags);
19411942
}
19421943
} else if (MouseUpMsgID == msgid) {
19431944
if (!data) return;

src/MacVim/MMTextViewHelper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
BOOL interpretKeyEventsSwallowedKey;
3636
NSEvent *currentEvent;
3737
NSMutableDictionary *signImages;
38+
BOOL useMouseTime;
39+
NSDate *mouseDownTime;
3840

3941
// Input Manager
4042
NSRange imRange;

src/MacVim/MMTextViewHelper.m

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/MacVim/Miscellaneous.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ extern NSString *MMUseInlineImKey;
5555
#endif // INCLUDE_OLD_IM_CODE
5656
extern NSString *MMSuppressTerminationAlertKey;
5757
extern NSString *MMNativeFullScreenKey;
58+
extern NSString *MMUseMouseTimeKey;
5859

5960

6061
// Enum for MMUntitledWindowKey

src/MacVim/Miscellaneous.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
#endif // INCLUDE_OLD_IM_CODE
4848
NSString *MMSuppressTerminationAlertKey = @"MMSuppressTerminationAlert";
4949
NSString *MMNativeFullScreenKey = @"MMNativeFullScreen";
50+
NSString *MMUseMouseTimeKey = @"MMUseMouseTime";
5051

5152

5253

0 commit comments

Comments
 (0)