diff options
Diffstat (limited to 'menubar/panel.swift')
| -rw-r--r-- | menubar/panel.swift | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/menubar/panel.swift b/menubar/panel.swift index 8edab70..6619dc0 100644 --- a/menubar/panel.swift +++ b/menubar/panel.swift @@ -194,10 +194,17 @@ func darkHUD() -> NSVisualEffectView { return effect } +/// Whether the pointer moved far enough from where the button went down to +/// be a drag: a click on a trackpad or mouse moves it a point or two. +func isDrag(from down: NSPoint, to now: NSPoint) -> Bool { + hypot(now.x - down.x, now.y - down.y) > 4 +} + /// A click target that does not swallow drags: a drag moves the panel. class ClickView: NSView { var onClick: () -> Void = {} private var dragged = false + private var downAt = NSPoint.zero var hovered = false { didSet { needsDisplay = true; hoverChanged() } } func hoverChanged() {} @@ -222,10 +229,13 @@ class ClickView: NSView { override func mouseEntered(with event: NSEvent) { hovered = true } override func mouseExited(with event: NSEvent) { hovered = false } - override func mouseDown(with event: NSEvent) { dragged = false } + override func mouseDown(with event: NSEvent) { + dragged = false + downAt = NSEvent.mouseLocation + } override func mouseDragged(with event: NSEvent) { - if !dragged { + if !dragged, isDrag(from: downAt, to: NSEvent.mouseLocation) { dragged = true window?.performDrag(with: event) } |
