我想通过在菜单栏应用图标上单击鼠标左键来执行单独的命令。通过单击鼠标右键,应该显示菜单栏的菜单,而不是执行分开的命令。我已经拥有的代码看起来如何?
@IBOutlet weak var appMenu: NSMenu!
@objc func displayMenu() {
guard let button = statusItem?.button else { return }
let x = button.frame.origin.x
let y = button.frame.origin.y - 5
let location = button.superview!.convert(NSMakePoint(x,y),to: nil)
let w = button.window!
let event = NSEvent.mouseEvent(with: .leftMouseDown,location: location,modifierflags: NSEvent.Modifierflags(rawValue: 0),timestamp: 0,windowNumber: w.windowNumber,context: w.graphicsContext,eventNumber: 0,clickCount: 1,pressure: 0)!
NSMenu.popUpContextMenu(appMenu,with: event,for: button)
}
func applicationDidFinishlaunching(_ aNotification: Notification) {
statusItem = NSStatusBar.system.statusItem(withLength: -1)
guard let button = statusItem?.button else {
print("status bar item failed. Try removing some menu bar item.")
NSApp.terminate(nil)
return
}
button.image = NSImage(named: "MenuBarButton")
button.target = self
button.action = #selector(self.detect_mouse_button(sender:))
button.sendaction(on: [.leftMouseUp,.rightMouseUp])
}
@objc func detect_mouse_button(sender: NSStatusItem) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp{
self.displayMenu()
} else {
let sUrl = "https://www.google.de"
NSWorkspace.shared.open(NSURL(string: sUrl)! as URL)
}
}