diff --git a/components/ideintf/srceditorintf.pas b/components/ideintf/srceditorintf.pas index de54e2fd53..dc9996e6ef 100644 --- a/components/ideintf/srceditorintf.pas +++ b/components/ideintf/srceditorintf.pas @@ -257,7 +257,9 @@ type semEditorCreate, // Called after a new editor was created and added to list semEditorDestroy, // Called when an Editor is destroyed / after it is removed fron the list of editors semEditorActivate, // Editor is ActiveEditor - semEditorStatus // any status change of the editor (Caret, Selection, topline, ...) + semEditorStatus, // any status change of the editor (Caret, Selection, topline, ...) + semEditorMouseDown, + semEditorMouseUp ); TSemSelectionMode = ( diff --git a/ide/fpdoceditwindow.pas b/ide/fpdoceditwindow.pas index 883b589773..0057c8ac63 100644 --- a/ide/fpdoceditwindow.pas +++ b/ide/fpdoceditwindow.pas @@ -182,6 +182,7 @@ type procedure OpenXML; function GUIModified: boolean; procedure DoEditorUpdate(Sender: TObject); + procedure DoEditorMouseUp(Sender: TObject); private FFollowCursor: boolean; FIdleConnected: boolean; @@ -304,6 +305,7 @@ begin SourceEditorManagerIntf.RegisterChangeEvent(semEditorActivate, @DoEditorUpdate); SourceEditorManagerIntf.RegisterChangeEvent(semEditorStatus, @DoEditorUpdate); + SourceEditorManagerIntf.RegisterChangeEvent(semEditorMouseUp, @DoEditorMouseUp); FollowCursor:=true; IdleConnected:=true; @@ -1050,6 +1052,14 @@ begin end; procedure TFPDocEditor.DoEditorUpdate(Sender: TObject); +begin + if GetCaptureControl <> nil then // If SynEdit has Capture the user may be selecting by Mouse. https://bugs.freepascal.org/view.php?id=37150 + exit; + if FollowCursor then + LoadIdentifierAtCursor; +end; + +procedure TFPDocEditor.DoEditorMouseUp(Sender: TObject); begin if FollowCursor then LoadIdentifierAtCursor; diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index 1885cdcdc5..f6471d8508 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -272,6 +272,8 @@ type procedure EditorMouseMoved(Sender: TObject; Shift: TShiftState; X,Y:Integer); procedure EditorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X,Y: Integer); + procedure EditorMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -5111,6 +5113,7 @@ Begin OnMouseMove := @EditorMouseMoved; OnMouseWheel := @EditorMouseWheel; OnMouseDown := @EditorMouseDown; + OnMouseUp := @EditorMouseUp; OnClickLink := Manager.OnClickLink; OnMouseLink := Manager.OnMouseLink; OnKeyDown := @EditorKeyDown; @@ -5661,6 +5664,16 @@ begin CheckActiveWindow; if Assigned(OnMouseDown) then OnMouseDown(Sender, Button, Shift, X,Y); + + if (Manager <> nil) then + Manager.FChangeNotifyLists[semEditorMouseDown].CallNotifyEvents(Self); +end; + +procedure TSourceEditor.EditorMouseUp(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + if (Manager <> nil) then + Manager.FChangeNotifyLists[semEditorMouseUp].CallNotifyEvents(Self); end; procedure TSourceEditor.EditorKeyDown(Sender: TObject; var Key: Word;