Forum Programmation.c Conserver les événements clavier sur le père, quand le processus fils est au premier plan

Posté par  (site web personnel, Mastodon) .
Étiquettes : aucune
0
31
juil.
2007
Bonjour,

avant tout, j'ai tourné en rond pendant pas mal de temps sur divers sites, des livres et autres documentations.. mais pourtant, je ne trouve pas le moyen de résoudre mon problème sans patcher le dit logiciel. Et j'aimerais autant que possible ne pas devoir en arriver là.

Voici le contexte. Imaginez un processus père qui lance un processus fils afin de lui transmettre des ordres via le STDIN du fils, et qui récupère les réponses par les STDOUT et STDERR. Jusque là, tout roule.
Le souci dans l'histoire, c'est le fils. Le processus fils est une application qui peut agir avec son utilisateur et dont il n'est pas possible directement de lui désactiver l'entrée clavier. Ainsi je perd la possibilité d'agir sur le père, juste parce que le fils s'est exécuté. (ceci dit, c'est possible qu'en framebuffer ce n'est pas un problème via une option du logiciel.. mais mes tests pour l'instant se limite à X11)

Tout ce que je veux, c'est que le fils se charge gentiment au premier plan, mais que tous les événements clavier continuent d'être envoyé au père.

Est-ce que vous voyez comment je pourrais créer cette situation?


Alors avant qu'on me demande des bouts de codes et autres exemples.. je vais directement vous expliquer ce que je fais. On (car je suis pas seul dans l'histoire) écris une librairie (libplayer) qui permettra (qui permet déjà en partie) de faire abstraction d'un lecteur audio/video spécifique. C'est-à-dire... imaginez que vous avez la libxine, la libvlc et mplayer. Pour la libxine et la libvlc c'est facile, se sont déjà des librairies et écrire les wrappers consistent juste à les utiliser. Mais avec MPlayer c'est toute une affaire.. ce n'est pas du tout une librairie et ça se transforme très difficilement en lib*m*player (j'ai tenté de le faire et j'ai perdus des heures inutilement).. alors le meilleur moyen consiste de le "forker" et d'exploiter son mode "slave" à travers des "pipes" (voir aussi popcorn de Kaa pour Freevo). Sauf que je _veux_ que seul la libplayer puisse donner des ordres à MPlayer.. et dès que MPlayer (le fils) se lance.. les événements clavier sont redirigés sur MPlayer.. et via les "binds" par défaut de celui-ci, si vous pressez 'q', MPlayer se ferme et je me prend un SIGPIPE à la figure (ce qui est tout à fait normal).

Et pour les curieux, c'est là http://hg.geexbox.org/libplayer/ et ça concerne le nouveau GeeXboX qui n'est pas prêt de sortir avant encore longtemps.


Merci pour vos éventuelles idées..

Mathieu SCHROETER

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.