@@ -124,38 +124,7 @@ public struct SourceEditor: NSViewControllerRepresentable {
124124 context. coordinator. isUpdateFromTextView = false
125125 } else {
126126 context. coordinator. isUpdatingFromRepresentable = true
127- if let cursorPositions = state. cursorPositions, cursorPositions != state. cursorPositions {
128- controller. setCursorPositions ( cursorPositions)
129- }
130-
131- if let scrollPosition = state. scrollPosition, scrollPosition != state. scrollPosition {
132- controller. scrollView. scroll ( controller. scrollView. contentView, to: scrollPosition)
133- controller. scrollView. reflectScrolledClipView ( controller. scrollView. contentView)
134- controller. gutterView. needsDisplay = true
135- NotificationCenter . default. post ( name: NSView . frameDidChangeNotification, object: controller. textView)
136- }
137-
138- if let findText = state. findText, findText != controller. findViewController? . viewModel. findText {
139- controller. findViewController? . viewModel. findText = findText
140- }
141-
142- if let replaceText = state. replaceText, replaceText != controller. findViewController? . viewModel. replaceText {
143- controller. findViewController? . viewModel. replaceText = replaceText
144- }
145-
146- if let findPanelVisible = state. findPanelVisible,
147- let findController = controller. findViewController,
148- findController. viewModel. isShowingFindPanel != findPanelVisible {
149- // Needs to be on the next runloop, not many great ways to do this besides a dispatch...
150- DispatchQueue . main. async {
151- if findPanelVisible {
152- findController. showFindPanel ( )
153- } else {
154- findController. hideFindPanel ( )
155- }
156- }
157- }
158-
127+ updateControllerWithState ( state, controller: controller)
159128 context. coordinator. isUpdatingFromRepresentable = false
160129 }
161130
@@ -178,6 +147,40 @@ public struct SourceEditor: NSViewControllerRepresentable {
178147 return
179148 }
180149
150+ private func updateControllerWithState( _ state: SourceEditorState , controller: TextViewController ) {
151+ if let cursorPositions = state. cursorPositions, cursorPositions != state. cursorPositions {
152+ controller. setCursorPositions ( cursorPositions)
153+ }
154+
155+ if let scrollPosition = state. scrollPosition, scrollPosition != state. scrollPosition {
156+ controller. scrollView. scroll ( controller. scrollView. contentView, to: scrollPosition)
157+ controller. scrollView. reflectScrolledClipView ( controller. scrollView. contentView)
158+ controller. gutterView. needsDisplay = true
159+ NotificationCenter . default. post ( name: NSView . frameDidChangeNotification, object: controller. textView)
160+ }
161+
162+ if let findText = state. findText, findText != controller. findViewController? . viewModel. findText {
163+ controller. findViewController? . viewModel. findText = findText
164+ }
165+
166+ if let replaceText = state. replaceText, replaceText != controller. findViewController? . viewModel. replaceText {
167+ controller. findViewController? . viewModel. replaceText = replaceText
168+ }
169+
170+ if let findPanelVisible = state. findPanelVisible,
171+ let findController = controller. findViewController,
172+ findController. viewModel. isShowingFindPanel != findPanelVisible {
173+ // Needs to be on the next runloop, not many great ways to do this besides a dispatch...
174+ DispatchQueue . main. async {
175+ if findPanelVisible {
176+ findController. showFindPanel ( )
177+ } else {
178+ findController. hideFindPanel ( )
179+ }
180+ }
181+ }
182+ }
183+
181184 private func updateHighlighting( _ controller: TextViewController , coordinator: Coordinator ) {
182185 if !areHighlightProvidersEqual( controller: controller, coordinator: coordinator) {
183186 controller. setHighlightProviders ( coordinator. highlightProviders)
0 commit comments