@@ -107,7 +107,7 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
107107 public override func loadView( ) {
108108 textView = STTextView ( )
109109
110- let scrollView = NSScrollView ( )
110+ let scrollView = CEScrollView ( )
111111 scrollView. translatesAutoresizingMaskIntoConstraints = false
112112 scrollView. hasVerticalScroller = true
113113 scrollView. documentView = textView
@@ -342,3 +342,30 @@ public class STTextViewController: NSViewController, STTextViewDelegate, ThemeAt
342342 highlighter = nil
343343 }
344344}
345+
346+ class CEScrollView : NSScrollView {
347+
348+ override func mouseDown( with event: NSEvent ) {
349+
350+ if let textView = self . documentView as? STTextView ,
351+ !textView. visibleRect. contains ( event. locationInWindow) {
352+ // If the `scrollView` was clicked, but the click did not happen within the `textView`,
353+ // set cursor to the last index of the `textView`.
354+
355+ guard let provider = textView. textLayoutManager. textContentManager else {
356+ return
357+ }
358+
359+ let string = textView. string
360+
361+ let range = NSRange ( string. endIndex..< string. endIndex, in: string)
362+ if let newRange = NSTextRange ( range, provider: provider) {
363+ _ = textView. becomeFirstResponder ( )
364+ textView. setSelectedRange ( newRange)
365+ return
366+ }
367+ }
368+
369+ super. mouseDown ( with: event)
370+ }
371+ }
0 commit comments