diff --git a/components/chmhelp/lhelp/chmcontentprovider.pas b/components/chmhelp/lhelp/chmcontentprovider.pas index b7953fb182..79b7956167 100644 --- a/components/chmhelp/lhelp/chmcontentprovider.pas +++ b/components/chmhelp/lhelp/chmcontentprovider.pas @@ -566,6 +566,7 @@ begin i := 0; while (HasSearchIndex = False) and (i < fChms.Count) do begin + // Look for binary full text search index in CHM file HasSearchIndex := fChms.Chm[i].ObjectExists('/$FIftiMain') > 0; inc(i); end; diff --git a/components/chmhelp/lhelp/lhelp.lpi b/components/chmhelp/lhelp/lhelp.lpi index e371fd4cec..42bd5e14c1 100644 --- a/components/chmhelp/lhelp/lhelp.lpi +++ b/components/chmhelp/lhelp/lhelp.lpi @@ -86,7 +86,6 @@ - diff --git a/components/chmhelp/lhelp/lhelpcore.pas b/components/chmhelp/lhelp/lhelpcore.pas index 8d5ffe2716..f205fd5d79 100644 --- a/components/chmhelp/lhelp/lhelpcore.pas +++ b/components/chmhelp/lhelp/lhelpcore.pas @@ -96,6 +96,7 @@ type procedure ViewMenuContentsClick(Sender: TObject); private { private declarations } + // SimpleIPC server name (including unique part as per help protocol) fServerName: String; // Receives commands from IDE fInputIPC: TSimpleIPCServer; @@ -108,7 +109,7 @@ type fConfig: TXMLConfig; fHasShowed: Boolean; fHide: boolean; //If yes, start with content hidden. Otherwise start normally - // Load preferences; separate preferences per coupled server/IDE + // Load preferences. Preferences are unique for server-lhelp pairs and plain lhelp procedure LoadPreferences(AIPCName: String); // Saves preferences. Uses existing config loaded by LoadPreferences procedure SavePreferences; @@ -296,7 +297,7 @@ end; procedure THelpForm.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin - Visible:= False; + Visible := false; Application.ProcessMessages; FileMenuCloseItemClick(Sender); StopComms; @@ -306,7 +307,9 @@ end; procedure THelpForm.FormCreate(Sender: TObject); begin fContext := -1; + // Safe default: fHide := false; + // ReadCommandLineOptions will set fHide if requested ReadCommandLineOptions; LoadPreferences(fServerName); // Only start IPC if server name passed in --ipcname @@ -315,7 +318,6 @@ begin StartComms(fServerName); end; // If user wants lhelp to hide, hide entire form. - // Detect this choice based on fHide set in ReadCommandLineOptions if fHide then WindowState := wsMinimized else @@ -363,6 +365,7 @@ procedure THelpForm.ViewMenuContentsClick(Sender: TObject); begin // TabsControl property in TChmContentProvider if Assigned(ActivePage) then + begin with TChmContentProvider(ActivePage.ContentProvider) do begin TabsControl.Visible := not TabsControl.Visible; @@ -370,6 +373,7 @@ begin Splitter.Left := TabsControl.Left + 4; //for splitter to move righter ViewMenuContents.Checked := TabsControl.Visible; end; + end; end; procedure THelpForm.LoadPreferences(AIPCName: String); @@ -385,24 +389,32 @@ begin // server-dependent constant together with a process ID. // Strip out the process ID to get fixed config file names for one server ServerPart := Copy(AIPCName, 1, length(AIPCName)-5); //strip out PID - PrefFile:=Format('%slhelp-%s.conf',[IncludeTrailingPathDelimiter(PrefFile), ServerPart]); + PrefFile := Format('%slhelp-%s.conf',[IncludeTrailingPathDelimiter(PrefFile), ServerPart]); fConfig := TXMLConfig.Create(Self); - fConfig.Filename:=PrefFile; + fConfig.Filename := PrefFile; - Left := fConfig.GetValue('Position/Left/Value', Left); - Top := fConfig.GetValue('Position/Top/Value', Top); - Width := fConfig.GetValue('Position/Width/Value', Width); - Height := fConfig.GetValue('Position/Height/Value', Height); - - if fConfig.GetValue('Position/Maximized',false)=true then - Windowstate:=wsMaximized; + // Restore window but only if currently not being asked to hide + if not(fHide) then + begin + if (fConfig.GetValue('Position/Maximized',false)=true) then + begin + Windowstate:=wsMaximized + end + else + begin + Left := fConfig.GetValue('Position/Left/Value', Left); + Top := fConfig.GetValue('Position/Top/Value', Top); + Width := fConfig.GetValue('Position/Width/Value', Width); + Height := fConfig.GetValue('Position/Height/Value', Height); + end; + end; OpenDialog1.FileName := fConfig.GetValue('LastFileOpen/Value', OpenDialog1.FileName); RecentCount:= fConfig.GetValue('Recent/ItemCount/Value', 0); - - for i := RecentCount-1 downto 0 do // downto since oldest are knocked off the list + // downto since oldest are knocked off the list: + for i := RecentCount-1 downto 0 do AddRecentFile(fConfig.GetValue('Recent/Item'+IntToStr(i)+'/Value','')); end; @@ -410,11 +422,13 @@ procedure THelpForm.SavePreferences; var i: Integer; begin + if not(assigned(fConfig)) then + exit; //silently abort if not (WindowState = wsMaximized) then begin - fConfig.SetValue('Position/Left/Value', Left); - fConfig.SetValue('Position/Top/Value', Top); - fConfig.SetValue('Position/Width/Value', Width); + fConfig.SetValue('Position/Left/Value', Left); + fConfig.SetValue('Position/Top/Value', Top); + fConfig.SetValue('Position/Width/Value', Width); fConfig.SetValue('Position/Height/Value', Height); end else @@ -425,7 +439,8 @@ begin fConfig.SetValue('LastFileOpen/Value', OpenDialog1.FileName); fConfig.SetValue('Recent/ItemCount/Value', FileMenuOpenRecentItem.Count); - for i := 0 to FileMenuOpenRecentItem.Count-1 do // downto since oldest are knocked off the list + // downto since oldest are knocked off the list: + for i := 0 to FileMenuOpenRecentItem.Count-1 do fConfig.SetValue('Recent/Item'+IntToStr(i)+'/Value', TRecentMenuItem(FileMenuOpenRecentItem.Items[I]).URL); fConfig.Flush; @@ -618,6 +633,7 @@ begin begin if LowerCase(ParamStrUTF8(X)) = '--ipcname' then begin + // IPC name; includes unique PID or other identifier IsHandled[X] := True; inc(X); if X <= ParamCount then @@ -835,6 +851,7 @@ begin en := false; // Hide content page if Assigned(ActivePage) then + begin with TChmContentProvider(ActivePage.ContentProvider) do begin ActivePage.Visible := false; @@ -842,12 +859,14 @@ begin TabsControl.Visible := false; Splitter.Visible := false; end; + end; end else begin en := Assigned(ActivePage); // Show content page if en then + begin with TChmContentProvider(ActivePage.ContentProvider) do begin ActivePage.Visible := true; @@ -855,6 +874,7 @@ begin TabsControl.Visible := true; Splitter.Visible := true; end; + end; end; BackBttn.Enabled := en;