Skip to content

Commit

Permalink
Improve reliability of application menu hiding
Browse files Browse the repository at this point in the history
Fixes #60
  • Loading branch information
jordanbaird committed Jun 25, 2024
1 parent b3d871e commit 77c103c
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions Ice/MenuBar/MenuBarManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,25 +168,38 @@ final class MenuBarManager: ObservableObject {
.sink { [weak self] _ in
guard
let self,
let appState,
let appState
else {
return
}

// don't continue if:
// * the "HideApplicationMenus" setting isn't enabled
// * the menu bar is hidden by the system
// * the active space is fullscreen
// * the settings window is visible
guard
appState.settingsManager.advancedSettingsManager.hideApplicationMenus,
!isMenuBarHiddenBySystem,
!appState.isActiveSpaceFullscreen,
appState.settingsManager.advancedSettingsManager.hideApplicationMenus
appState.settingsWindow?.isVisible == false
else {
return
}
if sections.contains(where: { $0.controlItem.state != .hideItems }) {

if sections.contains(where: { $0.controlItem.state == .showItems }) {
guard let screen = NSScreen.main else {
return
}

let displayID = screen.displayID

// get the application menu frame for the display
guard let applicationMenuFrame = applicationMenuFrames[displayID] else {
guard let applicationMenuItemFrames = try? getApplicationMenuItemFrames(for: displayID) else {
return
}

let applicationMenuFrame = applicationMenuItemFrames.reduce(.zero, CGRectUnion)
let items = MenuBarItem.getMenuBarItemsCoreGraphics(for: displayID, onScreenOnly: true)

// get the leftmost item on the screen; the application menu should
Expand All @@ -204,14 +217,8 @@ final class MenuBarManager: ObservableObject {
if offsetMinX <= applicationMenuFrame.maxX {
hideApplicationMenus()
}
} else if
isHidingApplicationMenus,
appState.settingsWindow?.isVisible == false
{
Task {
try await Task.sleep(for: .milliseconds(25))
self.showApplicationMenus()
}
} else if isHidingApplicationMenus {
showApplicationMenus()
}
}
.store(in: &c)
Expand Down Expand Up @@ -326,6 +333,7 @@ final class MenuBarManager: ObservableObject {
Logger.menuBarManager.error("Error hiding application menus: Missing app state")
return
}
Logger.menuBarManager.info("Hiding application menus")
appState.activate(withPolicy: .regular)
isHidingApplicationMenus = true
}
Expand All @@ -335,6 +343,7 @@ final class MenuBarManager: ObservableObject {
Logger.menuBarManager.error("Error showing application menus: Missing app state")
return
}
Logger.menuBarManager.info("Showing application menus")
appState.deactivate(withPolicy: .accessory)
isHidingApplicationMenus = false
}
Expand Down

0 comments on commit 77c103c

Please sign in to comment.