Bonjour,
J'utilise un check_button avec le callback 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
 
procedure Set_To_Active(Widget : access Gtk.Widget.Gtk_Widget_Record'class; Surface : Gtk_interface) is
      Child_Widget : Gtk_Widget;
 
   begin
      if Gtk.Check_Button.Get_Active(Gtk_Check_Button(Widget)) then
 
         if not Theory.Machine_Set(Surface.Machine_Id).Have_Drums then
 
 
            Child_Widget := Gtk.Box.Get_Child(Surface.Surface_Box, 0);
            if Child_Widget /= null then
               Remove(Surface.Surface_box, Child_Widget);
            end if;
            Initialize(Surface.surface, True);
            Surface.From.Is_Drums := True;
            Theory.Machine_Set(Surface.Machine_Id).Have_Drums := True;
            Theory.Machine_Set(Surface.Machine_Id).Drums_Timbre := Surface.Timbre_Num;
 
 
            Gtk.Box.Pack_Start(Surface.Surface_box, Surface.Surface.Main_Frame, False, False, 0);
            Show_All(Surface.Surface_box);
         else
            Set_Active(Gtk_Check_Button(Widget), False);
         end if;
 
      else
 
         Child_Widget := Gtk.Box.Get_Child(Surface.Surface_Box, 0);
         if Child_Widget /= null then
            Remove(Surface.Surface_box, Child_Widget);
         end if;
         Initialize(Surface.surface, False);
         Surface.From.Is_Drums := False;
 
         Theory.Machine_Set(Surface.Machine_Id).Have_Drums := False;
         Theory.Machine_Set(Surface.Machine_Id).Drums_Timbre := 0;
 
         Gtk.Box.Pack_Start(Surface.Surface_box, Surface.Surface.Main_Frame, False, False, 0);
         Show_All(Surface.Surface_box);
      end if;
 
   end Set_To_Active;
Qui effectue un changement de frame conditionnellement.selon un booléen.
La procédure semble fonctionner au premier click de check_button, mais pas pour les suivants.
Je ne sais pas vraiment si c'est un problème du au fonctionnement du check_button ou une erreur dans l'algo.
Si vous pouviez jeter un œil.
Merci.