diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 23 | ||||
-rw-r--r-- | src/Editor.h | 4 |
2 files changed, 24 insertions, 3 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 698bb65d2..5bfe8fb25 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -41,6 +41,7 @@ Editor::Editor() { printMagnification = 0; printColourMode = SC_PRINT_NORMAL; + hasFocus = false; hideSelection = false; inOverstrike = false; @@ -608,7 +609,7 @@ void Editor::EnsureCaretVisible(bool useMargin) { } void Editor::ShowCaretAtCurrentPosition() { - if (!wMain.HasFocus()) { + if (!hasFocus) { caret.active = false; caret.on = false; return ; @@ -1096,7 +1097,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) { } surfaceWindow->SetPalette(&palette, true); - pixmapLine.SetPalette(&palette, !wMain.HasFocus()); + pixmapLine.SetPalette(&palette, !hasFocus); //Platform::DebugPrintf("Paint: (%3d,%3d) ... (%3d,%3d)\n", // rcArea.left, rcArea.top, rcArea.right, rcArea.bottom); @@ -2811,6 +2812,17 @@ void Editor::Tick() { } } +void Editor::SetFocusState(bool focusState) { + hasFocus = focusState; + NotifyFocus(hasFocus); + if (hasFocus) { + ShowCaretAtCurrentPosition(); + InvalidateCaret(); + } else { + DropCaret(); + } +} + static bool IsIn(int a, int minimum, int maximum) { return (a >= minimum) && (a <= maximum); } @@ -4265,6 +4277,13 @@ long Editor::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) { case SCI_GETOVERTYPE: return inOverstrike ? TRUE : FALSE; + case SCI_SETFOCUS: + SetFocusState(wParam); + break; + + case SCI_GETFOCUS: + return hasFocus; + #ifdef MACRO_SUPPORT case SCI_STARTRECORD: recordingMacro = 1; diff --git a/src/Editor.h b/src/Editor.h index 83967cfd6..38d7ad913 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -61,7 +61,8 @@ protected: // ScintillaBase subclass needs access to much of Editor Palette palette; int printMagnification; int printColourMode; - + + bool hasFocus; bool hideSelection; bool inOverstrike; @@ -285,6 +286,7 @@ protected: // ScintillaBase subclass needs access to much of Editor virtual void SetTicking(bool on) = 0; virtual void SetMouseCapture(bool on) = 0; virtual bool HaveMouseCapture() = 0; + void SetFocusState(bool focusState); void CheckForChangeOutsidePaint(Range r); int BraceMatch(int position, int maxReStyle); |