@@ -1006,22 +1006,31 @@ extension MenuBarItemManager {
1006
1006
func tempShowItem( _ item: MenuBarItem , clickWhenFinished: Bool , mouseButton: CGMouseButton ) {
1007
1007
let rehideInterval : TimeInterval = 20
1008
1008
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) \" " )
1012
1015
return
1013
1016
}
1014
1017
1015
1018
Logger . itemManager. info ( " Temporarily showing \" \( item. logString) \" " )
1016
1019
1017
- let items = MenuBarItem . getMenuBarItemsPrivateAPI ( onScreenOnly: false , activeSpaceOnly: true )
1020
+ var items = MenuBarItem . getMenuBarItemsPrivateAPI ( onScreenOnly: false , activeSpaceOnly: true )
1018
1021
1019
1022
guard let destination = getReturnDestination ( for: item, in: items) else {
1020
1023
Logger . itemManager. warning ( " No return destination for item \" \( item. logString) \" " )
1021
1024
return
1022
1025
}
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 " )
1025
1034
return
1026
1035
}
1027
1036
@@ -1030,7 +1039,7 @@ extension MenuBarItemManager {
1030
1039
Task {
1031
1040
if clickWhenFinished {
1032
1041
do {
1033
- try await slowMove ( item: item, to: . rightOfItem ( hiddenControlItem ) )
1042
+ try await slowMove ( item: item, to: . leftOfItem ( targetItem ) )
1034
1043
switch mouseButton {
1035
1044
case . left:
1036
1045
try await leftClick ( item: item)
@@ -1046,7 +1055,7 @@ extension MenuBarItemManager {
1046
1055
}
1047
1056
} else {
1048
1057
do {
1049
- try await move ( item: item, to: . rightOfItem ( hiddenControlItem ) )
1058
+ try await move ( item: item, to: . leftOfItem ( targetItem ) )
1050
1059
} catch {
1051
1060
Logger . itemManager. error ( " ERROR: \( error) " )
1052
1061
}
0 commit comments