diff --git a/ide/lazarusmanager.pas b/ide/lazarusmanager.pas
index b081bcdd77..919b232779 100644
--- a/ide/lazarusmanager.pas
+++ b/ide/lazarusmanager.pas
@@ -136,10 +136,10 @@ type
FShowSplashOption: boolean;
function RenameLazarusExecutable(const Directory: string): TModalResult;
procedure LazarusProcessStart(Sender: TObject);
- procedure WaitForLazarus;
public
destructor Destroy; override;
procedure Initialize;
+ procedure WaitForLazarus;
procedure Run;
procedure ShowSplash;
property ShowSplashOption: boolean read FShowSplashOption write FShowSplashOption;
@@ -274,6 +274,16 @@ begin
end;
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
Restart: boolean;
DefaultDir: String;
@@ -286,7 +296,6 @@ var
Params: TStringListUTF8;
i: Integer;
begin
- WaitForLazarus;
try
StartPath:=ExpandFileNameUTF8(ParamStrUTF8(0));
if FileIsSymlink(StartPath) then
@@ -402,7 +411,7 @@ begin
Params.Add(NoSplashScreenOptLong);
Params.Add(StartedByStartLazarusOpt);
for i:=0 to FCmdLineParams.Count-1 do
- Params.Add(ExpandParamFile(FCmdLineParams[i]));
+ AddExpandedParam(Params,FCmdLineParams[i]);
FLazarusProcess.Process.Parameters.AddStrings(Params);
finally
Params.Free;
diff --git a/ide/startlazarus.lpi b/ide/startlazarus.lpi
index 40143c152c..c85a4bd353 100644
--- a/ide/startlazarus.lpi
+++ b/ide/startlazarus.lpi
@@ -50,6 +50,7 @@
+
diff --git a/ide/startlazarus.lpr b/ide/startlazarus.lpr
index 773a747eb9..b3e93286d4 100644
--- a/ide/startlazarus.lpr
+++ b/ide/startlazarus.lpr
@@ -45,12 +45,22 @@ var
begin
redirect_stderr.DoShowWindow := False;
Application.Initialize;
- LazIDEInstances.PerformCheck;
- if not LazIDEInstances.StartIDE then
- Exit;
ALazarusManager := TLazarusManager.Create(nil);
- ALazarusManager.Initialize;
- ALazarusManager.Run;
- FreeAndNil(ALazarusManager);
+ try
+ // parse params
+ 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.