mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 21:59:07 +02:00
LCL: Prevent recursive loop from TreeView OnChange handler when using LockSelectionChangeEvent. Issue #21652.
git-svn-id: trunk@46694 -
This commit is contained in:
parent
003d585583
commit
907903d999
@ -3113,6 +3113,7 @@ type
|
|||||||
FAccessibilityOn: Boolean;
|
FAccessibilityOn: Boolean;
|
||||||
FBackgroundColor: TColor;
|
FBackgroundColor: TColor;
|
||||||
FBottomItem: TTreeNode;
|
FBottomItem: TTreeNode;
|
||||||
|
FCallingOnChange: Boolean;
|
||||||
FEditingItem: TTreeNode;
|
FEditingItem: TTreeNode;
|
||||||
FExpandSignType: TTreeViewExpandSignType;
|
FExpandSignType: TTreeViewExpandSignType;
|
||||||
FExpandSignSize: integer;
|
FExpandSignSize: integer;
|
||||||
|
@ -5035,7 +5035,11 @@ end;
|
|||||||
|
|
||||||
procedure TCustomTreeView.Change(Node: TTreeNode);
|
procedure TCustomTreeView.Change(Node: TTreeNode);
|
||||||
begin
|
begin
|
||||||
if Assigned(FOnChange) then FOnChange(Self, Node);
|
if Assigned(FOnChange) then begin
|
||||||
|
FCallingOnChange := True;
|
||||||
|
FOnChange(Self, Node);
|
||||||
|
FCallingOnChange := False;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.Delete(Node: TTreeNode);
|
procedure TCustomTreeView.Delete(Node: TTreeNode);
|
||||||
@ -5477,8 +5481,8 @@ begin
|
|||||||
Exclude(FStates, tvsSelectionChanged);
|
Exclude(FStates, tvsSelectionChanged);
|
||||||
DoSelectionChanged;
|
DoSelectionChanged;
|
||||||
FChangeTimer.Enabled := False;
|
FChangeTimer.Enabled := False;
|
||||||
FChangeTimer.Enabled := True;
|
if not FCallingOnChange then // Prevent recursive loop from OnChange handler.
|
||||||
//debugln('TCustomTreeView.InternalSelectionChanged');
|
FChangeTimer.Enabled := True;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -5648,8 +5652,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCustomTreeView.WriteDebugReport(const Prefix: string;
|
procedure TCustomTreeView.WriteDebugReport(const Prefix: string; AllNodes: boolean);
|
||||||
AllNodes: boolean);
|
|
||||||
begin
|
begin
|
||||||
DbgOut('%s%s.WriteDebugReport Self=%p', [Prefix, ClassName, Pointer(Self)]);
|
DbgOut('%s%s.WriteDebugReport Self=%p', [Prefix, ClassName, Pointer(Self)]);
|
||||||
ConsistencyCheck;
|
ConsistencyCheck;
|
||||||
|
Loading…
Reference in New Issue
Block a user