@@ -197,23 +197,35 @@ extension CBContentView: CBCollectionViewDelegate {
197197
198198 let menu = NSMenu ( )
199199
200- let favoriteTitle : String = item. isFavorited ? . localized( " Unfavorite " ) : . localized( " Favorite " )
201- let favoriteItem = NSMenuItem ( title: favoriteTitle, action: #selector( _handleFavoriteMenuItem ( _: ) ) , keyEquivalent: " f " )
200+ let previewItem = NSMenuItem ( title: . localized( " Preview " ) , action: #selector( _handlePreviewItem ( _: ) ) , keyEquivalent: " p " )
201+ previewItem. target = self
202+ previewItem. representedObject = indexPath
203+ menu. addItem ( previewItem)
204+
205+ menu. addItem ( NSMenuItem . separator ( ) )
206+
207+ let favoriteItem = NSMenuItem ( title: item. isFavorited ? . localized( " Unfavorite " ) : . localized( " Favorite " ) , action: #selector( _handleFavoriteMenuItem ( _: ) ) , keyEquivalent: " f " )
202208 favoriteItem. target = self
203209 favoriteItem. representedObject = item
204210 menu. addItem ( favoriteItem)
205211
206212 menu. addItem ( NSMenuItem . separator ( ) )
207213
214+ let copyParentItem = NSMenuItem ( title: . localized( " Copy " ) , action: nil , keyEquivalent: " " )
215+ let copySubmenu = NSMenu ( )
216+
208217 let copyItem = NSMenuItem ( title: . localized( " Copy " ) , action: #selector( _handleCopyMenuItem ( _: ) ) , keyEquivalent: " " )
209218 copyItem. target = self
210219 copyItem. representedObject = item
211- menu . addItem ( copyItem)
212-
220+ copySubmenu . addItem ( copyItem)
221+
213222 let copyPlainItem = NSMenuItem ( title: . localized( " Copy Without Formatting " ) , action: #selector( _handleCopyPlainMenuItem ( _: ) ) , keyEquivalent: " " )
214223 copyPlainItem. target = self
215224 copyPlainItem. representedObject = item
216- menu. addItem ( copyPlainItem)
225+ copySubmenu. addItem ( copyPlainItem)
226+
227+ copyParentItem. submenu = copySubmenu
228+ menu. addItem ( copyParentItem)
217229
218230 menu. addItem ( NSMenuItem . separator ( ) )
219231
@@ -243,6 +255,11 @@ extension CBContentView: CBCollectionViewDelegate {
243255 guard let object = sender. representedObject as? CBObject else { return }
244256 _copyItem ( for: object, asPlain: true )
245257 }
258+ /// Helper function for preview, for NSMenuItem
259+ @objc private func _handlePreviewItem( _ sender: NSMenuItem ) {
260+ guard let object = sender. representedObject as? IndexPath else { return }
261+ _previewItem ( for: object)
262+ }
246263 /// Deletes history object entirely.
247264 /// - Parameter object: History object
248265 private func _deleteItem( for object: CBObject ) {
@@ -259,6 +276,11 @@ extension CBContentView: CBCollectionViewDelegate {
259276 private func _favoriteItem( for object: CBObject ) {
260277 StorageManager . shared. toggleFavoriteHistory ( for: object)
261278 }
279+ /// Preview history item.
280+ /// - Parameter indexPath: indexPath
281+ private func _previewItem( for indexPath: IndexPath ) {
282+ ( collectionView as? CBCollectionView ) ? . showPreviewPopover ( for: indexPath)
283+ }
262284}
263285
264286// MARK: - CBContentView (Extension): CBSearchDelegate
0 commit comments