diff --git a/Evergreen/MainWindow/Timeline/ArticlePasteboardWriter.swift b/Evergreen/MainWindow/Timeline/ArticlePasteboardWriter.swift index a3f904b05..a34d5147c 100644 --- a/Evergreen/MainWindow/Timeline/ArticlePasteboardWriter.swift +++ b/Evergreen/MainWindow/Timeline/ArticlePasteboardWriter.swift @@ -8,6 +8,14 @@ import AppKit import Data +import RSCore + +extension Article: PasteboardWriterOwner { + + public var pasteboardWriter: NSPasteboardWriting { + return ArticlePasteboardWriter(article: self) + } +} @objc final class ArticlePasteboardWriter: NSObject, NSPasteboardWriting { diff --git a/Evergreen/MainWindow/Timeline/TimelineViewController.swift b/Evergreen/MainWindow/Timeline/TimelineViewController.swift index a885c36ff..8267e5738 100644 --- a/Evergreen/MainWindow/Timeline/TimelineViewController.swift +++ b/Evergreen/MainWindow/Timeline/TimelineViewController.swift @@ -214,6 +214,11 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { runCommand(markUnreadCommand) } + @IBAction func copy(_ sender: Any?) { + + NSPasteboard.general.copyObjects(selectedArticles) + } + func markOlderArticlesAsRead() { // Mark articles the same age or older than the selected article(s) as read. @@ -422,6 +427,19 @@ class TimelineViewController: NSViewController, UndoableCommandRunner { } } +// MARK: NSUserInterfaceValidations + +extension TimelineViewController: NSUserInterfaceValidations { + + func validateUserInterfaceItem(_ item: NSValidatedUserInterfaceItem) -> Bool { + + if item.action == #selector(copy(_:)) { + return NSPasteboard.general.canCopyAtLeastOneObject(selectedArticles) + } + return true + } +} + // MARK: - NSTableViewDataSource extension TimelineViewController: NSTableViewDataSource {