Bonjour à tous !
J'ai un petit souci avec un callback appelé lors de deux événements différents mais ne réagissant pas de la même façon. Le problème vient apparemment de la structure que je passe en argument supplémentaire ("data") qui ne contiendrais rien lors d'un appel, et ce qu'elle devrait lors de l'autre.
Voici donc mes deux fonctions servant à lier le signal au callback :
La première, pour la connexion du signal de déstruction de ma fenêtre :
g_signal_connect( G_OBJECT( pApp->pWindow ), "delete_event", G_CALLBACK( onExit ), (gpointer) pApp );
Avec cet appel au callback onExit, ma structure dont pApp est un pointeur ne contient rien, ou du moins pas ce qu'elle devrait (cf plus bas).
Par contre, lorsque j'utilise la création de menus avec GtkUiManager, je n'ai aucun problème
gtk_action_group_add_actions( pApp->pActionGroup, menuEntries, G_N_ELEMENTS( menuEntries ), (gpointer) pApp );
voici ma fonction onExit (les différents tests m'ont servi à me rendre compte du problème) :
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
| void onExit( GtkWidget *widget, gpointer data ) {
MainWindow *pApp = (MainWindow*) data;
if ( GTK_IS_WINDOW( pApp->pWindow ) ) {
/* si pApp->pWindow est bien une GTK_WINDOW, pas de pb */
printf( "OK (window)\n" );
}
else {
/* sinon, ça veux probablement dire que pApp n'est pas bon */
fputs( "WW: pApp->pWindow is NOT a GtkWindow\n", stderr );
}
if ( GTK_IS_NOTEBOOK( pApp->pNotebook ) ) {
/* si pApp->pNotebook est bien une GTK_NOTEBOOK, pas de pb */
printf( "OK (notebook)\n" );
}
else {
/* sinon, ça veux probablement dire que pApp n'est pas bon */
fputs( "WW: pApp->pNotebook is NOT a GtkNotebook\n", stderr );
}
/* cette fonction n'est a besoin du paramètre data (pApp), d'où le problème réel */
onCloseAll( widget, data );
gtk_main_quit();
} |
- Si j'appelle cette fonction via le menu de mon application, je n'ai aucun problème ("OK (window)" et "OK (notebook)" s'affichent pour le confirmer) ;
- Mais par contre, lors de la fermeture de la fenêtre par un "delete_event", pApp->pWindow et pApp->pNotebook ne contienne plus ce qu'ils devraient, et les erreurs s'affichent ("WW: pApp->"...).
Aurais-je fait une erreur dans la connexion du signal "delete_event" ?
Merci d'avance !
Partager