Popup a share menu on clicking the Share toolbar item. Fix #40.
This commit is contained in:
parent
0b2d7c6733
commit
9ec6188395
|
@ -588,7 +588,6 @@
|
|||
849A977C1ED9EC42007D329B /* Detail */,
|
||||
849A97551ED9EAC3007D329B /* Add Feed */,
|
||||
849A97411ED9EAA9007D329B /* Add Folder */,
|
||||
84AFBB3A1FBE76D800BA41CF /* PanicButton */,
|
||||
);
|
||||
name = MainWindow;
|
||||
path = Evergreen/MainWindow;
|
||||
|
@ -916,13 +915,6 @@
|
|||
path = Evergreen/Dinosaurs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
84AFBB3A1FBE76D800BA41CF /* PanicButton */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
);
|
||||
path = PanicButton;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
84B06F971ED37DA000F0B54B /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
</searchFieldCell>
|
||||
</searchField>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="C3050605-E4B0-40CB-BA19-F64DF68BCFFA" label="Share" paletteLabel="Share" toolTip="Share" image="NSShareTemplate" id="nv0-Ju-lP7" customClass="RSToolbarItem" customModule="RSCore">
|
||||
<toolbarItem implicitItemIdentifier="C3050605-E4B0-40CB-BA19-F64DF68BCFFA" explicitItemIdentifier="share" label="Share" paletteLabel="Share" toolTip="Share" image="NSShareTemplate" id="nv0-Ju-lP7" customClass="RSToolbarItem" customModule="RSCore">
|
||||
<size key="minSize" width="38" height="25"/>
|
||||
<size key="maxSize" width="38" height="27"/>
|
||||
<button key="view" verticalHuggingPriority="750" id="ypo-pI-PTN">
|
||||
|
@ -43,6 +43,9 @@
|
|||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
</button>
|
||||
<connections>
|
||||
<action selector="toolbarShowShareMenu:" target="Oky-zY-oP4" id="zUk-sS-frQ"/>
|
||||
</connections>
|
||||
</toolbarItem>
|
||||
<toolbarItem implicitItemIdentifier="3552D790-D29C-4BF2-AF02-5BEFE49C7FB9" label="New Feed" paletteLabel="New Feed" toolTip="New Feed" image="NSAddTemplate" id="Skp-5r-70Q" customClass="RSToolbarItem" customModule="RSCore">
|
||||
<size key="minSize" width="38" height="25"/>
|
||||
|
@ -198,6 +201,9 @@
|
|||
<toolbarItem reference="YMs-P5-Xhn"/>
|
||||
<toolbarItem reference="1Ql-WJ-KYi"/>
|
||||
</defaultToolbarItems>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="B8D-0N-5wS" id="hrC-d9-Cge"/>
|
||||
</connections>
|
||||
</toolbar>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="B8D-0N-5wS" id="JSn-lq-Uwe"/>
|
||||
|
|
|
@ -131,6 +131,10 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
|||
return canMarkOlderArticlesAsRead()
|
||||
}
|
||||
|
||||
if item.action == #selector(toolbarShowShareMenu(_:)) {
|
||||
return canShowShareMenu()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -265,6 +269,57 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
|||
|
||||
sidebarViewController?.outlineView.selectNextRow(sender)
|
||||
}
|
||||
|
||||
@IBAction func toolbarShowShareMenu(_ sender: Any?) {
|
||||
|
||||
guard let selectedArticles = selectedArticles, !selectedArticles.isEmpty else {
|
||||
assertionFailure("Expected toolbarShowShareMenu to be called only when there are selected articles.")
|
||||
return
|
||||
}
|
||||
guard let shareToolbarItem = shareToolbarItem else {
|
||||
assertionFailure("Expected toolbarShowShareMenu to be called only by the Share item in the toolbar.")
|
||||
return
|
||||
}
|
||||
guard let view = shareToolbarItem.view else {
|
||||
// TODO: handle menu form representation
|
||||
return
|
||||
}
|
||||
|
||||
let items = selectedArticles.map { ArticlePasteboardWriter(article: $0) }
|
||||
let sharingServicePicker = NSSharingServicePicker(items: items)
|
||||
sharingServicePicker.show(relativeTo: view.bounds, of: view, preferredEdge: .minY)
|
||||
}
|
||||
|
||||
private func canShowShareMenu() -> Bool {
|
||||
|
||||
guard let selectedArticles = selectedArticles else {
|
||||
return false
|
||||
}
|
||||
return !selectedArticles.isEmpty
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - NSToolbarDelegate
|
||||
|
||||
extension NSToolbarItem.Identifier {
|
||||
static let Share = NSToolbarItem.Identifier("share")
|
||||
}
|
||||
|
||||
extension MainWindowController: NSToolbarDelegate {
|
||||
|
||||
func toolbarWillAddItem(_ notification: Notification) {
|
||||
|
||||
// The share button should send its action on mouse down, not mouse up.
|
||||
|
||||
guard let item = notification.userInfo?["item"] as? NSToolbarItem else {
|
||||
return
|
||||
}
|
||||
guard item.itemIdentifier == .Share, let button = item.view as? NSButton else {
|
||||
return
|
||||
}
|
||||
|
||||
button.sendAction(on: .leftMouseDown)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
@ -359,6 +414,25 @@ private extension MainWindowController {
|
|||
}
|
||||
}
|
||||
|
||||
// MARK: - Toolbar
|
||||
|
||||
private var shareToolbarItem: NSToolbarItem? {
|
||||
return existingToolbarItem(identifier: .Share)
|
||||
}
|
||||
|
||||
func existingToolbarItem(identifier: NSToolbarItem.Identifier) -> NSToolbarItem? {
|
||||
|
||||
guard let toolbarItems = window?.toolbar?.items else {
|
||||
return nil
|
||||
}
|
||||
for toolbarItem in toolbarItems {
|
||||
if toolbarItem.itemIdentifier == identifier {
|
||||
return toolbarItem
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// MARK: - Navigation
|
||||
|
||||
func handleRightArrowFunctionKey(in view: NSView) {
|
||||
|
|
Loading…
Reference in New Issue