diff --git a/components/onlinepackagemanager/opkman_intf.pas b/components/onlinepackagemanager/opkman_intf.pas index d6572506ed..cb348e87bf 100644 --- a/components/onlinepackagemanager/opkman_intf.pas +++ b/components/onlinepackagemanager/opkman_intf.pas @@ -34,7 +34,7 @@ uses // IdeIntf LazIDEIntf, PackageIntf, PackageLinkIntf, PackageDependencyIntf, IDECommands, // OPM - opkman_downloader, opkman_serializablepackages, opkman_installer, opkman_updates; + opkman_downloader, opkman_serializablepackages, opkman_installer, opkman_mainfrm; type @@ -117,14 +117,6 @@ begin if Assigned(PackageDownloader) then if PackageDownloader.DownloadingJSON then PackageDownloader.Cancel; - if Assigned(Updates) then - begin - Updates.StopUpdate; - Updates.Terminate; - while Assigned(Updates) do - CheckSynchronize(100); // wait for update thread to terminate - // Remains the slightest chance of a mem leak, since the update thread needs still enough cpu time to finish running the destructor - end; end; @@ -145,12 +137,10 @@ begin FTimer.Enabled := False; if (not LazarusIDE.IDEIsClosing) then begin - if Options.CheckForUpdates <> 5 then + if (Options.CheckForUpdates <> 5) and (not Assigned(MainFrm)) then begin PackageDownloader.DownloadJSON(Options.ConTimeOut*1000, True); LazarusIDE.AddHandlerOnIDEClose(@DoOnIDEClose); - Updates := TUpdates.Create; - Updates.StartUpdate; end; end; end; diff --git a/components/onlinepackagemanager/opkman_mainfrm.lfm b/components/onlinepackagemanager/opkman_mainfrm.lfm index 4e65e4a763..ca56fae664 100644 --- a/components/onlinepackagemanager/opkman_mainfrm.lfm +++ b/components/onlinepackagemanager/opkman_mainfrm.lfm @@ -9,6 +9,7 @@ object MainFrm: TMainFrm Constraints.MinHeight = 400 Constraints.MinWidth = 700 KeyPreview = True + OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown diff --git a/components/onlinepackagemanager/opkman_mainfrm.pas b/components/onlinepackagemanager/opkman_mainfrm.pas index 4449c7d7f0..4bb90749fd 100644 --- a/components/onlinepackagemanager/opkman_mainfrm.pas +++ b/components/onlinepackagemanager/opkman_mainfrm.pas @@ -38,7 +38,7 @@ uses // IdeIntf IDECommands, PackageIntf, // OpkMan - opkman_downloader, opkman_installer, + opkman_downloader, opkman_installer, opkman_updates, opkman_serializablepackages, opkman_visualtree, opkman_const, opkman_common, opkman_progressfrm, opkman_zipper, opkman_packagelistfrm, opkman_options, opkman_optionsfrm, opkman_createrepositorypackagefrm, opkman_maindm, @@ -114,6 +114,7 @@ type tbUpdate: TToolButton; tbOpenRepo: TToolButton; procedure bReturnClick(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure miCopyToClpBrdClick(Sender: TObject); procedure miCreateJSONForUpdatesClick(Sender: TObject); @@ -234,6 +235,8 @@ begin SetupControls; SetupColors; GetPackageList; + Updates := TUpdates.Create; + Updates.StartUpdate; end end; @@ -1256,6 +1259,18 @@ begin miJSONShowClick(miJSONShow); end; +procedure TMainFrm.FormCloseQuery(Sender: TObject; var CanClose: boolean); +begin + if Assigned(Updates) then + begin + Updates.StopUpdate; + Updates.Terminate; + while Assigned(Updates) do + CheckSynchronize(100); // wait for update thread to terminate + // Remains the slightest chance of a mem leak, since the update thread needs still enough cpu time to finish running the destructor + end; +end; + procedure TMainFrm.miNameAscClick(Sender: TObject); var