mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 17:19:19 +02:00
DBG: protect dialog actions against re-entrance
git-svn-id: trunk@28736 -
This commit is contained in:
parent
8e4d321718
commit
7e077f0e18
@ -134,7 +134,9 @@ type
|
||||
procedure JumpToCurrentBreakPoint;
|
||||
procedure ShowProperties;
|
||||
protected
|
||||
procedure DoBeginUpdate; override;
|
||||
procedure DoEndUpdate; override;
|
||||
procedure DisableAllActions;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
@ -351,12 +353,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvBreakPoints.Items.Count -1 do
|
||||
begin
|
||||
Item := lvBreakPoints.Items[n];
|
||||
if Item.Selected then
|
||||
TIDEBreakPoint(Item.Data).Enabled := True;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.actDisableSelectedExecute(Sender: TObject);
|
||||
@ -364,12 +371,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvBreakPoints.Items.Count -1 do
|
||||
begin
|
||||
Item := lvBreakPoints.Items[n];
|
||||
if Item.Selected then
|
||||
TIDEBreakPoint(Item.Data).Enabled := False;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.lvBreakPointsClick(Sender: TObject);
|
||||
@ -484,6 +496,8 @@ var
|
||||
CurBreakPoint: TIDEBreakPoint;
|
||||
Filename: String;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
CurItem:=lvBreakPoints.Selected;
|
||||
if (CurItem=nil) then exit;
|
||||
Filename:=TIDEBreakpoint(CurItem.Data).Source;
|
||||
@ -498,6 +512,9 @@ begin
|
||||
if CompareFilenames(CurBreakPoint.Source,Filename)=0
|
||||
then CurBreakPoint.Free;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popDisableAllSameSourceCLICK(Sender: TObject);
|
||||
@ -508,6 +525,8 @@ var
|
||||
CurBreakPoint: TIDEBreakPoint;
|
||||
Filename: String;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
CurItem:=lvBreakPoints.Selected;
|
||||
if (CurItem=nil) then exit;
|
||||
Filename:=TIDEBreakpoint(CurItem.Data).Source;
|
||||
@ -518,6 +537,9 @@ begin
|
||||
if CompareFilenames(CurBreakPoint.Source,Filename)=0
|
||||
then CurBreakPoint.Enabled := False;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popEnableAllSameSourceCLICK(Sender: TObject);
|
||||
@ -528,6 +550,8 @@ var
|
||||
CurBreakPoint: TIDEBreakPoint;
|
||||
Filename: String;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
CurItem:=lvBreakPoints.Selected;
|
||||
if (CurItem=nil) then exit;
|
||||
Filename:=TIDEBreakpoint(CurItem.Data).Source;
|
||||
@ -538,12 +562,17 @@ begin
|
||||
if CompareFilenames(CurBreakPoint.Source,Filename)=0
|
||||
then CurBreakPoint.Enabled := True;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popDeleteAllClick(Sender: TObject);
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
if MessageDlg(lisDeleteAllBreakpoints,
|
||||
lisDeleteAllBreakpoints,
|
||||
mtConfirmation,[mbYes,mbCancel],0)<>mrYes
|
||||
@ -555,6 +584,9 @@ begin
|
||||
finally
|
||||
lvBreakPoints.EndUpdate;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popShowClick(Sender: TObject);
|
||||
@ -564,7 +596,12 @@ end;
|
||||
|
||||
procedure TBreakPointsDlg.popDeleteClick(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
DeleteSelectedBreakpoints
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popDisableAllClick(Sender: TObject);
|
||||
@ -572,12 +609,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvBreakPoints.Items.Count - 1 do
|
||||
begin
|
||||
Item := lvBreakPoints.Items[n];
|
||||
if Item.Data <> nil
|
||||
then TIDEBreakPoint(Item.Data).Enabled := False;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popEnableAllClick(Sender: TObject);
|
||||
@ -585,12 +627,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvBreakPoints.Items.Count - 1 do
|
||||
begin
|
||||
Item := lvBreakPoints.Items[n];
|
||||
if Item.Data <> nil
|
||||
then TIDEBreakPoint(Item.Data).Enabled := True;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popEnabledClick(Sender: TObject);
|
||||
@ -599,6 +646,8 @@ var
|
||||
Item: TListItem;
|
||||
Enable: Boolean;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
Item:=lvBreakPoints.Selected;
|
||||
if (Item=nil) then exit;
|
||||
|
||||
@ -616,17 +665,34 @@ begin
|
||||
else begin
|
||||
TIDEBreakPoint(Item.Data).Enabled:= Enable;
|
||||
end;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.popPropertiesClick(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
ShowProperties;
|
||||
finally
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.DoEndUpdate;
|
||||
begin
|
||||
inherited DoEndUpdate;
|
||||
if bpdsItemsNeedUpdate in FStates then UpdateAll;
|
||||
lvBreakPointsSelectItem(nil, nil, False);
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.DisableAllActions;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to ActionList1.ActionCount - 1 do
|
||||
(ActionList1.Actions[i] as TAction).Enabled := False;
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.UpdateItem(const AnItem: TListItem;
|
||||
@ -761,5 +827,11 @@ begin
|
||||
DebugBoss.ShowBreakPointProperties(CurBreakPoint);
|
||||
end;
|
||||
|
||||
procedure TBreakPointsDlg.DoBeginUpdate;
|
||||
begin
|
||||
inherited DoBeginUpdate;
|
||||
DisableAllActions;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -126,6 +126,8 @@ type
|
||||
protected
|
||||
procedure DoBeginUpdate; override;
|
||||
procedure DoEndUpdate; override;
|
||||
procedure DisableAllActions;
|
||||
procedure EnableAllActions;
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
@ -307,12 +309,30 @@ end;
|
||||
|
||||
procedure TCallStackDlg.DoBeginUpdate;
|
||||
begin
|
||||
DisableAllActions;
|
||||
lvCallStack.BeginUpdate;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.DoEndUpdate;
|
||||
begin
|
||||
lvCallStack.EndUpdate;
|
||||
EnableAllActions;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.DisableAllActions;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to aclActions.ActionCount - 1 do
|
||||
(aclActions.Actions[i] as TAction).Enabled := False;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.EnableAllActions;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to aclActions.ActionCount - 1 do
|
||||
(aclActions.Actions[i] as TAction).Enabled := True;
|
||||
end;
|
||||
|
||||
function TCallStackDlg.GetCurrentEntry: TCallStackEntry;
|
||||
@ -381,6 +401,8 @@ var
|
||||
BreakPoint: TIDEBreakPoint;
|
||||
FileName: String;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
if (Item <> nil) and (BreakPoints <> nil) then
|
||||
begin
|
||||
idx := FViewStart + Item.Index;
|
||||
@ -395,6 +417,9 @@ begin
|
||||
else
|
||||
DebugBoss.DoCreateBreakPoint(FileName, Entry.Line, False);
|
||||
end;
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.lvCallStackDBLCLICK(Sender: TObject);
|
||||
@ -439,10 +464,15 @@ procedure TCallStackDlg.actSetAsCurrentClick(Sender : TObject);
|
||||
var
|
||||
Entry: TCallStackEntry;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
Entry := GetCurrentEntry;
|
||||
if Entry = nil then Exit;
|
||||
|
||||
CallStack.Current := Entry;
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.actShowClick(Sender: TObject);
|
||||
@ -452,9 +482,14 @@ end;
|
||||
|
||||
procedure TCallStackDlg.actViewBottomExecute(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
if CallStack <> nil
|
||||
then SetViewStart(CallStack.Count - FViewLimit)
|
||||
else SetViewStart(0);
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.actToggleBreakPointExecute(Sender: TObject);
|
||||
@ -464,21 +499,36 @@ end;
|
||||
|
||||
procedure TCallStackDlg.actViewGotoExecute(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
SetViewStart(StrToIntDef(txtGoto.Text, 0));
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.actViewMoreExecute(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
ToolButtonPower.Down := True;
|
||||
ToolButtonPowerClick(nil);
|
||||
ViewLimit := ViewLimit + FViewCount;
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.actViewTopExecute(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
ToolButtonPower.Down := True;
|
||||
ToolButtonPowerClick(nil);
|
||||
SetViewStart(0);
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.BreakPointChanged(const ASender: TIDEBreakPoints;
|
||||
@ -571,9 +621,14 @@ end;
|
||||
|
||||
procedure TCallStackDlg.actViewLimitExecute(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
ToolButtonPower.Down := True;
|
||||
ToolButtonPowerClick(nil);
|
||||
ViewLimit := FViewCount;
|
||||
finally
|
||||
EnableAllActions;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TCallStackDlg.SetViewStart(AStart: Integer);
|
||||
|
@ -111,6 +111,7 @@ type
|
||||
|
||||
procedure UpdateItem(const AItem: TListItem; const AWatch: TIDEWatch);
|
||||
procedure UpdateAll;
|
||||
procedure DisableAllActions;
|
||||
protected
|
||||
public
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
@ -276,6 +277,8 @@ begin
|
||||
actDeleteAll.Enabled := lvWatches.Items.Count > 0;
|
||||
|
||||
actProperties.Enabled := ItemSelected;
|
||||
|
||||
actPower.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.lvWatchesDblClick(Sender: TObject);
|
||||
@ -320,12 +323,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvWatches.Items.Count -1 do
|
||||
begin
|
||||
Item := lvWatches.Items[n];
|
||||
if Item.Selected then
|
||||
TIDEWatch(Item.Data).Enabled := True;
|
||||
end;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.actDisableSelectedExecute(Sender: TObject);
|
||||
@ -333,12 +341,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvWatches.Items.Count -1 do
|
||||
begin
|
||||
Item := lvWatches.Items[n];
|
||||
if Item.Selected then
|
||||
TIDEWatch(Item.Data).Enabled := False;
|
||||
end;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.lvWatchesKeyDown(Sender: TObject; var Key: Word;
|
||||
@ -357,26 +370,41 @@ end;
|
||||
|
||||
procedure TWatchesDlg.popAddClick(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
DebugBoss.ShowWatchProperties(nil);
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popDeleteAllClick(Sender: TObject);
|
||||
var
|
||||
n: Integer;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := lvWatches.Items.Count - 1 downto 0 do
|
||||
TIDEWatch(lvWatches.Items[n].Data).Free;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popDeleteClick(Sender: TObject);
|
||||
var
|
||||
Item: TIDEWatch;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
repeat
|
||||
Item := GetSelected;
|
||||
Item.Free;
|
||||
until Item = nil;
|
||||
//GetSelected.Free;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popDisableAllClick(Sender: TObject);
|
||||
@ -384,12 +412,17 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvWatches.Items.Count - 1 do
|
||||
begin
|
||||
Item := lvWatches.Items[n];
|
||||
if Item.Data <> nil
|
||||
then TIDEWatch(Item.Data).Enabled := False;
|
||||
end;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popEnableAllClick(Sender: TObject);
|
||||
@ -397,27 +430,42 @@ var
|
||||
n: Integer;
|
||||
Item: TListItem;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
for n := 0 to lvWatches.Items.Count - 1 do
|
||||
begin
|
||||
Item := lvWatches.Items[n];
|
||||
if Item.Data <> nil
|
||||
then TIDEWatch(Item.Data).Enabled := True;
|
||||
end;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popEnabledClick(Sender: TObject);
|
||||
var
|
||||
Watch: TIDEWatch;
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
Watch := GetSelected;
|
||||
if Watch = nil then Exit;
|
||||
popEnabled.Checked := not popEnabled.Checked;
|
||||
Watch.Enabled := popEnabled.Checked;
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.popPropertiesClick(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
DisableAllActions;
|
||||
DebugBoss.ShowWatchProperties(GetSelected);
|
||||
finally
|
||||
lvWatchesSelectItem(nil, nil, False);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.UpdateItem(const AItem: TListItem; const AWatch: TIDEWatch);
|
||||
@ -467,6 +515,14 @@ begin
|
||||
WatchUpdate(FWatches, FWatches.Items[i]);
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.DisableAllActions;
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to ActionList1.ActionCount - 1 do
|
||||
(ActionList1.Actions[i] as TAction).Enabled := False;
|
||||
end;
|
||||
|
||||
procedure TWatchesDlg.WatchAdd(const ASender: TIDEWatches; const AWatch: TIDEWatch);
|
||||
var
|
||||
Item: TListItem;
|
||||
|
Loading…
Reference in New Issue
Block a user