diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 39 | ||||
-rw-r--r-- | src/Editor.h | 1 |
2 files changed, 34 insertions, 6 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 5eb384bb2..d9ec00a35 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -344,6 +344,7 @@ Editor::Editor() { scrollWidth = 2000; verticalScrollBarVisible = true; endAtLastLine = true; + caretSticky = false; pixmapLine = Surface::Allocate(); pixmapSelMargin = Surface::Allocate(); @@ -3224,7 +3225,9 @@ void Editor::AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) { EnsureCaretVisible(); // Avoid blinking during rapid typing: ShowCaretAtCurrentPosition(); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } if (treatAsDBCS) { NotifyChar((static_cast<unsigned char>(s[0]) << 8) | @@ -4253,22 +4256,30 @@ int Editor::KeyCommand(unsigned int iMessage) { break; case SCI_DELETEBACK: DelCharBack(true); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_DELETEBACKNOTLINE: DelCharBack(false); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_TAB: Indent(true); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_BACKTAB: Indent(false); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; case SCI_NEWLINE: @@ -5647,7 +5658,9 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_PASTE: Paste(); - SetLastXChosen(); + if (!caretSticky) { + SetLastXChosen(); + } EnsureCaretVisible(); break; @@ -6347,6 +6360,20 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) { case SCI_GETENDATLASTLINE: return endAtLastLine; + case SCI_SETCARETSTICKY: + PLATFORM_ASSERT((wParam == 0) || (wParam == 1)); + if (caretSticky != (wParam != 0)) { + caretSticky = wParam != 0; + } + break; + + case SCI_GETCARETSTICKY: + return caretSticky; + + case SCI_TOGGLECARETSTICKY: + caretSticky = !caretSticky; + break; + case SCI_GETCOLUMN: return pdoc->GetColumn(wParam); diff --git a/src/Editor.h b/src/Editor.h index 76e79e7e7..ab80a21c4 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -218,6 +218,7 @@ protected: // ScintillaBase subclass needs access to much of Editor int scrollWidth; bool verticalScrollBarVisible; bool endAtLastLine; + bool caretSticky; Surface *pixmapLine; Surface *pixmapSelMargin; |