Envoyé par : GuiOhm
Date : 18/07/2007 10:49
Bonjour à tous.
Je développe actuellement un composant XPCOM en C++ pour Firefox 1.5 qui a pour but de fournir (via Corba) un service d'ouverture/fermeture de fenêtres basées sur un fichier XUL, en permettant de leur envoyer des messages (mise à jour du contenu) et de recevoir un retour. Ce composant délègue certaines opérations à un composant auxiliaire écrit en JavaScript.
Problème : l'ouverture d'une fenêtre repose sur nsIWindowWatcher::openWindow(), qui retourne son résultat avant que les inits ne soient réellement finies. D'où des problèmes constatés de synchro (perte de messages envoyés à une nouvelle fenêtre).
Solution (?) : Dans le XUL, je déclenche sur onload l'ajout d'un attribut au noeud window, mon composant C++ demande périodiquement à son auxiliaire JS de vérifier cet attribut, et ne retourne de sa fonction open() que quand l'attribut est positionné correctement.
Ca a l'air de fonctionner (le problème de synchro n'apparait plus), mais j'avoue ne pas être sûr du pourquoi.. Le composant en C++ s'exécute apparemment dans un thread (ou assimilé) différent de la gestion de la fenêtre, puisque l'attribut peut être positionné entre 2 vérifications alors que je l'endors (sleep()), mais est-ce solide ? D'autre part, ma solution impose d'avoir conscience du problème en écrivant le XUL pour la fenêtre, ce qui me dérange un peu..
N'y a-t-il pas une solution plus élégante ? Cette fonction openWindow() doit bien être utilisée assez souvent, non ? ^^
Merci d'avance pour vos commentaires, éclairés ou non :) GuiOhm
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.