bonjour, je débute avec gtk et je ne comprend vraiment pas comment la fonction g_signal_connect fonctionne.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
g_signal_connect(G_OBJECT(MainWindow), "delete-event", G_CALLBACK( affiche_lettre ), s);
En effet je souhaite utiliser le troisième argument "s" dans ma fonction callback mais impossible.

En faisant deux printf ( je sais c pas bien faut utiliser le débugger ), l'un dans ma fonction appellante et un autre dans la fonction appellée par g_signal_connect(), je me rend compte que le pointeur transmit en troisieme argument à g_signl_connect et celui que je récupère dans ma callback ne sont pas les mêmes, je vien de me faire les 4 première pages de google et je comprend pas pourquoi ca marche pas chez moi.
Voici mon code :

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
void
affiche_lettre(GtkWidget * widget, gpointer data)
{
 
    printf("callback : %p %s\n",data,(char *)data);
 
    gtk_main();
}
 
int main(int argc, char **argv)
{
    /* Variables */
    GtkWidget * MainWindow = NULL;
 
    /* Initialisation de GTK+ */
    gtk_init(&argc, &argv);
 
    /* Création de la fenêtre */
    MainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
    char * s="toto";
    printf("main :  %p %s\n",s,s);
 
    g_signal_connect_(G_OBJECT(MainWindow), "delete-event", G_CALLBACK( affiche_lettre ),s );
 
    /* Affichage et boucle événementielle */
    gtk_widget_show_all(MainWindow);
    gtk_main();
 
    /* Fermeture de GTK+ */
    gtk_exit(EXIT_SUCCESS);
    return EXIT_SUCCESS;
}
des idées ?