aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2025-12-08 14:38:07 +1100
committerNeil <nyamatongwe@gmail.com>2025-12-08 14:38:07 +1100
commit724429a7c661eeafe3094a049f747267d0496a69 (patch)
tree5e61c00fe32ca0860f0f24446a1421622c13e6a7 /src
parent3b9c68ac4239f07d7a9117010778987e5b98502c (diff)
downloadscintilla-mirror-724429a7c661eeafe3094a049f747267d0496a69.tar.gz
Bug [#2488]. Fix SCI_SETSELECTIONNSTART and SCI_SETSELECTIONNEND.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx4
-rw-r--r--src/Selection.cxx28
-rw-r--r--src/Selection.h2
3 files changed, 32 insertions, 2 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx
index e7a309e67..1ad99c3ca 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -6178,11 +6178,11 @@ void Editor::SetSelectionNMessage(Message iMessage, uptr_t wParam, sptr_t lParam
break;
case Message::SetSelectionNStart:
- sel.Range(wParam).anchor.SetPosition(lParam);
+ sel.Range(wParam).StartSet(SelectionPosition(lParam));
break;
case Message::SetSelectionNEnd:
- sel.Range(wParam).caret.SetPosition(lParam);
+ sel.Range(wParam).EndSet(SelectionPosition(lParam));
break;
default:
diff --git a/src/Selection.cxx b/src/Selection.cxx
index 967033bff..e8d0148f5 100644
--- a/src/Selection.cxx
+++ b/src/Selection.cxx
@@ -182,6 +182,34 @@ SelectionSegment SelectionRange::Intersect(SelectionSegment check) const noexcep
};
}
+void SelectionRange::StartSet(SelectionPosition sp) noexcept {
+ if (anchor <= caret) {
+ anchor = sp;
+ if (caret < anchor) {
+ caret = anchor;
+ }
+ } else {
+ caret = sp;
+ if (anchor < caret) {
+ anchor = caret;
+ }
+ }
+}
+
+void SelectionRange::EndSet(SelectionPosition sp) noexcept {
+ if (caret >= anchor) {
+ caret = sp;
+ if (anchor > caret) {
+ anchor = caret;
+ }
+ } else {
+ anchor = sp;
+ if (caret > anchor) {
+ caret = anchor;
+ }
+ }
+}
+
void SelectionRange::Swap() noexcept {
std::swap(caret, anchor);
}
diff --git a/src/Selection.h b/src/Selection.h
index 1a57d2e78..0b3bb9159 100644
--- a/src/Selection.h
+++ b/src/Selection.h
@@ -156,6 +156,8 @@ struct SelectionRange {
SelectionPosition End() const noexcept {
return (anchor < caret) ? caret : anchor;
}
+ void StartSet(SelectionPosition sp) noexcept;
+ void EndSet(SelectionPosition sp) noexcept;
void Swap() noexcept;
bool Trim(SelectionRange range) noexcept;
void Truncate(Sci::Position length) noexcept;