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

Posté par (page perso) .
Tags : aucun
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
  • # Question similaire, sans réponse

    Posté par . Évalué à 1.

    Phentex c'était déjà posé une question quasi similaire sur le pilotage de mplayer : http://linuxfr.org/forums/19/22148.html . Il n'y avait pas eu de réponses, mais peut etre que tu peux le contacter pour voir s'il a trouvé une solution.
  • # Une solution se profile..

    Posté par (page perso) . Évalué à 3.

    Bon.. je crois que j'ai trouvé la solution.. je vais essayé c'est pas bien compliqué.. suffit d'attacher MPlayer à sa propre fenêtre X11 avec l'option -wid

    -wid <window ID> (also see -guiwid) (X11, OpenGL and DirectX only)
    This tells MPlayer to attach to an existing window. Useful to embed MPlayer in a browser (e.g. the plugger extension).
    • [^] # Re: Une solution se profile..

      Posté par (page perso) . Évalué à 2.

      Bon je confirme.. maintenant ça marche du tonnerre :-)

      si quelqu'un a ce problème et désir un morceau de code Xlib pour s'en sortir je lui file par email.. sinon faudra attendre que je commit pour la libplayer..

Suivre le flux des commentaires

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