diff --git a/lcl/lazhelphtml.pas b/lcl/lazhelphtml.pas
index 8f40899ea0..1fdd8c0fe3 100644
--- a/lcl/lazhelphtml.pas
+++ b/lcl/lazhelphtml.pas
@@ -382,56 +382,20 @@ begin
end;
end;
-procedure THTMLBrowserHelpViewer.FindDefaultBrowser(var Browser,
- Params: string);
-
- function Find(const ShortFilename: string): boolean;
- var
- Filename: String;
- begin
- Filename:=SearchFileInPath(ShortFilename+GetExeExt,'',
- GetEnvironmentVariableUTF8('PATH'),PathSeparator,
- [sffDontSearchInBasePath]);
- Result:=Filename<>'';
- if Result then begin
- FDefaultBrowser:=Filename;
- FDefaultBrowserParams:='%s';
- end;
- end;
-
+procedure THTMLBrowserHelpViewer.FindDefaultBrowser(var Browser, Params: string);
begin
- if FDefaultBrowser='' then begin
+ if FDefaultBrowser='' then
+ begin
if Assigned(OnFindDefaultBrowser) then
OnFindDefaultBrowser(FDefaultBrowser, FDefaultBrowserParams);
end;
- if FDefaultBrowser='' then begin
- {$IFDEF MSWindows}
- FDefaultBrowser:= SearchFileInPath('rundll32.exe','',
- GetEnvironmentVariableUTF8('PATH'),';',
- [sffDontSearchInBasePath]);
- FDefaultBrowserParams:='url.dll,FileProtocolHandler %s';
- {$ENDIF}
- {$IFDEF DARWIN}
- // open command launches url in the appropriate browser under Mac OS X
- Find('open');
- {$ENDIF}
- end;
- if FDefaultBrowser='' then begin
- // Then search in path. Prefer open source ;)
- if Find('xdg-open') // Portland OSDL/FreeDesktop standard on Linux
- or Find('htmlview') // some redhat systems
- or Find('firefox')
- or Find('mozilla')
- or Find('galeon')
- or Find('konqueror')
- or Find('safari')
- or Find('netscape')
- or Find('opera')
- or Find('iexplore') then ;// some windows systems
- end;
- Browser:=FDefaultBrowser;
- Params:=FDefaultBrowserParams;
- DebugLn('THTMLBrowserHelpViewer.FindDefaultBrowser Browser=',Browser,' Params=',Params);
+ if FDefaultBrowser = '' then
+ LCLProc.FindDefaultBrowser(FDefaultBrowser, FDefaultBrowserParams);
+
+ Browser := FDefaultBrowser;
+ Params := FDefaultBrowserParams;
+
+ //DebugLn('THTMLBrowserHelpViewer.FindDefaultBrowser Browser=',Browser,' Params=',Params);
end;
procedure THTMLBrowserHelpViewer.Assign(Source: TPersistent);
diff --git a/lcl/lclproc.pas b/lcl/lclproc.pas
index e84af5d5c6..c433983f0a 100644
--- a/lcl/lclproc.pas
+++ b/lcl/lclproc.pas
@@ -31,7 +31,7 @@ interface
uses
{$IFDEF Darwin}MacOSAll, {$ENDIF}
- Classes, SysUtils, Math, TypInfo, Types, FPCAdds, AvgLvlTree, FileUtil,
+ Classes, SysUtils, Math, TypInfo, Types, FPCAdds, AvgLvlTree, FileUtil, UTF8Process,
LCLStrConsts, LCLType, WSReferences
{$IFNDEF DisableCWString}{$ifdef unix}{$ifndef DisableIconv}, cwstring{$endif}{$endif}{$ENDIF}
;
@@ -353,6 +353,9 @@ procedure LCLGetLanguageIDs(var Lang, FallbackLang: String);
function CreateFirstIdentifier(const Identifier: string): string;
function CreateNextIdentifier(const Identifier: string): string;
+// URL opening
+function FindDefaultBrowser(out ABrowser, AParams: String): Boolean;
+function OpenURL(AURL: String): Boolean;
implementation
@@ -4294,6 +4297,66 @@ begin
+IntToStr(1+StrToIntDef(copy(Identifier,p+1,length(Identifier)-p),0));
end;
+function FindDefaultBrowser(out ABrowser, AParams: String): Boolean;
+
+ function Find(const ShortFilename: String; out ABrowser: String): Boolean; inline;
+ begin
+ ABrowser := SearchFileInPath(ShortFilename + GetExeExt, '',
+ GetEnvironmentVariableUTF8('PATH'), PathSeparator,
+ [sffDontSearchInBasePath]);
+ Result := ABrowser <> '';
+ end;
+
+begin
+ {$IFDEF MSWindows}
+ Find('rundll32', ABrowser);
+ AParams := 'url.dll,FileProtocolHandler %s';
+ {$ELSE}
+ {$IFDEF DARWIN}
+ // open command launches url in the appropriate browser under Mac OS X
+ Find('open', ABrowser);
+ AParams := '%s';
+ {$ELSE}
+ ABrowser := '';
+ {$ENDIF}
+ {$ENDIF}
+ if ABrowser = '' then
+ begin
+ AParams := '%s';
+ // Then search in path. Prefer open source ;)
+ if Find('xdg-open', ABrowser) // Portland OSDL/FreeDesktop standard on Linux
+ or Find('htmlview', ABrowser) // some redhat systems
+ or Find('firefox', ABrowser)
+ or Find('mozilla', ABrowser)
+ or Find('galeon', ABrowser)
+ or Find('konqueror', ABrowser)
+ or Find('safari', ABrowser)
+ or Find('netscape', ABrowser)
+ or Find('opera', ABrowser)
+ or Find('iexplore', ABrowser) then ;// some windows systems
+ end;
+ Result := ABrowser <> '';
+end;
+
+function OpenURL(AURL: String): Boolean;
+var
+ ABrowser, AParams: String;
+ BrowserProcess: TProcessUTF8;
+begin
+ Result := FindDefaultBrowser(ABrowser, AParams) and FileExistsUTF8(ABrowser) and FileIsExecutable(ABrowser);
+ if not Result then
+ Exit;
+
+ // run
+ BrowserProcess := TProcessUTF8.Create(nil);
+ try
+ BrowserProcess.CommandLine := ABrowser + ' ' + Format(AParams, [AURL]);
+ BrowserProcess.Execute;
+ finally
+ BrowserProcess.Free;
+ end;
+end;
+
procedure FreeLineInfoCache;
var
diff --git a/lcl/utf8process.pp b/lcl/utf8process.pp
index 812ba05989..04921bd1be 100644
--- a/lcl/utf8process.pp
+++ b/lcl/utf8process.pp
@@ -28,7 +28,7 @@ unit UTF8Process;
interface
uses
- Classes, SysUtils, Process, LCLProc, FileUtil;
+ Classes, SysUtils, Process, FileUtil;
type
{ TProcessUTF8 }