diff --git a/Mac/AppAssets.swift b/Mac/AppAssets.swift index 5d7534cbb..2762a3a57 100644 --- a/Mac/AppAssets.swift +++ b/Mac/AppAssets.swift @@ -142,6 +142,11 @@ struct AppAssets { return NSImage(systemSymbolName: "circle", accessibilityDescription: nil)! }() + @available(macOS 10.16, *) + static var refreshImage: RSImage = { + return NSImage(systemSymbolName: "arrow.clockwise", accessibilityDescription: nil)! + }() + static var searchFeedImage: IconImage = { return IconImage(RSImage(named: NSImage.smartBadgeTemplateName)!, isSymbol: true) }() diff --git a/Mac/Base.lproj/MainWindow.storyboard b/Mac/Base.lproj/MainWindow.storyboard index be30e5f2a..c63a8b65a 100644 --- a/Mac/Base.lproj/MainWindow.storyboard +++ b/Mac/Base.lproj/MainWindow.storyboard @@ -255,133 +255,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -430,7 +303,7 @@ - + - + @@ -766,23 +639,16 @@ - - - - - - + + + - - - - diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 1711574a4..b8e36387f 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -62,6 +62,14 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { sharingServicePickerDelegate = SharingServicePickerDelegate(self.window) if #available(macOS 10.16, *) { + DispatchQueue.main.async { + let toolbar = NSToolbar(identifier: "MainWindowToolbar") + toolbar.allowsUserCustomization = true +// toolbar.autosavesConfiguration = true + toolbar.displayMode = .iconOnly + toolbar.delegate = self + self.window?.toolbar = toolbar + } } else { if !AppDefaults.shared.showTitleOnMainWindow { window?.titleVisibility = .hidden @@ -91,7 +99,7 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil) - + DispatchQueue.main.async { self.updateWindowTitle() } @@ -700,25 +708,78 @@ extension NSToolbarItem.Identifier { static let readerView = NSToolbarItem.Identifier("readerView") static let openInBrowser = NSToolbarItem.Identifier("openInBrowser") static let share = NSToolbarItem.Identifier("share") + static let cleanUp = NSToolbarItem.Identifier("cleanUp") } extension MainWindowController: NSToolbarDelegate { func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? { - if #available(macOS 10.16, *), itemIdentifier == .newSidebarItemMenu { - let menuToolbarItem = NSMenuToolbarItem(itemIdentifier: .newSidebarItemMenu) - menuToolbarItem.image = AppAssets.addNewSidebarItemImage - menuToolbarItem.menu = buildNewSidebarItemMenu() - return menuToolbarItem - } - - if #available(macOS 10.16, *), itemIdentifier == .timelineTrackingSeparator { - return NSTrackingSeparatorToolbarItem(identifier: .timelineTrackingSeparator, splitView: splitViewController!.splitView, dividerIndex: 1) + if #available(macOS 10.16, *) { + + switch itemIdentifier { + + case .refresh: + let title = NSLocalizedString("Refresh", comment: "Refresh") + return toolbarButton(.refresh, title, AppAssets.refreshImage, "refreshAll:") + + case .newSidebarItemMenu: + let toolbarItem = NSMenuToolbarItem(itemIdentifier: .newSidebarItemMenu) + toolbarItem.image = AppAssets.addNewSidebarItemImage + let description = NSLocalizedString("Add Item", comment: "Add Item") + toolbarItem.toolTip = description + toolbarItem.label = description + toolbarItem.menu = buildNewSidebarItemMenu() + return toolbarItem + + case .timelineTrackingSeparator: + return NSTrackingSeparatorToolbarItem(identifier: .timelineTrackingSeparator, splitView: splitViewController!.splitView, dividerIndex: 1) + + default: + break + } + } return nil } + func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { + if #available(macOS 10.16, *) { + return [ + .refresh, + .newSidebarItemMenu, + .sidebarTrackingSeparator, +// .search, +// .markAllAsRead, + .timelineTrackingSeparator, + .flexibleSpace, +// .nextUnread, +// .markRead, +// .markStar, +// .openInBrowser, +// .share, +// .cleanUp + ] + } else { + return [ + .newFeed, + .newFolder, + .refresh, + .flexibleSpace, + .markAllAsRead, + .search, + .flexibleSpace, + .nextUnread, + .markStar, + .markRead, + .readerView, + .openInBrowser, + .share, + .cleanUp + ] + } + } + func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { if #available(macOS 10.16, *) { return [ @@ -726,14 +787,14 @@ extension MainWindowController: NSToolbarDelegate { .newSidebarItemMenu, .sidebarTrackingSeparator, // .search, - .markAllAsRead, +// .markAllAsRead, .timelineTrackingSeparator, .flexibleSpace, - .nextUnread, - .markRead, - .markStar, - .openInBrowser, - .share +// .nextUnread, +// .markRead, +// .markStar, +// .openInBrowser, +// .share ] } else { return [ @@ -1121,6 +1182,21 @@ private extension MainWindowController { splitView.setPosition(CGFloat(sidebarWidth + dividerThickness + timelineWidth), ofDividerAt: 1) } + func toolbarButton(_ itemIdentifier: NSToolbarItem.Identifier, _ title: String, _ image: NSImage, _ selector: String) -> NSToolbarItem { + let toolbarItem = RSToolbarItem(itemIdentifier: itemIdentifier) + toolbarItem.autovalidates = true + + let button = NSButton() + button.bezelStyle = .texturedRounded + button.image = image + button.toolTip = title + button.action = Selector((selector)) + + toolbarItem.view = button + toolbarItem.label = title + return toolbarItem + } + func buildNewSidebarItemMenu() -> NSMenu { let menu = NSMenu()