🐕
Mac ステータスバーアプリの右クリックと左クリックの分け方
Macのステータスバーアプリで右クリックと左クリックの挙動を分けたい
AppDelegate.swift
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidFinishedLaunching(_ notification: Notification) {
// .....
// .....
if let button = statusItem?.button {
button.image = NSImage(named: "iconImage")
button.action = #selector(self.statusBarButtonClicked(_:))
button.sendAction(on: [.leftMouseUp, .rightMouseUp])
}
// Add Menu Item for NSMenu
menu.addItem(NSMenuItem(title: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
}
@objc func statusBarButtonClicked(_ sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == NSEvent.EventType.rightMouseUp {
print("Right Click")
statusItem?.menu = menu
statusItem?.button?.performClick(nil)
// statusItem?.popUpMenu(menu)
statusItem?.menu = nil
} else {
print("Left Click")
togglePopover(sender)
}
}
}
NSEvent.EventType
でマウスの右クリックか左クリックを判別することができます。
コメントで消してありますが、popUpMenu()
は'popUpMenu' was deprecated in macOS 10.14
となっております。
popUpMenu()
でも実際にはうまく動きましたが、
statusItem?.button?.performClick(nil)
を代わりに使うと良さそうです。
これで、ポップアップと設定メニューを切り分けることができました。
最後まで読んでいただき、ありがとうございます。
参考
Discussion