@@ -1006,22 +1006,31 @@ extension MenuBarItemManager {
10061006 func tempShowItem( _ item: MenuBarItem , clickWhenFinished: Bool , mouseButton: CGMouseButton ) {
10071007 let rehideInterval : TimeInterval = 20
10081008
1009- if tempShownItemContexts. contains ( where: { $0. item. info == item. info } ) {
1010- Logger . itemManager. info ( " Item \" \( item. logString) \" is already temporarily shown, so extending timer " )
1011- runTempShownItemTimer ( for: rehideInterval)
1009+ guard
1010+ let appState,
1011+ let screen = NSScreen . main,
1012+ let applicationMenuFrame = appState. menuBarManager. getApplicationMenuFrame ( for: screen. displayID)
1013+ else {
1014+ Logger . itemManager. warning ( " No application menu frame, so not showing item \" \( item. logString) \" " )
10121015 return
10131016 }
10141017
10151018 Logger . itemManager. info ( " Temporarily showing \" \( item. logString) \" " )
10161019
1017- let items = MenuBarItem . getMenuBarItemsPrivateAPI ( onScreenOnly: false , activeSpaceOnly: true )
1020+ var items = MenuBarItem . getMenuBarItemsPrivateAPI ( onScreenOnly: false , activeSpaceOnly: true )
10181021
10191022 guard let destination = getReturnDestination ( for: item, in: items) else {
10201023 Logger . itemManager. warning ( " No return destination for item \" \( item. logString) \" " )
10211024 return
10221025 }
1023- guard let hiddenControlItem = items. first ( where: { $0. info == . hiddenControlItem } ) else {
1024- Logger . itemManager. warning ( " No hidden control item " )
1026+
1027+ items. trimPrefix { $0. info != . hiddenControlItem }
1028+ items. removeFirst ( ) // remove hidden control item
1029+ items. trimPrefix { !$0. isOnScreen }
1030+ items. trimPrefix { $0. frame. minX - item. frame. width <= applicationMenuFrame. maxX }
1031+
1032+ guard let targetItem = items. first else {
1033+ Logger . itemManager. warning ( " Not enough room to show item " )
10251034 return
10261035 }
10271036
@@ -1030,7 +1039,7 @@ extension MenuBarItemManager {
10301039 Task {
10311040 if clickWhenFinished {
10321041 do {
1033- try await slowMove ( item: item, to: . rightOfItem ( hiddenControlItem ) )
1042+ try await slowMove ( item: item, to: . leftOfItem ( targetItem ) )
10341043 switch mouseButton {
10351044 case . left:
10361045 try await leftClick ( item: item)
@@ -1046,7 +1055,7 @@ extension MenuBarItemManager {
10461055 }
10471056 } else {
10481057 do {
1049- try await move ( item: item, to: . rightOfItem ( hiddenControlItem ) )
1058+ try await move ( item: item, to: . leftOfItem ( targetItem ) )
10501059 } catch {
10511060 Logger . itemManager. error ( " ERROR: \( error) " )
10521061 }
0 commit comments