Bonjour,
J'utilise GTK+3 pour faire une application graphique. À un moment donné je souhaite connecter à un menuItem une fonction qui a besoin deux arguments (un GtkTreeStore, et une structure que j'ai créé). J'ai donc créé une structure et je lui donne des pointeurs sur le deux objets dont j'ai besoin. Seulement, quand je récupère les pointeurs dans ma fonction, ils ont changé, et je ne comprend pas pourquoi.
Je vous met les parties de mon code qui posent problème.
La fonction appelante
La fonction appelé
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
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
41GtkWidget* menuMake (GtkWidget* mainWindow, save* truc, GtkTreeStore* store) { GtkWidget* menuBar; GtkWidget* file; GtkWidget* menuFile; GtkWidget* new; GtkWidget* importFolder; GtkWidget* open; GtkWidget* quit; GtkAccelGroup* accel_group; importMovie* import; // import=malloc (sizeof(importMovie)); import->save=truc; import->store=store; g_print ("adresse de import dans menuMake : %p\n", &import); g_print ("adresse de save dans menuMake : %p\n", truc); g_print ("adresse de import->save dans menuMake : %p\n", import->save); /*** Début : création des racourcis clavier ***/ accel_group=gtk_accel_group_new(); accelerator_new (accel_group, "<Control>O", ACCEL_PATH_OPEN, G_CALLBACK(openFile), NULL); accelerator_new (accel_group, "<Control>I", ACCEL_PATH_IMPORT, G_CALLBACK(openFolder), import); // CE CALLBACK LÀ accelerator_new (accel_group, "<Control>Q", ACCEL_PATH_QUIT, G_CALLBACK(gtk_main_quit), NULL); // Ajout des racoucis clavier dans la fenêtre principale gtk_window_add_accel_group (GTK_WINDOW(mainWindow), accel_group); /*** Fin : création des racourcis clavier ***/ // création de la barre de menu menuBar=gtk_menu_bar_new(); /*** Début : création du menu fichier ***/ MENU_NEW(menuFile, accel_group); MENU_IMAGE_ITEM(menuFile, new, NEW); MENU_IMAGE_ITEM(menuFile, open, OPEN); g_signal_connect (G_OBJECT(open), "activate", G_CALLBACK(openFile), NULL); gtk_menu_item_set_accel_path (GTK_MENU_ITEM(open), ACCEL_PATH_OPEN); MENU_ITEM(menuFile, importFolder, "_Importer"); g_signal_connect (G_OBJECT(importFolder), "activate", G_CALLBACK(openFolder), import); // CE CALLBACK LÀ gtk_menu_item_set_accel_path (GTK_MENU_ITEM(importFolder), ACCEL_PATH_IMPORT); …
La structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
8
9
10
11
12
13
Et le résultat affiché dans le terminal
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
Petite précision, l'adresse de save au début de la fonction menuMake (0x78f750) est la même que celle de save au tout début du programme lorsque de je créé la variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part 
2
3
4
5
6
7
Pour réglé le problème problème j'ai essayé de faire une structure qui prend des pointeurs de pointeurs, j'ai essayé de mettre la structure import en variable "normale" est de donner son adresse au callback, j'essayé de la mettre en pointeur et de donner son adresse,… Mais rien n'y fait et je n'ai pas d'idée de comment résoudre ce problème !
Donc si une (ou plusieurs) âme(s) charitable passe dans le coin, peut-elle m'aider ?
Cordialement,
Phantom

 

 
		
		 
         
 

 
			
			

 
   
 


 Callback qui change des pointeurs
 Callback qui change des pointeurs
				 Répondre avec citation
  Répondre avec citation

 
 
Partager