startlazarus: wait for initial lazarus to exit, before checking for accepting lazarus

git-svn-id: trunk@64277 -
This commit is contained in:
mattias 2020-12-26 11:54:45 +00:00
parent 63d7925005
commit 0eaddeb4c8
3 changed files with 29 additions and 9 deletions

View File

@ -136,10 +136,10 @@ type
FShowSplashOption: boolean; FShowSplashOption: boolean;
function RenameLazarusExecutable(const Directory: string): TModalResult; function RenameLazarusExecutable(const Directory: string): TModalResult;
procedure LazarusProcessStart(Sender: TObject); procedure LazarusProcessStart(Sender: TObject);
procedure WaitForLazarus;
public public
destructor Destroy; override; destructor Destroy; override;
procedure Initialize; procedure Initialize;
procedure WaitForLazarus;
procedure Run; procedure Run;
procedure ShowSplash; procedure ShowSplash;
property ShowSplashOption: boolean read FShowSplashOption write FShowSplashOption; property ShowSplashOption: boolean read FShowSplashOption write FShowSplashOption;
@ -274,6 +274,16 @@ begin
end; end;
procedure TLazarusManager.Run; procedure TLazarusManager.Run;
procedure AddExpandedParam(Params: TStringListUTF8; Param: string);
begin
// skip startlazarus params
if LeftStr(Param,length(StartLazarusPidOpt))=StartLazarusPidOpt then
exit;
// expand filenames and append
Params.Add(ExpandParamFile(Param));
end;
var var
Restart: boolean; Restart: boolean;
DefaultDir: String; DefaultDir: String;
@ -286,7 +296,6 @@ var
Params: TStringListUTF8; Params: TStringListUTF8;
i: Integer; i: Integer;
begin begin
WaitForLazarus;
try try
StartPath:=ExpandFileNameUTF8(ParamStrUTF8(0)); StartPath:=ExpandFileNameUTF8(ParamStrUTF8(0));
if FileIsSymlink(StartPath) then if FileIsSymlink(StartPath) then
@ -402,7 +411,7 @@ begin
Params.Add(NoSplashScreenOptLong); Params.Add(NoSplashScreenOptLong);
Params.Add(StartedByStartLazarusOpt); Params.Add(StartedByStartLazarusOpt);
for i:=0 to FCmdLineParams.Count-1 do for i:=0 to FCmdLineParams.Count-1 do
Params.Add(ExpandParamFile(FCmdLineParams[i])); AddExpandedParam(Params,FCmdLineParams[i]);
FLazarusProcess.Process.Parameters.AddStrings(Params); FLazarusProcess.Process.Parameters.AddStrings(Params);
finally finally
Params.Free; Params.Free;

View File

@ -50,6 +50,7 @@
<Unit0> <Unit0>
<Filename Value="startlazarus.lpr"/> <Filename Value="startlazarus.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="StartLazarus"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="lazarusmanager.pas"/> <Filename Value="lazarusmanager.pas"/>

View File

@ -45,12 +45,22 @@ var
begin begin
redirect_stderr.DoShowWindow := False; redirect_stderr.DoShowWindow := False;
Application.Initialize; Application.Initialize;
LazIDEInstances.PerformCheck;
if not LazIDEInstances.StartIDE then
Exit;
ALazarusManager := TLazarusManager.Create(nil); ALazarusManager := TLazarusManager.Create(nil);
ALazarusManager.Initialize; try
ALazarusManager.Run; // parse params
FreeAndNil(ALazarusManager); ALazarusManager.Initialize;
// if started by lazarus, wait for it to exit
ALazarusManager.WaitForLazarus;
// if there is a lazarus instance accepting files, pass files to that
LazIDEInstances.PerformCheck;
if not LazIDEInstances.StartIDE then
Exit;
// start lazarus
ALazarusManager.Run;
finally
FreeAndNil(ALazarusManager);
end;
end. end.