Also store the mouse location and don't double-click if it moved.
authorJoe Wreschnig <joe.wreschnig@gmail.com>
Sat, 9 Mar 2013 12:41:27 +0000 (13:41 +0100)
committerJoe Wreschnig <joe.wreschnig@gmail.com>
Sat, 9 Mar 2013 12:41:27 +0000 (13:41 +0100)
Classes/NJOutputMouseButton.m

index 18d82ff99b05fe76b41dfb9332f684a0138feadd..bc286bd35b4b82047acc5a2d764fd81184c24bb3 100644 (file)
@@ -10,6 +10,7 @@
 @implementation NJOutputMouseButton {
     NSDate *upTime;
     int clickCount;
+    NSPoint clickPosition;
 }
 
 + (NSTimeInterval)doubleClickInterval {
@@ -51,8 +52,8 @@
                                                CGPointMake(mouseLoc.x, height - mouseLoc.y),
                                                _button);
 
-    NSLog(@"%@\n%@", upTime, [NSDate date]);
-    if (clickCount >= 3 || [upTime compare:[NSDate date]] == NSOrderedAscending)
+    if (clickCount >= 3 || [upTime compare:[NSDate date]] == NSOrderedAscending
+        || !CGPointEqualToPoint(NSEvent.mouseLocation, clickPosition))
         clickCount = 1;
     else
         ++clickCount;
 }
 
 - (void)untrigger {
+    upTime = [NJOutputMouseButton dateWithClickInterval];
+    clickPosition = NSEvent.mouseLocation;
     CGFloat height = NSScreen.mainScreen.frame.size.height;
-    NSPoint mouseLoc = NSEvent.mouseLocation;
     CGEventType eventType = (_button == kCGMouseButtonLeft) ? kCGEventLeftMouseUp : kCGEventRightMouseUp;
     CGEventRef click = CGEventCreateMouseEvent(NULL,
                                                eventType,
-                                               CGPointMake(mouseLoc.x, height - mouseLoc.y),
+                                               CGPointMake(clickPosition.x, height - clickPosition.y),
                                                _button);
     CGEventSetIntegerValueField(click, kCGMouseEventClickState, clickCount);
     CGEventPost(kCGHIDEventTap, click);
     CFRelease(click);
-    upTime = [NJOutputMouseButton dateWithClickInterval];
 }
 
 @end