I took a look at your problem. I could not fix the delay, but it can decrease if you set popover.animates to false .
Incorrect approach :
I was able to solve the mouseExited more popover problem by adding a new border (and shadowless) window on top of the other. trackingArea added to the transparent window, and popover is added to the original one. Depending on the transparent level windows, it is located above the popover, and therefore they cannot interfere with each other. In the gif below you can see the results of my tests:

Here is my code:
Mouse tracking:
override func mouseMoved(with event: NSEvent) { let location = self.view.convert(event.locationInWindow, from: nil) popover.positioningRect.origin.x = location.x popover.positioningRect.origin.y = location.y }
Custom window:
transparentWindow.backgroundColor = NSColor.clear transparentWindow.isOpaque = false transparentWindow.styleMask = .borderless transparentWindow.makeKeyAndOrderFront(nil)
Update 11/11/2016 :
I just read the question in the link you provided. There is a window for setting ignoresMouseEvents on. Even if NSPopover inherits from NSObject , you have a contentViewController that contains a view object that contains popovers window . (as explained here )
So just install
popover.contentViewController?.view.window?.ignoresMouseEvents = true
after displaying popover .
source share