IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

[Xlib] Intercepter les évènements


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut [Xlib] Intercepter les évènements
    Salut

    Je réalise actuellement une bibliothèque qui doit gérer des fenêtres X11. Ces fenêtres sont créées par l'utilisateur, mais ma bibliothèque doit absolument pouvoir intercepter les évènements qu'elle génère avant l'utilisateur.

    Je pourrais me contenter d'aller inspecter la file d'évènements sans retirer ceux-ci, mais un évènement pourra très bien être généré entre le moment où j'inspecte la file et le moment où l'utilisateur y retire l'évènement, donc je ne le verrais jamais.

    Y a t-il un moyen infaillible d'intercepter les évènements d'une fenêtre avant tout le monde ? Un peu comme le subclassing sous Windows, qui détourne les évènements vers une fonction perso avant de les envoyer à l'utilisateur.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    XSelectInput ??

    et XCheckWindowEvent et associés..

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    D'accord, c'est bien ce que je fais, mais ensuite si j'implémente une boucle classique pour les évènements je ne pourrais jamais être sûr que je vais tout intercepter avant l'utilisateur ?!

    Et puis d'ailleurs ça me pose un autre problème : certains évènements ne peuvent être écoutés que par un client (genre ButtonPress), donc comment faire pour que ma lib puisse écouter ces évènements si l'utilisateur le fait déjà ?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu ne te sers toujours que de la Xlib ?

    Tu connais la fenêtre que tu veux surveiller ?

    Si oui, il y a une manip ( très délicate) qui consiste à aller lire la liste des callbacks et placer la tienne en tête...

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    tu ne te sers toujours que de la Xlib ?

    Tu connais la fenêtre que tu veux surveiller ?
    Oui, et oui.

    Si oui, il y a une manip ( très délicate) qui consiste à aller lire la liste des callbacks et placer la tienne en tête...
    Ah ça commence à me plaire, vas-y je t'écoute.

    Et on va voir jusqu'à quel point on peut pousser cette technique : ensuite il faut que ça se mixe parfaitement avec wxWidgets ou Qt (ce qui marche très bien sous Windows, ceci-dit).

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Bon ça marche pas c'était avec Motif...

    ça dépend des toolkits je pense (dans la Xlib, pas de notions de callbacks (pas de widgets)).

    Ce que je te conseille :

    Normalement, avec le selectinput, tu dois pouvoir spécifier que tu veux que ce soit envoyé vers toi. Et avec XCheckTypedWindowEvent tu devrais le recevoir avant qu'il soit traité (puisqu'il est dans la queue), et en plus il l'enlève de la queue.. Donc tant que tu ne le remets pas, c'est toi qui l'as.. Et juste avant de le remettre, tu te mets un flag "passage=True", et en début de routine juste "if (passage==True) {passage = False ; return;}"..

Discussions similaires

  1. Intercepter les événements du controller d'un composant
    Par edblv dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 15/09/2014, 11h11
  2. Intercepter les événements souris
    Par FredericB dans le forum Composants FMX
    Réponses: 2
    Dernier message: 09/06/2013, 07h23
  3. [fenetre à onglets] Intercepter les événements des panels
    Par Regis.C dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 14/04/2005, 10h50
  4. Réponses: 2
    Dernier message: 06/04/2004, 08h39
  5. Intercepter les 'Exceptions'
    Par Teo dans le forum ASP
    Réponses: 3
    Dernier message: 05/01/2004, 19h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo