@@ -459,6 +459,7 @@ extension VMDisplayWindowController: NSWindowDelegate {
459459 if let preventIdleSleepAssertion = preventIdleSleepAssertion {
460460 IOPMAssertionRelease ( preventIdleSleepAssertion)
461461 }
462+ cleanupMenu ( )
462463 isFinalizing = true
463464 onClose ? ( )
464465 }
@@ -542,6 +543,7 @@ extension VMDisplayWindowController {
542543 @objc func setupMainMenu( ) -> NSMenu {
543544 NotificationCenter . default. addObserver ( self , selector: #selector( windowBecameMain) , name: NSWindow . didBecomeMainNotification, object: window)
544545 NotificationCenter . default. addObserver ( self , selector: #selector( windowResignedMain) , name: NSWindow . didResignMainNotification, object: window)
546+ NotificationCenter . default. addObserver ( self , selector: #selector( menuDidRemoveItem) , name: NSMenu . didRemoveItemNotification, object: NSApp . mainMenu)
545547 let menu = NSMenu ( )
546548 menu. autoenablesItems = false
547549 stopMenuItem = NSMenuItem ( )
@@ -576,17 +578,35 @@ extension VMDisplayWindowController {
576578 return menu
577579 }
578580
579- @objc func windowBecameMain( ) {
580- if let mainMenu = NSApp . mainMenu {
581+ func cleanupMenu( ) {
582+ NotificationCenter . default. removeObserver ( self , name: NSWindow . didBecomeMainNotification, object: window)
583+ NotificationCenter . default. removeObserver ( self , name: NSWindow . didResignMainNotification, object: window)
584+ NotificationCenter . default. removeObserver ( self , name: NSMenu . didRemoveItemNotification, object: NSApp . mainMenu)
585+ if let mainMenu = NSApp . mainMenu, mainMenu. items. contains ( mainMenuItem!) {
586+ mainMenu. removeItem ( mainMenuItem)
587+ }
588+ }
589+
590+ @objc func windowBecameMain( _ notification: Notification ) {
591+ if let mainMenu = NSApp . mainMenu, !mainMenu. items. contains ( mainMenuItem) {
581592 mainMenu. insertItem ( mainMenuItem, at: 3 )
582593 }
583594 }
584595
585- @objc func windowResignedMain( ) {
586- if let mainMenu = NSApp . mainMenu {
596+ @objc func windowResignedMain( _ notification : Notification ) {
597+ if let mainMenu = NSApp . mainMenu, mainMenu . items . contains ( mainMenuItem ) {
587598 mainMenu. removeItem ( mainMenuItem)
588599 }
589600 }
601+
602+ @objc func menuDidRemoveItem( _ notification: Notification ) {
603+ guard let window = window, window. isMainWindow else {
604+ return
605+ }
606+ if let mainMenu = NSApp . mainMenu, !mainMenu. items. contains ( mainMenuItem) {
607+ mainMenu. insertItem ( mainMenuItem, at: 3 )
608+ }
609+ }
590610}
591611
592612private class LazyMenuItem : NSMenuItem , NSMenuDelegate {
0 commit comments