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 :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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
Code : S�lectionner tout - Visualiser dans une fen�tre � part
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) :
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
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 !