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 :

GtkBox avec choix exclusif ToggleButton


Sujet :

GTK+ avec C & C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Par défaut GtkBox avec choix exclusif ToggleButton
    Bonjour,
    J'ai constitué un GtkBox comportant plusieurs GtkToggleButton. Le mécanisme consiste à reproduire un choix exclusif dans cet ensemble. Quand on clique sur un ToggleButton, ce choix doit déactiver tous les autres ToggleButton à l'aide d'un CallBack. Il s'agit du même mécanisme existant dans des groupes de RadioButton déjà proposés par gtk. Mais ces derniers, pour des raisons fonctionnelles, ne conviennent pas aux besoins.
    Pour cela, j'utilise le type de code suivant:
    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
    58
     
    void
    togglebutton1_clicked_cb (GtkToggleButton *button)
    {
     
    (void) toggle_choix_exclusif (GTK_WIDGET(button));
     
    }
     
     
    void
    togglebutton2_clicked_cb (GtkToggleButton *button)
    {
     
    (void) toggle_choix_exclusif (GTK_WIDGET(button));
     
    }
     
    void
    togglebutton3_clicked_cb (GtkToggleButton *button)
    {
     
    (void) toggle_choix_exclusif (GTK_WIDGET(button));
    ....
     
     
    void
    toggle_choix_exclusif (GtkWidget *widget)
    {
      GtkWidget *tmp_widget;
      GList *children, *l;
     
     
     
    /* Toujours 1 choix actif et 1 seul */
        if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
          gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), TRUE);
     
    /* Remonter au GtkBox contenant les différents ToggleButton */
    tmp_widget = gtk_widget_get_parent(widget);
    gtk_container_get_children (GTK_CONTAINER (tmp_widget));
     
      for (l = children; l; l = l->next)
      {
        if (GTK_IS_TOGGLE_BUTTON(l->data))
        {
    /* Désactiver les autres ToggleButton */
          if (l->data != widget)
          {
            if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(l->data)))
              gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(l->data), FALSE);
          }
        }
      }
     
      g_list_free (children);
     
    }
    Mon problème avec ce code provient du fait que le signal "toggled" ou "clicked" est apparemment activé à chaque fois que l'instruction gtk_toggle_button_set_active est exécutée. Ainsi le callback "toggle_choix_exclusif" est bouclé indéfiniment comme un traitement récursif indésirable.
    J'aimerais savoir si quelqu'un parmi vous a une idée d'une solution à ce problème de signal traité par gtk/glade (glade_xml_signal_autoconnect).

    Merci à l'avance et cordialement.

  2. #2
    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
    Soit du bloques/débloques le signal dans ton callback, soit tu utilises une variable booléeene pour savoir si tu es en train de gérer un callback ou si c'est un "vrai" signal à prendre en compte.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 108
    Par défaut Signal de GtkToggleButton (suite)
    Merci pour vos suggestions. Une autre solution que j'ai trouvée entretemps est d'intercepter le signal "released" à la place de "clicked" ou "toggled". Car ce signal, selon mes tests, est ignoré par "gtk_toggle_button_set_active". J'aimerais néanmoins savoir si cette solution, très simple, est-elle fiable par rapport aux solutions classiques que vous aviez suggérées:
    g_signal_handlers_block_by_func
    g_signal_handlers_unblock_by_func ...

    Autrement dit pourquoi "gtk_toggle_button_set_active" intercepte-t-il systématiquement les signaux "clicked" et "toggled" mais non "released" ?

    Merci à l'avance et cordialement.

  4. #4
    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
    T'es intéressé par le changement d'état de tes ToggleButtons qui est indiqué par le signal "toggled", ça me paraît tenter le diable d'utiliser un autre signal qui semble coller mias sans en être sûr. Par exemple, le signal released est-il émis quand on utilise le clavier ? Est-il émis si on commence à cliquer sur un widget et qu'on déplace le cursuer de la souris sur le toggle button et qu'on relâche la souris ? etc etc

Discussions similaires

  1. impression avec choix de la feuille
    Par alex_elder1_1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/11/2006, 11h24
  2. Comment sauvegarder un fichier avec choix du repertoire
    Par vantoff dans le forum C++Builder
    Réponses: 14
    Dernier message: 24/07/2006, 15h51
  3. fonction message avec choix
    Par basteigne dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 14/06/2006, 10h19
  4. Réponses: 9
    Dernier message: 22/12/2005, 22h20
  5. pb de select avec size avec choix multiple
    Par La_picolle dans le forum ASP
    Réponses: 10
    Dernier message: 28/08/2003, 15h21

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