From 728880b8144718f1bfd2c155e4a2e08d9a376d49 Mon Sep 17 00:00:00 2001 From: martin Date: Tue, 7 Feb 2012 22:27:24 +0000 Subject: [PATCH] DBG: Reset, if project changed. issue #18468 git-svn-id: trunk@35229 - --- ide/debugmanager.pas | 10 ++++++++++ ide/main.pp | 11 ++++++++++- ide/mainbase.pas | 3 ++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ide/debugmanager.pas b/ide/debugmanager.pas index 4e134cd3ca..d803cafd19 100644 --- a/ide/debugmanager.pas +++ b/ide/debugmanager.pas @@ -66,6 +66,7 @@ type TDebugManager = class(TBaseDebugManager) procedure DebuggerIdle(Sender: TObject); + function DoProjectClose(Sender: TObject; AProject: TLazProject): TModalResult; procedure DoProjectModified(Sender: TObject); private procedure BreakAutoContinueTimer(Sender: TObject); @@ -708,6 +709,12 @@ begin FSnapshots.DoDebuggerIdle; end; +function TDebugManager.DoProjectClose(Sender: TObject; AProject: TLazProject): TModalResult; +begin + ResetDebugger; + Result := mrOK; +end; + procedure TDebugManager.DoProjectModified(Sender: TObject); begin if Project1 <> nil then @@ -1597,6 +1604,8 @@ begin FIsInitializingDebugger:= False; inherited Create(TheOwner); + + LazarusIDE.AddHandlerOnProjectClose(@DoProjectClose); end; destructor TDebugManager.Destroy; @@ -1605,6 +1614,7 @@ var begin FDestroying := true; + LazarusIDE.RemoveHandlerOnProjectClose(@DoProjectClose); FreeAndNil(FAutoContinueTimer); for DialogType := Low(TDebugDialogType) to High(TDebugDialogType) do diff --git a/ide/main.pp b/ide/main.pp index 415f893fd7..a69fb6f183 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -3782,6 +3782,8 @@ begin then exit; if (DebugBoss.DoStopProject = mrOK) and (ToolStatus = itDebugger) and (rfCloseOnDone in AFlags) then FWaitForClose := True; + if rfSuccessOnTrigger in AFlags then + exit(true); end; end; Result := ToolStatus = itNone; @@ -4143,7 +4145,7 @@ var ARecentProject: String; begin // stop debugging/compiling/... - if not DoResetToolStatus([rfInteractive]) then exit; + if not DoResetToolStatus([rfInteractive, rfSuccessOnTrigger]) then exit; // check foreign windows if not CloseQueryIDEWindows then exit; @@ -10706,6 +10708,8 @@ begin // close current project first if Project1<>nil then begin + if not DoResetToolStatus([rfInteractive, rfSuccessOnTrigger]) then exit; + if AskSaveProject(lisDoYouStillWantToCreateTheNewProject, lisDiscardChangesCreateNewProject)<>mrOK then exit; @@ -11000,6 +11004,8 @@ begin if ofAddToRecent in Flags then AddRecentProjectFileToEnvironment(AFileName); + if not DoResetToolStatus([rfInteractive, rfSuccessOnTrigger]) then exit; + // save old project if AskSaveProject(lisDoYouStillWantToOpenAnotherProject, lisDiscardChangesAndOpenProject)<>mrOk then exit; @@ -11241,6 +11247,9 @@ begin {$IFDEF IDE_VERBOSE} writeln('[TMainIDE.DoCreateProjectForProgram] A ',ProgramBuf.Filename); {$ENDIF} + + if (Project1 <> nil) and (not DoResetToolStatus([rfInteractive, rfSuccessOnTrigger])) then exit; + Result:=DoSaveProjectIfChanged; if Result=mrAbort then exit; diff --git a/ide/mainbase.pas b/ide/mainbase.pas index 682c48b654..c291679777 100644 --- a/ide/mainbase.pas +++ b/ide/mainbase.pas @@ -73,7 +73,8 @@ uses type TResetToolFlag = ( rfInteractive, - rfCloseOnDone + rfCloseOnDone, + rfSuccessOnTrigger ); TResetToolFlags = set of TResetToolFlag;