diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index b52075f28..2b035300d 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -363,15 +363,17 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, } @objc func userDefaultsDidChange(_ note: Notification) { - updateSortMenuItems() - updateGroupByFeedMenuItem() - - if lastRefreshInterval != AppDefaults.shared.refreshInterval { - refreshTimer?.update() - lastRefreshInterval = AppDefaults.shared.refreshInterval + Task { @MainActor in + updateSortMenuItems() + updateGroupByFeedMenuItem() + + if lastRefreshInterval != AppDefaults.shared.refreshInterval { + refreshTimer?.update() + lastRefreshInterval = AppDefaults.shared.refreshInterval + } + + updateDockBadge() } - - updateDockBadge() } @objc func didWakeNotification(_ note: Notification) { @@ -504,8 +506,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, // MARK: - Dock Badge @objc func updateDockBadge() { - let label = unreadCount > 0 ? "\(unreadCount)" : "" - NSApplication.shared.dockTile.badgeLabel = label + Task { @MainActor in + let label = unreadCount > 0 ? "\(unreadCount)" : "" + NSApplication.shared.dockTile.badgeLabel = label + } } // MARK: - Actions @@ -768,13 +772,13 @@ internal extension AppDelegate { inspectorWindowController?.saveState() } - func updateSortMenuItems() { + @MainActor func updateSortMenuItems() { let sortByNewestOnTop = AppDefaults.shared.timelineSortDirection == .orderedDescending sortByNewestArticleOnTopMenuItem.state = sortByNewestOnTop ? .on : .off sortByOldestArticleOnTopMenuItem.state = sortByNewestOnTop ? .off : .on } - func updateGroupByFeedMenuItem() { + @MainActor func updateGroupByFeedMenuItem() { let groupByFeedEnabled = AppDefaults.shared.timelineGroupByFeed groupArticlesByFeedMenuItem.state = groupByFeedEnabled ? .on : .off } diff --git a/Mac/MainWindow/Detail/DetailViewController.swift b/Mac/MainWindow/Detail/DetailViewController.swift index 4a84a3f48..f096d0f5c 100644 --- a/Mac/MainWindow/Detail/DetailViewController.swift +++ b/Mac/MainWindow/Detail/DetailViewController.swift @@ -159,9 +159,11 @@ private extension DetailViewController { } @objc func userDefaultsDidChange(_ : Notification) { - if AppDefaults.shared.isArticleContentJavascriptEnabled != isArticleContentJavascriptEnabled { - isArticleContentJavascriptEnabled = AppDefaults.shared.isArticleContentJavascriptEnabled - createNewWebViewsAndRestoreState() + Task { @MainActor in + if AppDefaults.shared.isArticleContentJavascriptEnabled != isArticleContentJavascriptEnabled { + isArticleContentJavascriptEnabled = AppDefaults.shared.isArticleContentJavascriptEnabled + createNewWebViewsAndRestoreState() + } } } diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 8d194ea26..51b3dd616 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -665,9 +665,11 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr } @objc func userDefaultsDidChange(_ note: Notification) { - self.fontSize = AppDefaults.shared.timelineFontSize - self.sortDirection = AppDefaults.shared.timelineSortDirection - self.groupByFeed = AppDefaults.shared.timelineGroupByFeed + Task { @MainActor in + self.fontSize = AppDefaults.shared.timelineFontSize + self.sortDirection = AppDefaults.shared.timelineSortDirection + self.groupByFeed = AppDefaults.shared.timelineGroupByFeed + } } // MARK: - Reloading Data diff --git a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift index 296f2c876..aa83a6bd9 100644 --- a/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift +++ b/Mac/Preferences/Advanced/AdvancedPreferencesViewController.swift @@ -50,7 +50,7 @@ final class AdvancedPreferencesViewController: NSViewController { private extension AdvancedPreferencesViewController { - func updateUI() { + @MainActor func updateUI() { if wantsTestBuilds { testBuildsButton.state = .on } diff --git a/iOS/MainTimeline/MainTimelineViewController.swift b/iOS/MainTimeline/MainTimelineViewController.swift index c4d4d8412..76bf47f30 100644 --- a/iOS/MainTimeline/MainTimelineViewController.swift +++ b/iOS/MainTimeline/MainTimelineViewController.swift @@ -508,7 +508,7 @@ class MainTimelineViewController: UITableViewController, UndoableCommandRunner { } @objc func userDefaultsDidChange(_ note: Notification) { - DispatchQueue.main.async { + Task { @MainActor in if self.numberOfTextLines != AppDefaults.shared.timelineNumberOfLines || self.iconSize != AppDefaults.shared.timelineIconSize { self.numberOfTextLines = AppDefaults.shared.timelineNumberOfLines self.iconSize = AppDefaults.shared.timelineIconSize @@ -518,7 +518,7 @@ class MainTimelineViewController: UITableViewController, UndoableCommandRunner { self.updateToolbar() } } - + @objc func contentSizeCategoryDidChange(_ note: Notification) { reloadAllVisibleCells() } diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 2b6ebf9d0..213305258 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -493,8 +493,10 @@ class SceneCoordinator: NSObject, UndoableCommandRunner { } @objc func userDefaultsDidChange(_ note: Notification) { - self.sortDirection = AppDefaults.shared.timelineSortDirection - self.groupByFeed = AppDefaults.shared.timelineGroupByFeed + Task { @MainActor in + self.sortDirection = AppDefaults.shared.timelineSortDirection + self.groupByFeed = AppDefaults.shared.timelineGroupByFeed + } } @objc func accountDidDownloadArticles(_ note: Notification) { diff --git a/iOS/SceneDelegate.swift b/iOS/SceneDelegate.swift index e7bb4be4c..758f21071 100644 --- a/iOS/SceneDelegate.swift +++ b/iOS/SceneDelegate.swift @@ -234,22 +234,19 @@ private extension SceneDelegate { } @objc func userDefaultsDidChange() { - updateUserInterfaceStyle() - } - - func updateUserInterfaceStyle() { - DispatchQueue.main.async { - switch AppDefaults.userInterfaceColorPalette { - case .automatic: - self.window?.overrideUserInterfaceStyle = .unspecified - case .light: - self.window?.overrideUserInterfaceStyle = .light - case .dark: - self.window?.overrideUserInterfaceStyle = .dark - } + Task { + updateUserInterfaceStyle() + } + } + + @MainActor func updateUserInterfaceStyle() { + switch AppDefaults.userInterfaceColorPalette { + case .automatic: + self.window?.overrideUserInterfaceStyle = .unspecified + case .light: + self.window?.overrideUserInterfaceStyle = .light + case .dark: + self.window?.overrideUserInterfaceStyle = .dark } } - - - }