diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index d866b2511..7cb1edc7a 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -227,6 +227,14 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { return true } + + if item.action == #selector(showAddFeedWindow(_:)) { + return canAddNewFeed() + } + + if item.action == #selector(showAddFolderWindow(_:)) { + return canAddNewFolder() + } return true } @@ -591,6 +599,14 @@ private extension MainWindowController { return currentTimelineViewController?.canMarkAllAsRead() ?? false } + + func canAddNewFeed() -> Bool { + return sidebarViewController?.canAddNewFeed() ?? false + } + + func canAddNewFolder() -> Bool { + return sidebarViewController?.canAddNewFolder() ?? false + } func validateToggleRead(_ item: NSValidatedUserInterfaceItem) -> Bool { diff --git a/Mac/MainWindow/Sidebar/SidebarViewController.swift b/Mac/MainWindow/Sidebar/SidebarViewController.swift index 8e2be6b86..3489172df 100644 --- a/Mac/MainWindow/Sidebar/SidebarViewController.swift +++ b/Mac/MainWindow/Sidebar/SidebarViewController.swift @@ -345,10 +345,9 @@ protocol SidebarDelegate: class { // MARK: - API func rebuildTreeAndRestoreSelection() { - - let savedAccounts = treeController.rootNode.childNodes.compactMap { $0.representedObject as? Account } - + let savedAccounts = accountNodes let savedSelection = selectedNodes + rebuildTreeAndReloadDataIfNeeded() restoreSelection(to: savedSelection, sendNotificationIfChanged: true) @@ -361,6 +360,15 @@ protocol SidebarDelegate: class { } } + + func canAddNewFeed() -> Bool { + return !accountNodes.isEmpty + } + + func canAddNewFolder() -> Bool { + return !accountNodes.isEmpty + } + } // MARK: - NSUserInterfaceValidations @@ -380,6 +388,10 @@ extension SidebarViewController: NSUserInterfaceValidations { private extension SidebarViewController { + var accountNodes: [Account] { + return treeController.rootNode.childNodes.compactMap { $0.representedObject as? Account } + } + var selectedNodes: [Node] { if let nodes = outlineView.selectedItems as? [Node] { return nodes