From 7256a2decbaee7b52937431993a19353b61530bb Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:14:36 -0500 Subject: [PATCH 1/2] Public textView, scrollView Properties --- .../CodeEditSourceEditor/Controller/TextViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift index 6a0125a49..d3072d21a 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift @@ -24,8 +24,8 @@ public class TextViewController: NSViewController { weak var findViewController: FindViewController? - var scrollView: NSScrollView! - var textView: TextView! + internal(set) public var scrollView: NSScrollView! + internal(set) public var textView: TextView! var gutterView: GutterView! var minimapView: MinimapView! From f2cffd4ba7c83749c37f42a59b7cd6469f52ffd1 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:14:46 -0500 Subject: [PATCH 2/2] Add controllerDidAppear/Disappear APIs --- .../Controller/TextViewController.swift | 10 ++++++++++ .../TextViewCoordinator/TextViewCoordinator.swift | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift index d3072d21a..92872d8e7 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift @@ -256,6 +256,16 @@ public class TextViewController: NSViewController { minimapView.layout() } + override public func viewDidAppear() { + super.viewDidAppear() + textCoordinators.forEach { $0.val?.controllerDidAppear(controller: self) } + } + + override public func viewDidDisappear() { + super.viewDidDisappear() + textCoordinators.forEach { $0.val?.controllerDidDisappear(controller: self) } + } + deinit { if let highlighter { textView.removeStorageDelegate(highlighter) diff --git a/Sources/CodeEditSourceEditor/TextViewCoordinator/TextViewCoordinator.swift b/Sources/CodeEditSourceEditor/TextViewCoordinator/TextViewCoordinator.swift index 82158c2b1..ae7682500 100644 --- a/Sources/CodeEditSourceEditor/TextViewCoordinator/TextViewCoordinator.swift +++ b/Sources/CodeEditSourceEditor/TextViewCoordinator/TextViewCoordinator.swift @@ -26,6 +26,14 @@ public protocol TextViewCoordinator: AnyObject { /// dereferenced when ``TextViewCoordinator/destroy()-9nzfl`` is called. func prepareCoordinator(controller: TextViewController) + /// Called when the controller's `viewDidAppear` method is called by AppKit. + /// - Parameter controller: The text view controller that did appear. + func controllerDidAppear(controller: TextViewController) + + /// Called when the controller's `viewDidDisappear` method is called by AppKit. + /// - Parameter controller: The text view controller that did disappear. + func controllerDidDisappear(controller: TextViewController) + /// Called when the text view's text changed. /// - Parameter controller: The text controller. func textViewDidChangeText(controller: TextViewController) @@ -40,6 +48,8 @@ public protocol TextViewCoordinator: AnyObject { /// Default implementations public extension TextViewCoordinator { + func controllerDidAppear(controller: TextViewController) { } + func controllerDidDisappear(controller: TextViewController) { } func textViewDidChangeText(controller: TextViewController) { } func textViewDidChangeSelection(controller: TextViewController, newPositions: [CursorPosition]) { } func destroy() { }