Citation :
Papiosaur
Excellente cette commoditée Tcheko !
Bravo :=! :=! :=!
En quoi c'est un hack ?
Czk
-------------------------------------
Quelque soit le chemin que tu prendras dans la vie, tu auras des ampoules aux pieds.
Czeko.free.fr
C'est précisé dans la documentation. Toutefois pour les non anglophones :
Les appels MoveWindow et SizeWindow ont été conçus pour être appelé uniquement par la tâche ou les tâches (du moment qu'elles arbitrent l'accès) propriétaires de la fenêtre. Comme il n'est pas possible de verrouiller l'accès à une fenêtre pour une tâche tiers (qui ne 'possède' pas la propriété de la fenêtre), il n'y a aucune garantie que la fenêtre ne disparaissent pas entre temps...
Grosso modo, la pire situation possible :
HotBorder va appeler MoveWindow pour la fenêtre X. Il a récupérer un pointer vers la fenêtre X. Une fois ce pointeur récupéré, le scheduler Exec donne la main à la tâche propriétaire de la fenêtre X que HotBorder va modifier. Cette tâche décide de fermer cette fenêtre. Quelques ms plus tard, le scheduler redonne la main à HotBorder qui termine ses manipulations sur une fenêtre qui n'existe plus...
Toutefois, le hack fonctionne de façon assez sûr pour plusieurs raisons :
- les appels MoveWindow/SizeWindow ont lieu dans l'input.device avec une priorité de 20
- la fenêtre récupérée est toujours la fenêtre active obtenue par le biais de Intuition
- la fenêtre active est généralement celle qui est déplacée.
Cependant, cela reste un **hack**. Il n'est pas possible de garantir l'existence de la fenêtre à moins d'en être propriétaire...
Donc, il y a potentiellement un risque d'explosion en vol non nul... :)
La seule solution pour rendre cela propre, c'est d'étendre Intuition pour ajouter ce genre de fonctionnalité directement dedans...
Bref. :)
A vos propres risques!