Et une deuxieme fois, bonjour à tous, en éspérant avoir un peu plus de succes que sur l'autre topic

J'ai besoin de listes chainées dans mon programme GTK, et en regardant la doc, je me dis : CHOUETTE, il existe une librairie qui me simplifie la vie.

En effet les fonctions ont l'air simples à souhait, je me lance donc avec les GList (doublement chainées) ...

Bah c'est raté pour la facilité, ca fait 3 heures que je me casse la tête la dessus


Pour être précis, je veux faire une liste chainée de structures, que je passe dans mes callbacks pour modifier mes widgets.
Bref plutot qu'un grand discours, voici de quoi je parle :

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
59
60
61
typedef struct page{
	gint index;
	GtkWidget *HugeHbox;
	GtkWidget *FiltresVbox, *PicVbox, *ResultVbox;
	GtkWidget *OriginalPic, *ResultPic;
	GtkWidget *TabLabel;
}page;

GList *pages = NULL;

// Fonction de création de nouvel onglet :
void cb_new (GtkWidget *p_widget, gpointer user_data)
{
	// Déclaration des variables :
	page *newp = NULL;
	apli *app = NULL;

	// On récupére l'application :
	app = (apli*)malloc(sizeof(apli));
	app = user_data;

	// On crée une nouvelle page :
	newp = (page*)malloc(sizeof(page));
	newp->index = 0;
	newp->HugeHbox = gtk_hbox_new(TRUE,0);
	newp->FiltresVbox = gtk_vbox_new(TRUE,0);
	newp->PicVbox = gtk_vbox_new(TRUE,0);
	newp->ResultVbox = gtk_vbox_new(TRUE,0);
	newp->OriginalPic = gtk_image_new_from_file("Pics/test_image13.jpg");
	newp->ResultPic = gtk_image_new_from_file("Pics/test_image13.jpg");;
	newp->TabLabel = create_label(g_strdup_printf("Doc %d", app->index));
	app->index ++;

	// On place les éléments dans les box correspondantes :
	gtk_box_pack_start(GTK_BOX(newp->PicVbox), newp->OriginalPic, FALSE, FALSE, 0);
	gtk_box_pack_start(GTK_BOX(newp->ResultVbox), newp->ResultPic, FALSE, FALSE, 0);

	// On empile les boxs :
	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->FiltresVbox, FALSE, FALSE, 0);
	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->PicVbox, FALSE, FALSE, 0);
	gtk_box_pack_start(GTK_BOX(newp->HugeHbox), newp->ResultVbox, FALSE, FALSE, 0);
	
	// On met la hugeHbox dans l'onglet :
	newp->index = gtk_notebook_append_page(GTK_NOTEBOOK(app->notebook), newp->HugeHbox, newp->TabLabel);
	
	// On affiche le tout :
	gtk_notebook_set_current_page(GTK_NOTEBOOK(app->notebook), newp->index - 1);
	gtk_widget_show_all(GTK_WIDGET(app->notebook));

	// Ajout de la page au document :
	g_list_append(app->pages, newp);

	printf("page : %d\n", newp->index);
	free(newp);
	newp = NULL;
	Pause(2);
	newp = g_list_nth_data(app->pages, 0);
// C'est la que ca plante (erreur acces memoire)
	printf("page : %d\n", newp->index);
}