From 658dbc33accfd0a8b0050cbb622790a46646e305 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Thu, 30 Jan 2025 21:27:27 -0800 Subject: [PATCH] =?UTF-8?q?Send=20Notification=20when=20mainWindow=20will?= =?UTF-8?q?=20close=20=E2=80=94=C2=A0remove=20use=20of=20appDelegate=20pro?= =?UTF-8?q?perty.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mac/AppDelegate.swift | 14 ++++++++++++-- Mac/MainWindow/MainWindowController.swift | 8 ++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) 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