Forums : XPCom

Aller à la discussion :  Plus récente Plus ancienne

# nsIWindowWatcher::openWindow() et retour

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.