Bonjour, je souhaite toutes les x millisecondes dessiner un point dans un canevas gnome, jusque là pas de problème.

Pour lui indiquer où dessiner, j'ai choisi de créer une structure que je passe en paramètre à chaque fonction ayant besoin d'accéder au canevas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
struct Necessaire {
  GtkWidget* pCanvas;
  GnomeCanvasItem* pVoie1;
  GnomeCanvasItem* pVoie2;
};
Dans mon main je définis donc ma fenetre qui va pouvoir être passée en paramètre à chaque fonction, par exemple aux fonctions modif_amplitude et modif_frequence :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
int main(int argc, char* argv[])
{
  struct Necessaire *fenetre=NULL;
  fenetre = g_malloc(sizeof(struct Necessaire));
  ...
  fenetre->pCanvas = gnome_canvas_new_aa();
  ...
  g_signal_connect(G_OBJECT(bt1),"clicked",G_CALLBACK(modif_amplitude),(gpointer*)fenetre);
  g_signal_connect(G_OBJECT(bt2),"clicked",G_CALLBACK(modif_frequence),(gpointer*)fenetre);
}

Voici les fonctions :

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
 
static gint modif_amplitude(GtkWidget* widget, gpointer data){
 
  struct Necessaire *fenetre;
  fenetre = (struct Necessaire*)data;
 
  gtk_object_destroy(GTK_OBJECT(fenetre->pVoie1));
  gtk_object_destroy(GTK_OBJECT(fenetre->pVoie2));
 
  dessiner(fenetre,(double)(100.0*sin(j++/20.0)+200.0),5.0);
 
return TRUE;
}
 
 
static gint modif_frequence(GtkWidget* widget, gpointer data){
 
  struct Necessaire *fenetre;
  fenetre = (struct Necessaire*)data;
 
  g_timeout_add(temps,(gpointer)modif_amplitude,(gpointer*)fenetre);
 
return 0;
}

Et voilà le problème : lorsque je clique sur bouton1 pas de problème la fonction modif_amplitude recoit bien le paramètre et sait où supprimer et redessiner. Par contre pour le g_timeout_add , je n'arrive pas à passer la fenetre en paramètre et le programme plante instantanèment :s

Merci à vous d'avoir lu jusque là.