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 C++] Problème de focus sur le bureau et la barre des taches pour simuler un clic


Sujet :

Linux

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut [XLib C++] Problème de focus sur le bureau et la barre des taches pour simuler un clic
    Bonjour !
    Actuellement je fais mumuse avec la libnds et j'ai commencé a codé un genre de touchpad pour mon PC que j'utiliserais sur ma DS (ça n'a aucun interret en soi je vous l'accorde mais le principe m'amuse).

    Le problème est le suivant : quand je suis sur une fenêtre et que la DS demande a faire un clic (droit ou gauche) ça marche (quoi que j'ai du mal a virer les menus contextuels du clic droit) par contre dès que je passe sur le bureau et que je fais un clic droit, impossible de le fermer ou de selectionner un élément du menu contextuel (par contre le clic droit sur un fichier par exemple marche très bien). Pareil quand je clique sur ma barre de menus ou sur la liste de fenêtes , là, aucun des deux clics ne marche ce qui est plutot gênant :-° je pense que le problème vient de la selection de la focus window mais je ne sais absolument pas comment le résoudre ^^

    Voici la fonction que j'utilise pour simuler les clics (je l'ai piquée sur internet j'ai honte ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    void mouseClick(int button)
    {
        Display *display = XOpenDisplay(NULL);
     
        XEvent event;
     
        if(display == NULL)
        {
            cout << " 1 Erreur a l'ouverture du display \n" << endl;
            exit(EXIT_FAILURE);
        }
     
        memset(&event, 0x00, sizeof(event));
     
        event.type = ButtonPress;
        if(button == 1)
        {
            event.xbutton.button = Button1;
        }
        else if(button == 2)
        {
            event.xbutton.button = Button2;
        }
        else if(button == 3)
        {
            event.xbutton.button = Button3;
        }
     
        event.xbutton.same_screen = True;
     
        XQueryPointer(display, RootWindow(display, DefaultScreen(display)), &event.xbutton.root, &event.xbutton.window, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
     
        event.xbutton.subwindow = event.xbutton.window;
     
        while(event.xbutton.subwindow)
        {
            event.xbutton.window = event.xbutton.subwindow;
     
            XQueryPointer(display, event.xbutton.window, &event.xbutton.root, &event.xbutton.subwindow, &event.xbutton.x_root, &event.xbutton.y_root, &event.xbutton.x, &event.xbutton.y, &event.xbutton.state);
        }
     
        if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0)
        cout << " 2 Erreur a l'ouverture du display \n" << endl;
     
        XFlush(display);
     
        usleep(1000);
        event.type = ButtonRelease;
        event.xbutton.state = 0x100;
        if(XSendEvent(display, PointerWindow, True, 0xfff, &event) == 0)
        cout << " 3 Erreur a l'ouverture du display \n" << endl;
     
        XFlush(display);
     
        XCloseDisplay(display);
    }
    Ah au fait, niveau OS je suis sous Leeenux (dérivé d'Ubuntu pour EEEPC) et je compile correctement en linkant les libs qui vont bien.

    Quelqu'un aurait une solution pour moi ? Merci d'avance

    Su_e_do_is

  2. #2
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    parce qu'avant de rentrer là dedans, tu devrais apprendre et pratiquer X normal, et te faire une appli à toi..

    Et tenter de gérer les clics..


    Puis explorer la hiérarchie des fenêtres de ton ordi...


    Bref, comprendre comment ça marche...

    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Touché ^^

    Parce que à la base je faisais ça pour exploiter les possibilités de communcations réseau avec ma DS c'est de la que j'ai eu l'idée :-° mais merci beaucoup du conseil !

  4. #4
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    tout simplement parce que X est un modèle de l'ensemble de la workstation, et donc la barre des tâches ou autres sont des fenêtres comme les autres, mais avec certaines particularités.

    De même, les menus contextuels sont définis par des proriétés que tu peux modifier, mais il faut savoir où..


    De même, tu peux aussi bien détecter les ButtonPress que ButtonRelease, ou "click et pas relâcher", mais là aussi il faut comprendre..


    C'est pas grand chose, mais une bonne plongée dans les bases de X te serait très utile avant de tâtonner..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    D'accord (à la base j'aime bien apprendre en tatonnant) mais sinon tu aurais un bon tuto sur XLib avec la gestion globale et la simulation des evèmements clavier et souris a me conseiller ?

  6. #6
    Expert éminent sénior

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    le meilleur est le bouquin de X original :

    X Window System

    Sheifler, Gettys, Newman


    Clair, complet, par les auteurs eux-mêmes.


    Il y a aussi les O'Reilly (mais à mon avis moins clairs)

    D'autres existent sur le Net.



    Sinon, je peux te fournir un cours (moyennant finances )
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    D'accord merci beaucoup je vais creuser de ce côté là !

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/03/2014, 20h34
  2. Problème de focus sur un CDateTimeCtrl
    Par fantomchris dans le forum MFC
    Réponses: 4
    Dernier message: 15/10/2008, 14h04
  3. Problème de focus sur fenêtre d'erreur
    Par Djoul dans le forum VBScript
    Réponses: 1
    Dernier message: 08/07/2008, 16h24
  4. Problème de raccourci sur le bureau
    Par shadow31 dans le forum Windows XP
    Réponses: 6
    Dernier message: 03/06/2008, 14h54
  5. Problème de Focus sur un JTextField à l'ouverture de la fenêtre
    Par nicofromChina dans le forum Composants
    Réponses: 2
    Dernier message: 19/01/2007, 10h09

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