FpDocView, SourceEditor: Prevent loosing MouseCapture while user selects text with mouse. Issue #0037150

git-svn-id: trunk@63249 -
This commit is contained in:
martin 2020-05-29 16:52:36 +00:00
parent 03e92d0d2c
commit 668ee99dd1
3 changed files with 26 additions and 1 deletions

View File

@ -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 = (

View File

@ -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;

View File

@ -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;