diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index 6b65a8b21..f4984280b 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -110,6 +110,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidat NotificationCenter.default.addObserver(self, selector: #selector(inspectableObjectsDidChange(_:)), name: .InspectableObjectsDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(importDownloadedTheme(_:)), name: .didEndDownloadingTheme, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(themeImportError(_:)), name: .didFailToImportThemeWithError, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(mainWindowWillClose(_:)), name: .mainWindowControllerWillClose, object: nil) NSWorkspace.shared.notificationCenter.addObserver(self, selector: #selector(didWakeNotification(_:)), name: NSWorkspace.didWakeNotification, object: nil) appDelegate = self @@ -297,7 +298,8 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidat while !isShutDownSyncDone && RunLoop.current.run(mode: .default, before: timeout) && timeout > Date() { } } - // MARK: Notifications + // MARK: - Notifications + @objc func unreadCountDidChange(_ note: Notification) { if note.object is AccountManager { unreadCount = AccountManager.shared.unreadCount @@ -346,6 +348,14 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidat } } + @objc func mainWindowWillClose(_ note: Notification) { + + guard let mainWindowController = note.object as? MainWindowController else { + return + } + removeMainWindowController(mainWindowController) + } + // MARK: Main Window func createMainWindowController() -> MainWindowController { @@ -384,7 +394,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidat } } - func removeMainWindow(_ windowController: MainWindowController) { + func removeMainWindowController(_ windowController: MainWindowController) { guard mainWindowControllers.count > 1 else { return } if let index = mainWindowControllers.firstIndex(of: windowController) { mainWindowControllers.remove(at: index) diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 29e18b781..24505e3cb 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -12,6 +12,10 @@ import Articles import Account import RSCore +extension Notification.Name { + static let mainWindowControllerWillClose = Notification.Name("mainWindowControllerWillClose") +} + enum TimelineSourceMode { case regular, search } @@ -524,6 +528,7 @@ final class MainWindowController: NSWindowController, NSUserInterfaceValidations // MARK: NSWindowDelegate + extension MainWindowController: NSWindowDelegate { func window(_ window: NSWindow, willEncodeRestorableState coder: NSCoder) { @@ -537,9 +542,8 @@ extension MainWindowController: NSWindowDelegate { func windowWillClose(_ notification: Notification) { detailViewController?.stopMediaPlayback() - appDelegate.removeMainWindow(self) + NotificationCenter.default.post(name: .mainWindowControllerWillClose, object: self) } - } // MARK: - SidebarDelegate