From dd154546c3b1c65049c2669f9ec5a1f9bd5bb68e Mon Sep 17 00:00:00 2001 From: ondrej Date: Sun, 6 Dec 2015 08:23:21 +0000 Subject: [PATCH] IDE: focus editor window when file is opened from command line in IDEInstances (issue on MS Windows) git-svn-id: trunk@50680 - --- ide/ideinstances.pas | 7 ++++--- ide/main.pp | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ide/ideinstances.pas b/ide/ideinstances.pas index dad4e1d604..26c7ddc293 100644 --- a/ide/ideinstances.pas +++ b/ide/ideinstances.pas @@ -51,7 +51,7 @@ type TStartNewInstanceResult = (ofrStartNewInstance, ofrDoNotStart, ofrModalError, ofrForceSingleInstanceModalError, ofrNotResponding); TStartNewInstanceEvent = procedure(const aFiles: TStrings; - var outResult: TStartNewInstanceResult) of object; + var outResult: TStartNewInstanceResult; var outSourceWindowHandle: HWND) of object; TGetCurrentProjectEvent = procedure(var outProjectFileName: string) of object; TMessageParam = record @@ -737,6 +737,7 @@ var xResult: TStartNewInstanceResult; xFiles: TStrings; xParams: TMessageParams; + xSourceWindowHandle: HWND = 0; begin xResult := ofrStartNewInstance; if Assigned(FStartNewInstanceEvent) then @@ -744,7 +745,7 @@ begin xFiles := TStringList.Create; try TIDEInstances.AddFilesFromParams(aInParams, xFiles); - FStartNewInstanceEvent(xFiles, xResult); + FStartNewInstanceEvent(xFiles, xResult, xSourceWindowHandle); finally xFiles.Free; end; @@ -752,7 +753,7 @@ begin SetLength(xParams, 5); xParams[0] := TIDEInstances.MessageParam(PARAM_RESULT, IntToStr(Ord(xResult))); - xParams[1] := TIDEInstances.MessageParam(PARAM_HANDLEBRINGTOFRONT, IntToStr(Application.MainFormHandle)); + xParams[1] := TIDEInstances.MessageParam(PARAM_HANDLEBRINGTOFRONT, IntToStr(xSourceWindowHandle)); // do not use Application.MainFormHandle here - it steals focus from active source editor xParams[2] := TIDEInstances.MessageParam(PARAM_MODALERRORMESSAGE, dlgRunningInstanceModalError); xParams[3] := TIDEInstances.MessageParam(PARAM_FORCEUNIQUEMODALERRORMESSAGE, dlgForceUniqueInstanceModalError); xParams[4] := TIDEInstances.MessageParam(PARAM_NOTRESPONDINGERRORMESSAGE, dlgRunningInstanceNotRespondingError); diff --git a/ide/main.pp b/ide/main.pp index 9d8b32e1e7..e6f93893d7 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -186,7 +186,7 @@ type procedure HandleSelectFrame(Sender: TObject; var AComponentClass: TComponentClass); procedure OIChangedTimerTimer(Sender: TObject); procedure LazInstancesStartNewInstance(const aFiles: TStrings; - var Result: TStartNewInstanceResult); + var Result: TStartNewInstanceResult; var outSourceWindowHandle: HWND); procedure LazInstancesGetOpenedProjectFileName(var outProjectFileName: string); public // file menu @@ -9400,7 +9400,7 @@ begin end; procedure TMainIDE.LazInstancesStartNewInstance(const aFiles: TStrings; - var Result: TStartNewInstanceResult); + var Result: TStartNewInstanceResult; var outSourceWindowHandle: HWND); var xParams: TDoDropFilesAsyncParams; I: Integer; @@ -9433,6 +9433,11 @@ begin Result := ofrStartNewInstance; end; + if (SourceEditorManager.ActiveSourceWindow <> nil) + and (SourceEditorManager.ActiveSourceWindow.HandleAllocated) + then + outSourceWindowHandle := SourceEditorManager.ActiveSourceWindow.Handle; + if Result in [ofrStartNewInstance, ofrModalError, ofrForceSingleInstanceModalError] then Exit;