aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authornyamatongwe <unknown>2005-03-25 10:49:07 +0000
committernyamatongwe <unknown>2005-03-25 10:49:07 +0000
commit0850525585a84cd22010b7dcf5579e37e940a9aa (patch)
tree25825959ca1d40fb05d18fe0895d58b7ae397da4 /src
parent0e6ce8f70592a081f2a61193b45e6e51a5aa71e7 (diff)
downloadscintilla-mirror-0850525585a84cd22010b7dcf5579e37e940a9aa.tar.gz
Patch from Franck Marcia implements sticky caret.
Diffstat (limited to 'src')
-rw-r--r--src/Editor.cxx39
-rw-r--r--src/Editor.h1
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;