Select mouse button by tag; expose buttons 4 and 5 in the UI.
[enjoyable.git] / Classes / NJOutputMouseButton.m
index 18d82ff..5ddb69d 100644 (file)
@@ -10,6 +10,7 @@
 @implementation NJOutputMouseButton {
     NSDate *upTime;
     int clickCount;
+    NSPoint clickPosition;
 }
 
 + (NSTimeInterval)doubleClickInterval {
 - (void)trigger {
     CGFloat height = NSScreen.mainScreen.frame.size.height;
     NSPoint mouseLoc = NSEvent.mouseLocation;
-    CGEventType eventType = (_button == kCGMouseButtonLeft) ? kCGEventLeftMouseDown : kCGEventRightMouseDown;
+    CGEventType eventType = _button == kCGMouseButtonLeft ? kCGEventLeftMouseDown
+                          : _button == kCGMouseButtonRight ? kCGEventRightMouseDown
+                          : kCGEventOtherMouseDown;
     CGEventRef click = CGEventCreateMouseEvent(NULL,
                                                eventType,
                                                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(mouseLoc, clickPosition))
         clickCount = 1;
     else
         ++clickCount;
     CGEventSetIntegerValueField(click, kCGMouseEventClickState, clickCount);
-    
     CGEventPost(kCGHIDEventTap, click);
     CFRelease(click);
+    clickPosition = mouseLoc;
 }
 
 - (void)untrigger {
-    CGFloat height = NSScreen.mainScreen.frame.size.height;
+    upTime = [NJOutputMouseButton dateWithClickInterval];
     NSPoint mouseLoc = NSEvent.mouseLocation;
-    CGEventType eventType = (_button == kCGMouseButtonLeft) ? kCGEventLeftMouseUp : kCGEventRightMouseUp;
+    CGFloat height = NSScreen.mainScreen.frame.size.height;
+    CGEventType eventType = _button == kCGMouseButtonLeft ? kCGEventLeftMouseUp
+                          : _button == kCGMouseButtonRight ? kCGEventRightMouseUp
+                          : kCGEventOtherMouseUp;
     CGEventRef click = CGEventCreateMouseEvent(NULL,
                                                eventType,
                                                CGPointMake(mouseLoc.x, height - mouseLoc.y),
@@ -73,7 +79,6 @@
     CGEventSetIntegerValueField(click, kCGMouseEventClickState, clickCount);
     CGEventPost(kCGHIDEventTap, click);
     CFRelease(click);
-    upTime = [NJOutputMouseButton dateWithClickInterval];
 }
 
 @end