@@ -459,6 +459,7 @@ extension VMDisplayWindowController: NSWindowDelegate {
459
459
if let preventIdleSleepAssertion = preventIdleSleepAssertion {
460
460
IOPMAssertionRelease ( preventIdleSleepAssertion)
461
461
}
462
+ cleanupMenu ( )
462
463
isFinalizing = true
463
464
onClose ? ( )
464
465
}
@@ -542,6 +543,7 @@ extension VMDisplayWindowController {
542
543
@objc func setupMainMenu( ) -> NSMenu {
543
544
NotificationCenter . default. addObserver ( self , selector: #selector( windowBecameMain) , name: NSWindow . didBecomeMainNotification, object: window)
544
545
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)
545
547
let menu = NSMenu ( )
546
548
menu. autoenablesItems = false
547
549
stopMenuItem = NSMenuItem ( )
@@ -576,17 +578,35 @@ extension VMDisplayWindowController {
576
578
return menu
577
579
}
578
580
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) {
581
592
mainMenu. insertItem ( mainMenuItem, at: 3 )
582
593
}
583
594
}
584
595
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 ) {
587
598
mainMenu. removeItem ( mainMenuItem)
588
599
}
589
600
}
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
+ }
590
610
}
591
611
592
612
private class LazyMenuItem : NSMenuItem , NSMenuDelegate {
0 commit comments