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

GTK+ avec C & C++ Discussion :

Détection d'un clic droit avec GTK


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Par défaut Détection d'un clic droit avec GTK
    Bonjour,

    Je suis assez novice en programmation avec GTK.
    Je voudrais tout simplement faire appel à une fonction lorsque l'utilisateur clique avec le bouton droit de sa souris sur un bouton.

    J'ai déjà fait quelques recherches à droite à gauche, et je me suis rendu compte que ce n'était pas possible de faire un callback de façon directe (seul l'évènement "clicked" existe, sans distinction du clic droit ou gauche.)
    Toujours pendant ces recherches, j'ai fait la découverte d'une fonction apparemment bien pratique : gtk_get_current_event

    Seulement voilà, elle retourne un pointeur sur une variable du type "GdkEvent"

    En cherchant dans la documentation de GTK, j'ai trouvé ça (ça décrit la structure du type), mais ça ne m'aide pas vraiment...
    Concrètement, où se trouve l'information de clic droit dans cette énorme structure qu'est le type GdkEvent ?
    Comment construire un simple if(clicdroit) en C ?

    Merci de vos réponses.

  2. #2
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    c'est une union et pas une structure...maintenant la question est: quel est le type effectivement recu ^^
    ne connaissant pas vraiment GTK et en lisant rapidemen le lien que tu a fourni je dirait que c'est button
    et que pour connaitre quel bouton est enfoncé il suffi de comparer
    button.type à GDK_BUTTON_PRESS, GDK_2BUTTON_PRESS, GDK_3BUTTON_PRESS, GDK_BUTTON_RELEASE

    comparaison bit a bit evidemment !

    http://www.gtk-server.org/gtk1/gdk/g...GDKEVENTBUTTON

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Par défaut
    L'évènement "clicked" passe un GdkEvent à la fonction de callback, donc tu peux filtrer à ce niveau là les clics gauche/droit/double-clic/...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Par défaut
    Salut à vous deux !

    Merci beaucoup d'avoir pris le temps de répondre.

    J'ai un peu avancé dans ce que je voulais faire, mais je n'y suis pas parvenu.
    En effet, l'évènement "clicked" passe par un GdkEvent, qui est une union (et pas une structure, mea culpa là dessus), qui contient un champ "button" qui lui, est une structure, qui elle même contient un champ "button" de type guid. (pfiou !)
    Ensuite, après avoir récupéré ce "button", de type guid, j'ai trouvé dans la documentation des valeurs de retour (merci pour le lien kamouminator) :
    Citation Envoyé par documentation
    guint button
    The button which was pressed or released, numbered from 1 to 5. Normally button 1 is the left mouse button, 2 is the middle button, and 3 is the right button. On 2-button mice, the middle button can often be simulated by pressing both mouse buttons together.
    J'ai alors écrit le code suivant pour détecter un clic droit sur mon bouton :

    Code GTK : 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
     
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    void fonctionTest(GtkWidget *widget, gpointer data){
     /* Variables */
        GtkWidget *texte = NULL;
     
        texte = gtk_label_new("Quoi ? Aucun clic de detecte...");
        GdkEvent * unionCompliquee = gtk_get_current_event();
        guint typeClic=(*unionCompliquee).button.button ;
     
        if(typeClic==3){  /* Cas du clic droit */
        texte = gtk_label_new("Vous venez de cliquer sur le bouton droit");
        }
        if( typeClic ==1){  /* Cas du clic gauche */
        texte = gtk_label_new("Vous venez de cliquer sur le bouton gauche");
        }
        GtkWidget * autreFenetre = NULL;
        autreFenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_container_add(GTK_CONTAINER(autreFenetre), texte);
     /* Affichage */
        gtk_widget_show_all(autreFenetre);
    }
     
    int main(int argc, char **argv)
    {
        /* Variables */
        GtkWidget * MainWindow = NULL;
        GtkWidget * btnTest = NULL;
     
        /* Initialisation de GTK+ */
        gtk_init(&argc, &argv);
     
        /* Création de la fenêtre */
        MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        char *titre="Une fenetre tres simpliste";
        gtk_window_set_title(GTK_WINDOW(MainWindow), titre);
        gtk_window_set_position(GTK_WINDOW(MainWindow), GTK_WIN_POS_CENTER);
     
        /*Creation d'un bouton */
     btnTest = gtk_button_new_with_label("Tester les clics");
     g_signal_connect(G_OBJECT(btnTest), "clicked", G_CALLBACK(fonctionTest), NULL);
     gtk_container_add(GTK_CONTAINER(MainWindow), btnTest);
        g_signal_connect(G_OBJECT(MainWindow), "delete-event", G_CALLBACK(gtk_main_quit), NULL);
     
        /* Affichage */
        gtk_widget_show_all(MainWindow);
        gtk_main();
     
        /* On quitte.. */
        return EXIT_SUCCESS;
    }

    Je m'attendait à avoir quelquechose qui fonctionne...et en fait, ça ne fonctionne qu'à moitié :
    - Lors d'un clic gauche sur le bouton test, le message "Vous venez de cliquer sur le bouton gauche" s'affiche bien dans la fenêtre
    - Lors d'un clic droit, rien ne se passe, aucune fenêtre ne s'ouvre ! Le clic droit ne génère pas de signal "clicked" ? (sinon, ça devrait au moins afficher " Quoi ? Aucun clic de detecte...")

    Merci de vos réponses.

  5. #5
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    guint button
    The button which was pressed or released, numbered from 1 to 5. Normally button 1 is the left mouse button, 2 is the middle button, and 3 is the right button. On 2-button mice, the middle button can often be simulated by pressing both mouse buttons together.
    ca me parrait un peut bizar...comment detecterai tu si deux boutons sont appuiés ?
    désolé de repondre par une question ^^

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 31
    Par défaut
    Effectivement, autre bonne question....
    Si quelqu'un pouvait apporter un élément de réponse à une des questions, ou aux deux ça serait très appréciable !

    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Clic droit avec image dans un état
    Par Marsupio dans le forum IHM
    Réponses: 1
    Dernier message: 10/02/2011, 13h29
  2. Recevoir un clic droit avec un QPushButton
    Par prince_bouja dans le forum Débuter
    Réponses: 6
    Dernier message: 20/07/2010, 17h19
  3. Problème de clic droit avec Eclipse sous Ubuntu
    Par CocoRambo dans le forum Eclipse
    Réponses: 1
    Dernier message: 18/11/2009, 09h20
  4. clic droit avec JFileChooser
    Par mouss4rs dans le forum Agents de placement/Fenêtres
    Réponses: 12
    Dernier message: 02/04/2008, 23h47
  5. Problème Clic droit avec Explorateur Windows
    Par blandinais dans le forum Windows XP
    Réponses: 6
    Dernier message: 07/11/2006, 10h08

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