1 Commits
Author SHA1 Message Date
TZGyn e465acba12 Close the panel when a tray item is selected
Selecting a tile opened the app's menu while SimpleTopBar's own panel
stayed on top of it, and could leave menus such as Spotlight stranded
behind it. Dismiss the panel first so the selected menu is unobstructed.

💘 Generated with Crush

Assisted-by: Crush:deepseek-v4.1-flash
2026-09-27 10:26:09 +08:00
4 changed files with 19 additions and 1 deletions
+3
View File
@@ -141,6 +141,9 @@ preferred position controls where the hidden/kept boundary lands:
(`kAXPressAction`, then `kAXShowMenuAction`), and `resume()`s ~0.1s later. The
menu is its own window anchored at the item's on-screen spot, so it survives
re-hiding.
- `press` first calls `onWillPress`, which `AppDelegate` wires to close the
popover. Without it the panel stays open on top of the menu that opens and can
leave menus (e.g. Spotlight) stranded behind it.
- **Cannot reveal a single icon.** The spacer hides a contiguous block to its
left, so a press can only reveal the whole block. Isolating one item would
need either per-item ordering control (not available) or covering the icons
+8
View File
@@ -132,6 +132,14 @@ final class AppDelegate: NSObject, NSApplicationDelegate {
)
)
self.popover = popover
// Selecting a tray item must dismiss our panel, otherwise it stays on
// top of the menu that opens (and can strand menus behind it).
Task { @MainActor [weak self] in
MenuBarItemManager.shared.onWillPress = {
self?.popover?.performClose(nil)
}
}
}
@objc private func togglePopover() {
+7
View File
@@ -30,6 +30,9 @@ final class MenuBarItemManager: ObservableObject {
private var observers: [NSObjectProtocol] = []
/// Called just before pressing an item so the owner can close its panel.
var onWillPress: (() -> Void)?
private init() {}
func start() {
@@ -113,6 +116,10 @@ final class MenuBarItemManager: ObservableObject {
/// hide again shortly after. The reveal is momentary rather than lasting the
/// whole time the panel is open.
func press(_ item: MenuBarItem) {
// Close our own panel first, otherwise it stays open on top of the
// menu that is about to appear (and can leave menus behind it).
onWillPress?()
let hider = MenuBarHider.shared
let needsReveal = hider.isHiding
guard needsReveal else {
+1 -1
View File
@@ -2,7 +2,7 @@
set -euo pipefail
cd "$(dirname "$0")"
VERSION="${1:-0.4.2}"
VERSION="${1:-0.4.3}"
swift build -c release