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 :

Problèmes d'affichage de raccourcis clavier : GtkAccelGroup


Sujet :

GTK+ avec C & C++

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut Problèmes d'affichage de raccourcis clavier : GtkAccelGroup
    Bonjour,

    je veux mettre en place une série de raccourcis clavier pour mon application.
    Tous les raccourcis que j'ai créé marchent parfaitement. Le seul petit problème est que certains ne s'affichent pas correctement dans ma barre de menu.

    Un exemple avec mon menu Fichier. Je vais vous représenter schématiquement l'affichage du menu :
    Fichier
    |____ Nouveau Ctrl + N
    |____ Ouvrir Ctrl + O
    |____ Enregistrer Ctrl + S
    |____ Enregistrer sous Shift + Ctrl + S
    |____ Quitter Ctrl + Q

    Les raccourcis pour nouveau, ouvrir, enregistrer et quitter sont bien ajoutés au menu. Il me manque l'affichage du raccourci clavier pour Enregistrer sous, car lorsque je fais la combinaison de touches (Shift + Ctrl + S), la fonction rattachée au raccourci s'exécute.

    S'avez-vous d'où cela peut provenir ?

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Peux-tu montrer la partie où tu enregistre ce raccourcis clavier histoire de voir que tu n'as pas fait de bétises Ca évitera moultes questions qui servent à rien

  3. #3
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    Bonjour,

    pour créer mes raccourcis, j'ai suivi ce tutoriel

    voici l'appel de ma fonction pour créer un raccourci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    accelerator_new (pApp->pAccelGroup, "<Control>N", ACCEL_PATH_NEW, G_CALLBACK (accel_new), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control>O", ACCEL_PATH_OPEN, G_CALLBACK(accel_open), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control>S", ACCEL_PATH_SAVE, G_CALLBACK(accel_save), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control><Shift>S", ACCEL_PATH_SAVEAS, G_CALLBACK(accel_saveAs), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control>W", ACCEL_PATH_CLOSE, G_CALLBACK(accel_close), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control>Q", ACCEL_PATH_QUIT, G_CALLBACK(accel_quit), (gpointer) pApp);
    accelerator_new (pApp->pAccelGroup, "<Control>F5", ACCEL_PATH_PREFERENCES, G_CALLBACK(accel_preferences), (gpointer) pApp);
    Le contenu des constantes ACCEL_PATH_*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #define ACCEL_PATH_NEW          "<editeurGTK>/Fichier/Nouveau"
    #define ACCEL_PATH_OPEN         "<editeurGTK>/Fichier/Ouvrir"
    #define ACCEL_PATH_SAVE         "<editeurGTK>/Fichier/Enregistrer"
    #define ACCEL_PATH_SAVEAS       "<editeurGTK>/Fichier/Enregistrer sous"
    #define ACCEL_PATH_CLOSE        "<editeurGTK>/Fichier/Fermer"
    #define ACCEL_PATH_QUIT         "<editeurGTK>/Fichier/Quitter"
    #define ACCEL_PATH_PREFERENCES  "<editeurGTK>/Réseau/Préférences"
    La fonction accelerator_new(...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void        accelerator_new (GtkAccelGroup *p_accel_group, const gchar *accelerator, const gchar *accel_path, GCallback callback, gpointer user_data){
        guint key;
        GdkModifierType mods;
        GClosure *closure = NULL;
     
        gtk_accelerator_parse (accelerator, &key, &mods);
        closure = g_cclosure_new (callback, user_data, NULL);
        gtk_accel_group_connect (p_accel_group, key, mods, GTK_ACCEL_VISIBLE, closure);
        gtk_accel_map_add_entry (accel_path, key, mods);
        }
    Les fonctions de type accel_*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    gboolean    accel_new (GtkAccelGroup *accel_group, GObject *acceleratable, guint keyval, GdkModifierType modifier, gpointer user_data){
        OnNewButton(NULL, user_data);
        return TRUE;
        }
    Sachant que dans tous les cas, la fonction appellée fonctionne correctement. Le seul problème est l'affichage des raccourcis

    Merci à ceux qui prendront le temps de trouver la faille

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Moi j'ai toujours utilisé la fonction gtk_widget_add_accelerator et en transmettant les modificateurs de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (GdkModifierType) GDK_SHIFT_MASK | GDK_CONTROL_MASK
    Là ca fonctionne...

  5. #5
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    je regarde ça et je te dis

  6. #6
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    Bonsoir,

    j'ai regardé la fonction (et celles qui y sont liées) que tu m'as indiqué et je ne comprends pas très bien certaines choses. Tout d'abord voici la fonction en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void gtk_widget_add_accelerator (GtkWidget *widget, const gchar 
           *accel_signal, GtkAccelGroup *accel_group, guint accel_key, 
           GdkModifierType accel_mods, GtkAccelFlags accel_flags);
    1) le paramètre const gchar *accel_signal attend quelque chose du genre : gtk_widget_add_accelerator(GTK_WIDGET(pMenuItem), G_RUN_ACTION(fonction_a_appeler), ...) ?

    2) le paramètre guint accel_key attend une combinaison de touches, par exemple "<Control><Shift>S" ?

    Voici les questions que je me pose, j'espère que vous pourrez répondre à mes questions Merci

  7. #7
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par bit_o
    Bonsoir,

    j'ai regardé la fonction (et celles qui y sont liées) que tu m'as indiqué et je ne comprends pas très bien certaines choses. Tout d'abord voici la fonction en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void gtk_widget_add_accelerator (GtkWidget *widget, const gchar 
           *accel_signal, GtkAccelGroup *accel_group, guint accel_key, 
           GdkModifierType accel_mods, GtkAccelFlags accel_flags);
    1) le paramètre const gchar *accel_signal attend quelque chose du genre : gtk_widget_add_accelerator(GTK_WIDGET(pMenuItem), G_RUN_ACTION(fonction_a_appeler), ...) ?
    Nan, c'est simplement le nom du signal à utiliser avec le raccourcis clavier donc pour les menu et pour en gérer le click, c'est le signal:
    Citation Envoyé par bit_o
    2) le paramètre guint accel_key attend une combinaison de touches, par exemple "<Control><Shift>S" ?
    En fait c'est simplement une des constantes des touches clavier que tu peux retrouver dans le fichier gdkkeysyms.h

  8. #8
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 287
    Points : 208
    Points
    208
    Par défaut
    c'est parfait tout marche bien et il y a une économie de lignes assez conséquente. Merci Franck

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

Discussions similaires

  1. [Langage/Algorithme] Detection et affichage de raccourcis clavier
    Par binmx dans le forum C++Builder
    Réponses: 1
    Dernier message: 12/07/2010, 11h45
  2. Problèmes avec raccourcis claviers
    Par mrfirefunk dans le forum Applets
    Réponses: 0
    Dernier message: 19/11/2007, 10h52
  3. Problème raccourci clavier?
    Par Ourszor dans le forum Autres Logiciels
    Réponses: 14
    Dernier message: 13/12/2006, 13h55
  4. Problème de création de raccourci clavier (Ctrl+O)
    Par Milowen dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2006, 18h31
  5. Réponses: 5
    Dernier message: 06/08/2006, 19h38

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