diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index 8f708c2c7..8b7cdac23 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -63,6 +63,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, var isShutDownSyncDone = false + @IBOutlet var shareMenuItem: NSMenuItem! + @IBOutlet var fileMenuItem: NSMenuItem! @IBOutlet var debugMenuItem: NSMenuItem! @IBOutlet var sortByOldestArticleOnTopMenuItem: NSMenuItem! @IBOutlet var sortByNewestArticleOnTopMenuItem: NSMenuItem! @@ -217,6 +219,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, mainWindowController.restoreStateFromUserDefaults() } + fileMenuItem.submenu?.delegate = self + shareMenuItem.submenu?.delegate = self + if isFirstRun { mainWindowController?.window?.center() } @@ -725,6 +730,26 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, } +// MARK: - NSMenuDelegate + +extension AppDelegate: NSMenuDelegate { + + public func menuNeedsUpdate(_ menu: NSMenu) { + let newShareMenu = mainWindowController?.shareMenu + + guard menu != fileMenuItem.submenu else { + shareMenuItem.isEnabled = newShareMenu != nil + return + } + + menu.removeAllItems() + if let newShareMenu = newShareMenu { + menu.takeItems(from: newShareMenu) + } + } + +} + // MARK: - Debug Menu extension AppDelegate { diff --git a/Mac/Base.lproj/Main.storyboard b/Mac/Base.lproj/Main.storyboard index dec5b9c47..90758a355 100644 --- a/Mac/Base.lproj/Main.storyboard +++ b/Mac/Base.lproj/Main.storyboard @@ -65,7 +65,7 @@ - + @@ -104,6 +104,17 @@ + + + + + + + + + + + @@ -685,7 +696,9 @@ + + diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 93a1d717c..64dd77e59 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -57,6 +57,10 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { } private var searchSmartFeed: SmartFeed? = nil private var restoreArticleWindowScrollY: CGFloat? + + var shareMenu: NSMenu? { + return currentTimelineViewController?.shareMenu + } // MARK: - NSWindowController diff --git a/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift b/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift index dd83afdcb..4a50eadf7 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift @@ -13,6 +13,10 @@ import Account extension TimelineViewController { + var shareMenu: NSMenu? { + return shareMenu(for: selectedArticles) + } + func contextualMenuForClickedRows() -> NSMenu? { let row = tableView.clickedRow @@ -26,6 +30,7 @@ extension TimelineViewController { } return menu(for: [article]) } + } // MARK: Contextual Menu Actions diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 5ac692dc4..f7ecacf68 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -2399,12 +2399,12 @@ 516AE9DE2372269A007DEEAA /* IconImage.swift */, 849A97971ED9EFAA007D329B /* Node-Extensions.swift */, B24E9ABA245AB88300DA5718 /* NSAttributedString+NetNewsWire.swift */, + 519279F728E23F5F000AE856 /* NSEvent-Extensions.swift */, 8405DD9B22153BD7008CE1BF /* NSView-Extensions.swift */, B2B8075D239C49D300F191E0 /* RSImage-AppIcons.swift */, 51126DA3225FDE2F00722696 /* RSImage-Extensions.swift */, 84411E701FE5FBFA004B527F /* SmallIconProvider.swift */, 51BC4ADD247277DF000A6ED8 /* URL-Extensions.swift */, - 519279F728E23F5F000AE856 /* NSEvent-Extensions.swift */, ); path = Extensions; sourceTree = "";