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 ;