Skip to content

Commit 910848e

Browse files
committed
Make cursor appear when clicking after the last line of a file (#56)
1 parent d83b449 commit 910848e

1 file changed

Lines changed: 28 additions & 1 deletion

File tree

Sources/CodeEditTextView/STTextViewController.swift

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)