瀏覽代碼

Issue 2304 – Change caret position on the first click on an inactive editor window

https://winscp.net/tracker/2304

Source commit: 51ae490582a8c508c5b4242e583e2a2b80e9e0e2
Martin Prikryl 1 年之前
父節點
當前提交
827daf3dbc
共有 1 個文件被更改,包括 15 次插入0 次删除
  1. 15 0
      source/forms/Editor.cpp

+ 15 - 0
source/forms/Editor.cpp

@@ -173,6 +173,7 @@ protected:
   void __fastcall WMPaste();
   void __fastcall EMStreamIn(TMessage & Message);
   void WMMouseWheel(TMessage & Message);
+  void WMMouseActivate(TWMMouseActivate & Message);
   bool __stdcall StreamLoad(TRichEditStreamInfo * StreamInfo,
     unsigned char * Buff, long Read, long & WasRead);
   DYNAMIC void __fastcall KeyDown(Word & Key, TShiftState Shift);
@@ -439,6 +440,16 @@ void TEditorRichEdit::WMMouseWheel(TMessage & Message)
   }
 }
 //---------------------------------------------------------------------------
+void TEditorRichEdit::WMMouseActivate(TWMMouseActivate & Message)
+{
+  // https://stackoverflow.com/q/20180213/850848
+  if ((Message.MouseMsg == WM_LBUTTONDOWN) && (GetFocus() != Handle))
+  {
+    SetFocus();
+  }
+  TNewRichEdit::Dispatch(&Message);
+}
+//---------------------------------------------------------------------------
 void __fastcall TEditorRichEdit::Dispatch(void * Message)
 {
   TMessage * M = static_cast<TMessage *>(Message);
@@ -456,6 +467,10 @@ void __fastcall TEditorRichEdit::Dispatch(void * Message)
       WMMouseWheel(*M);
       break;
 
+    case WM_MOUSEACTIVATE:
+      WMMouseActivate(*reinterpret_cast<TWMMouseActivate *>(M));
+      break;
+
     default:
       TNewRichEdit::Dispatch(Message);
       break;