L'objectif: lancer un browser similaire à Mozilla depuis un programme Kylix.
Le problème: par défaut, lorsqu'un programme Kylix 3 lance Galeon, ce programme n'a pas de difficulté si Gnome est correctement installé. Mais lorsque le programme est lancé depuis l'IDE Kylix, Galeon ne se charge pas.
La raison: lors de l'exécution depuis l'IDE,
Kylix définit certaines variables d'environnement,
et en particulier pointe MOZILLA_FIVE_HOME
vers le répertoire personnel borpreview.
Cette définition sert à l'IDE à offrir la prévisualisation
des fichiers HTML par l'encapsulation de Mozilla.
Mais elle entre en conflit avec le script
/usr/bin/galeon
qui cherche à identifier l'emplacement de la librairie
partagée Mozilla.
La solution:: supprimer
MOZILLA_FIVE_HOME, en ajoutant
putenv ('MOZILLA_FIVE_HOME') ;
avant l'invocation de Galeon.
implementation
{$R *.xfm}
uses LibC ;
var pid : Integer ;
procedure TForm1.Button1Click (Sender : TObject) ;
const
csURL = ' title="Riff News">http://www.riff.org/' ;
var res : Integer ;
begin
pid := fork ;
putenv ('MOZILLA_FIVE_HOME') ;
if pid = 0 then
begin
res := execlp ('galeon', 'galeon',
'--sm-disable', '--disable-crash-dialog',
'--geometry='
+ IntToStr (Memo1.Width)
+ 'x' + IntToStr (Memo1.Height)
+ '+' + IntToStr (Form1.Left + Memo1.Left)
+ '+' + IntToStr (Form1.Top + Memo1.Top),
'-x', csURL, nil) ;
end
else
if pid < 0 then
begin
Memo1.Lines.Add ('Erreur de fork, errno = '
+ IntToStr (errno)) ;
Application.Terminate
end
else
// Suite de l'application principale.
// Le signal SIGCHLD permet d'être informé de la fermeture du browser
end ;