diff --git a/Evergreen/Base.lproj/RenameSheet.xib b/Evergreen/Base.lproj/RenameSheet.xib
index ea16cc5e9..d9462606f 100644
--- a/Evergreen/Base.lproj/RenameSheet.xib
+++ b/Evergreen/Base.lproj/RenameSheet.xib
@@ -10,6 +10,7 @@
+
@@ -50,7 +51,13 @@
+
+DQ
+
+
+
+
diff --git a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
index 58729d69e..6230bee6e 100644
--- a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
+++ b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
@@ -63,6 +63,24 @@ extension MainWindowController {
@objc func renameFromContextualMenu(_ sender: Any?) {
+ guard let window = window, let menuItem = sender as? NSMenuItem, let object = menuItem.representedObject as? DisplayNameProvider, object is Feed || object is Folder else {
+ return
+ }
+
+ renameWindowController = RenameWindowController(originalTitle: object.nameForDisplay) { (newTitle) in
+ guard let newTitle = newTitle else {
+ return
+ }
+ if let feed = object as? Feed {
+ feed.editedName = newTitle
+ }
+ else if let folder = object as? Folder {
+ folder.name = newTitle
+ }
+ self.renameWindowController = nil
+ }
+
+ renameWindowController!.runSheetOnWindow(window)
}
}
diff --git a/Evergreen/MainWindow/MainWindowController.swift b/Evergreen/MainWindow/MainWindowController.swift
index fc3710bef..654a8f115 100644
--- a/Evergreen/MainWindow/MainWindowController.swift
+++ b/Evergreen/MainWindow/MainWindowController.swift
@@ -25,6 +25,8 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
return false
}
+ var renameWindowController: RenameWindowController?
+
// MARK: NSWindowController
private let windowAutosaveName = NSWindow.FrameAutosaveName(rawValue: kWindowFrameKey)
diff --git a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
index 439cd057a..8deda9538 100644
--- a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
+++ b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
@@ -15,18 +15,52 @@ final class RenameWindowController: NSWindowController {
@IBOutlet var renameButton: NSButton!
private var originalTitle: String!
+ private var hostWindow: NSWindow!
+ private var callback: ((String?) -> Void)?
- convenience init(originalTitle: String) {
+ convenience init(originalTitle: String, callback: @escaping ((String?) -> Void)) {
self.init(windowNibName: NSNib.Name(rawValue: "RenameSheet"))
self.originalTitle = originalTitle
+ self.callback = callback
}
override func windowDidLoad() {
newTitleTextField.stringValue = originalTitle
+
+ let prompt = NSLocalizedString("Rename %@ to:", comment: "Rename sheet")
+ let localizedPrompt = NSString.localizedStringWithFormat(prompt as NSString, originalTitle)
+ renamePrompt.stringValue = localizedPrompt as String
+
updateUI()
}
+
+ func runSheetOnWindow(_ w: NSWindow) {
+
+ guard let window = window else {
+ return
+ }
+
+ hostWindow = w
+ hostWindow.beginSheet(window) { (returnCode: NSApplication.ModalResponse) -> Void in
+ }
+ }
+
+ // MARK: Actions
+
+ @IBAction func cancel(_ sender: AnyObject) {
+
+ callback?(nil)
+ hostWindow!.endSheet(window!, returnCode: .cancel)
+ }
+
+ @IBAction func rename(_ sender: AnyObject) {
+
+ callback?(newTitleTextField.stringValue)
+ hostWindow!.endSheet(window!, returnCode: .OK)
+ }
+
}
extension RenameWindowController: NSTextFieldDelegate {