diff --git a/Evergreen/Inspector/FeedInspectorViewController.swift b/Evergreen/Inspector/FeedInspectorViewController.swift index 25c1304f4..2822728a5 100644 --- a/Evergreen/Inspector/FeedInspectorViewController.swift +++ b/Evergreen/Inspector/FeedInspectorViewController.swift @@ -110,7 +110,14 @@ private extension FeedInspectorViewController { func updateName() { - nameTextField?.stringValue = feed?.editedName ?? feed?.name ?? "" + guard let nameTextField = nameTextField else { + return + } + + let name = feed?.editedName ?? feed?.name ?? "" + if nameTextField.stringValue != name { + nameTextField.stringValue = name + } } func updateHomePageURL() { diff --git a/Evergreen/Inspector/FolderInspectorViewController.swift b/Evergreen/Inspector/FolderInspectorViewController.swift index 925bc8f46..4df9961d2 100644 --- a/Evergreen/Inspector/FolderInspectorViewController.swift +++ b/Evergreen/Inspector/FolderInspectorViewController.swift @@ -8,6 +8,7 @@ import AppKit import Account +import RSCore final class FolderInspectorViewController: NSViewController, Inspector { @@ -43,6 +44,29 @@ final class FolderInspectorViewController: NSViewController, Inspector { override func viewDidLoad() { updateUI() + + NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange(_:)), name: .DisplayNameDidChange, object: nil) + } + + // MARK: Notifications + + @objc func displayNameDidChange(_ note: Notification) { + + guard let updatedFolder = note.object as? Folder, updatedFolder == folder else { + return + } + updateUI() + } +} + +extension FolderInspectorViewController: NSTextFieldDelegate { + + override func controlTextDidChange(_ note: Notification) { + + guard let folder = folder, let nameTextField = nameTextField else { + return + } + folder.name = nameTextField.stringValue } } @@ -64,7 +88,13 @@ private extension FolderInspectorViewController { func updateUI() { - nameTextField?.stringValue = folder?.nameForDisplay ?? "" - } + guard let nameTextField = nameTextField else { + return + } + let name = folder?.nameForDisplay ?? "" + if nameTextField.stringValue != name { + nameTextField.stringValue = name + } + } } diff --git a/Evergreen/Inspector/Inspector.storyboard b/Evergreen/Inspector/Inspector.storyboard index 062f10e88..43ddead44 100644 --- a/Evergreen/Inspector/Inspector.storyboard +++ b/Evergreen/Inspector/Inspector.storyboard @@ -155,6 +155,9 @@ Field + + + diff --git a/Evergreen/Inspector/InspectorWindowController.swift b/Evergreen/Inspector/InspectorWindowController.swift index ff5c1f510..28588447d 100644 --- a/Evergreen/Inspector/InspectorWindowController.swift +++ b/Evergreen/Inspector/InspectorWindowController.swift @@ -111,12 +111,18 @@ private extension InspectorWindowController { func show(_ inspector: InspectorViewController) { - guard let window = window, inspector !== window.contentViewController else { + guard let window = window else { return } let flippedOrigin = window.flippedOrigin - window.contentViewController = inspector + + if window.contentViewController != inspector { + window.contentViewController = inspector + window.makeFirstResponder(nil) + } + + window.layoutIfNeeded() if let flippedOrigin = flippedOrigin { window.setFlippedOriginAdjustingForScreen(flippedOrigin) }