diff --git a/Evergreen/Base.lproj/RenameSheet.xib b/Evergreen/Base.lproj/RenameSheet.xib
index d9462606f..e76af7899 100644
--- a/Evergreen/Base.lproj/RenameSheet.xib
+++ b/Evergreen/Base.lproj/RenameSheet.xib
@@ -15,7 +15,7 @@
-
+
diff --git a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
index feab2b0ed..4a0a99885 100644
--- a/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
+++ b/Evergreen/MainWindow/ContextualMenus/MainWindowController+ContextualMenus.swift
@@ -67,20 +67,24 @@ extension MainWindowController {
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 = RenameWindowController(originalTitle: object.nameForDisplay, representedObject: object, delegate: self)
+ guard let renameSheet = renameWindowController?.window else {
+ return
}
+ window.beginSheet(renameSheet)
+ }
+}
- renameWindowController?.runSheetOnWindow(window)
+extension MainWindowController: RenameWindowControllerDelegate {
+
+ func renameWindowController(_ windowController: RenameWindowController, didRenameObject object: Any, withNewName name: String) {
+
+ if let feed = object as? Feed {
+ feed.editedName = name
+ }
+ else if let folder = object as? Folder {
+ folder.name = name
+ }
}
}
diff --git a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
index 8deda9538..c88dca2c5 100644
--- a/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
+++ b/Evergreen/MainWindow/Sidebar/Renaming/RenameWindowController.swift
@@ -8,57 +8,54 @@
import AppKit
+protocol RenameWindowControllerDelegate {
+
+ func renameWindowController(_ windowController: RenameWindowController, didRenameObject: Any, withNewName: String)
+}
+
final class RenameWindowController: NSWindowController {
@IBOutlet var renamePrompt: NSTextField!
@IBOutlet var newTitleTextField: NSTextField!
@IBOutlet var renameButton: NSButton!
- private var originalTitle: String!
- private var hostWindow: NSWindow!
- private var callback: ((String?) -> Void)?
+ private var originalTitle: String?
+ private var representedObject: Any?
+ private var delegate: RenameWindowControllerDelegate?
- convenience init(originalTitle: String, callback: @escaping ((String?) -> Void)) {
+ convenience init(originalTitle: String, representedObject: Any, delegate: RenameWindowControllerDelegate) {
self.init(windowNibName: NSNib.Name(rawValue: "RenameSheet"))
self.originalTitle = originalTitle
- self.callback = callback
+ self.representedObject = representedObject
+ self.delegate = delegate
}
override func windowDidLoad() {
- newTitleTextField.stringValue = originalTitle
+ newTitleTextField.stringValue = originalTitle!
let prompt = NSLocalizedString("Rename %@ to:", comment: "Rename sheet")
- let localizedPrompt = NSString.localizedStringWithFormat(prompt as NSString, originalTitle)
+ 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)
+ window?.sheetParent?.endSheet(window!, returnCode: .cancel)
}
@IBAction func rename(_ sender: AnyObject) {
- callback?(newTitleTextField.stringValue)
- hostWindow!.endSheet(window!, returnCode: .OK)
+ guard let representedObject = representedObject else {
+ return
+ }
+ delegate?.renameWindowController(self, didRenameObject: representedObject, withNewName: newTitleTextField.stringValue)
+ window?.sheetParent?.endSheet(window!, returnCode: .OK)
}
}