Bon ça s'éclaircit...
En fait si c'est la même chose.. C'est juste que Windows ne fournit pas (sauf avec la xlib sous cygwin) de modèles en vraies couches (il y en a, mais c'est plus complexe). Mais comme je dis, si tu as des "callbacks", c'est que tu utilises des Widgets, et donc un toolkit.... X ne connait que des événements...
En fait, ce que tu voudrais, ça doit pouvoir se faire au moyen de 2 routines :
- Pour ceux qui utilisent la routine de création de ta biblo, pas de problèmes, c'est toi qui contrôles.
- Pour ceux qui fabriquent une fenêtre à l'extérieur, il y a 3 solutions :
- Soit il y a une routine dans ta biblio Register_Window , qui a en entrée le Window (de X), et tu rajoutes tes événements à toi (tout en sachant que tu n'as pas le contrôle de l'ordre dans lequel ça se passe)
- Soit il y a une fonction dans ta biblio Register_Window, qui a en entrée une fonction que EUX doivent définir (mais dont tu contrôles certains paramètres) qui te donne le WindowId de leur topWidget...
Et dans ce cas, tu pourras ajouter tes événements sur ce topWidget, sachant que dans le traitement les événements doivent descendre la hiérarchie.
- Soit tu ajoutes tes select sur la RootWindow, et tu gères....
En fait, à mon avis le plus simple (même si apparaît plus compliqué) est d'utiliser la 3ième solution (en analysant au premier appel d'une fenêtre non-crée par toi la hiérarchie pour stocker les Window enfants).
La première solution est la plus simple, mais comme je dis tu n'as pas (tu ne pourras pas) avoir le contrôle de l'ordre. Et tu devra re-dispatcher les évènements...
En fait en gros, tu as tes "callbacks" en fonction des évènements, identifiées par des types, et tu mets des flags pour dire si c'est intéressant ou non, et si tu as déjà traité (du coup tes while() ne seront pas infinis). Le mieux est à ce compte-là de faire XPeekIfEvent (ou l'équivalent, je ne me souviens plus) qui vérifie si l'événement existe mais ne le retire pas de la liste...
Les outils/toolkit/IDE comme GTK, Motif, SDL, OpenGL etc... (c'est tout le problème, et le fait que les Widgets Motifs et OpenGL sont nettement plus élaborés que les autres) ne sont pas standards, mais sont deux couches au-dessus de la Xlib (d'abord la XToolkit, puis eux).
Et que c'est fait pour faire des applis "bateaux". Dès que tu veux faire de la programmation fine, tu dois tombr sous X, et là tu as le problème que des propriétés sont cachées, diffciles à atteindre, etc...
Je dirais donc en conclusion :
- Pourquoi autorises-tu les 2 modes de fonctionnement ? (la création de fenêtre par X dépendra du Toolkit et du WM, donc l'ornementation, les bordures, les boutons minimaux, etc..)
- Si tu fais une biblo qui gères le fenêtrage etc tu refais un toolkit ? tu refais un GTK ou autre ?
- Si tu veux fournir des fonctionalités, alors fournis des fonctionalités... MAis j'ai l'impression que là tu veux un peu "ré-inventer" la roue, en tentant d'être compatible avec les autres, ce qui n'est pas possible (fonctionalités supplémentaires spécifiques).
Enfin, si j'ai bien compris :roll: