From 4491c5f443a9476d92f959e96a5daed380292f7d Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Wed, 7 Feb 2018 13:25:17 -0800 Subject: [PATCH] Make the sidebar contextual menu refer to the clicked row rather than the selected row. --- .../Sidebar/SidebarContextualMenuDelegate.swift | 2 +- .../Sidebar/SidebarGearMenuDelegate.swift | 7 +++---- .../MainWindow/Sidebar/SidebarViewController.swift | 13 +++++++++++++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Evergreen/MainWindow/Sidebar/SidebarContextualMenuDelegate.swift b/Evergreen/MainWindow/Sidebar/SidebarContextualMenuDelegate.swift index bec219b97..1c2944646 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarContextualMenuDelegate.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarContextualMenuDelegate.swift @@ -20,7 +20,7 @@ import AppKit menu.removeAllItems() - guard let contextualMenu = sidebarViewController.contextualMenuForSelectedObjects() else { + guard let contextualMenu = sidebarViewController.contextualMenuForClickedRows() else { return } diff --git a/Evergreen/MainWindow/Sidebar/SidebarGearMenuDelegate.swift b/Evergreen/MainWindow/Sidebar/SidebarGearMenuDelegate.swift index 1d33f3e37..a363f1804 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarGearMenuDelegate.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarGearMenuDelegate.swift @@ -14,10 +14,6 @@ import AppKit public func menuNeedsUpdate(_ menu: NSMenu) { - guard let sidebarViewController = sidebarViewController else { - return - } - // Save the first item, since it’s the gear icon itself. guard let gearMenuItem = menu.item(at: 0) else { assertionFailure("Expected sidebar gear menu to have at least one item.") @@ -26,6 +22,9 @@ import AppKit menu.removeAllItems() menu.addItem(gearMenuItem) + guard let sidebarViewController = sidebarViewController else { + return + } guard let contextualMenu = sidebarViewController.contextualMenuForSelectedObjects() else { return } diff --git a/Evergreen/MainWindow/Sidebar/SidebarViewController.swift b/Evergreen/MainWindow/Sidebar/SidebarViewController.swift index 38c53323f..9ca5fb51d 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarViewController.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarViewController.swift @@ -200,6 +200,19 @@ import RSCore return menu(for: selectedObjects) } + func contextualMenuForClickedRows() -> NSMenu? { + + // TODO: If the clickedRow is part of the selected rows, then do a contextual menu for all the selected rows. + + let row = outlineView.clickedRow + guard row != -1, let node = nodeForRow(row) else { + return nil + } + + let object = node.representedObject + return menu(for: [object]) + } + // MARK: NSOutlineViewDelegate func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {