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.