@@ -168,7 +168,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
169 private func showContextMenu() {
169 private func showContextMenu() {
170 if popover.isShown {
170 if popover.isShown {
171− closePopover()
171+ popover.performClose(nil)
174 let menu = NSMenu()
174 let menu = NSMenu()
@@ -209,18 +209,19 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
210 // MARK: - Popover
210 // MARK: - Popover
212+ /// Shows the popover if it isn't already visible.
214+ /// We don't toggle: the popover has `.transient` behavior, which closes it
215+ /// automatically when the user clicks outside it — including on the status
216+ /// item. By the time our `.leftMouseUp` action fires, a previously-shown
217+ /// popover has already closed, so `isShown` is `false` and a toggle would
218+ /// reopen it instead of dismissing it. Always showing means the first click
219+ /// opens and `.transient` handles the rest.
212 private func togglePopover() {
220 private func togglePopover() {
213 guard let button = statusItem.button else { return }
221 guard let button = statusItem.button else { return }
214− if popover.isShown {
222+ guard !popover.isShown else { return }
217− popover.show(relativeTo: button.bounds, of: button, preferredEdge: .minY)
223+ popover.show(relativeTo: button.bounds, of: button, preferredEdge: .minY)
218− NSApp.activate(ignoringOtherApps: true)
224+ NSApp.activate(ignoringOtherApps: true)
222− private func closePopover() {
223− popover.performClose(nil)