rem: gtk_ctree_insert_node ( GTK_CTREE ( arbre_categ ), node_insertion, NULL, text, 5, NULL, NULL, NULL, NULL, FALSE, FALSE );
add: node_insertion = gtk_ctree_insert_node ( GTK_CTREE ( arbre_categ ), node_insertion, NULL, text, 5, NULL, NULL, NULL, NULL, FALSE, FALSE );    gtk_ctree_node_set_row_data ( GTK_CTREE ( arbre_categ ), node_insertion, GINT_TO_POINTER (-1));
context: void ouverture_node_categ ( GtkWidget *arbre,			    GtkCTreeNode *node,			    gpointer null ){			      GtkCTreeRow *row;  gchar *text[4];  GtkCTreeNode *node_insertion;  row = GTK_CTREE_ROW ( node );  /*   si on ouvre une categ, on fait rien */  if ( row->level == 1       &&       gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),				     node )       )    return;  /* freeze le ctree */  gtk_clist_freeze ( GTK_CLIST ( arbre_categ ));  /* on commence par virer la ligne bidon qui tait attache  ce noeud */  gtk_ctree_remove_node ( GTK_CTREE ( arbre_categ ),			  row -> children );  /* sparation entre ouverture de sous-categ ( 2 ) et ouverture de compte ( 3 ) */  if ( ( row -> level == 2	 &&	 gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),				       GTK_CTREE_ROW ( node ) -> parent ))       ||       ( row ->level == 1	 &&	 !gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),					node )))    {      /* c'est une ouverture de sous categ, on rcupre sa structure  */      gint no_categ;      gint no_sous_categ;      gint i;      if ( row -> level != 1 )	{	  no_categ = ((struct struct_categ *)(gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),									    GTK_CTREE_ROW ( node ) -> parent ))) -> no_categ;	  if ( gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),					     node))	    no_sous_categ = ((struct struct_sous_categ *)(gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),											node))) -> no_sous_categ;	  else	    no_sous_categ = 0;	}      else	{	  no_categ = 0;	  no_sous_categ = 0;	}      /* on va scanner tous les comptes, ds qu'un tiers correspondant au tiers slectionn est trouv */      /* on affiche le nom du compte */      p_tab_nom_de_compte_variable = p_tab_nom_de_compte;      for ( i = 0 ; i < nb_comptes ; i++ )	{	  GSList *pointeur_ope;	  pointeur_ope = LISTE_OPERATIONS;	  while ( pointeur_ope )	    {	      struct structure_operation *operation;	      	      operation = pointeur_ope -> data;	      if ( operation -> categorie == no_categ		   &&		   operation -> sous_categorie == no_sous_categ		   &&		   !operation -> relation_no_operation		   &&		   !operation -> operation_ventilee )		{		  /* affiche le compte courant */		  text[3] = calcule_total_montant_categ_par_compte ( operation -> categorie,								     operation -> sous_categorie,								     operation -> no_compte );		  if ( etat.affiche_nb_ecritures_listes		       &&		       nb_ecritures_par_comptes )		    text[0] = g_strconcat ( NOM_DU_COMPTE,					    " (",					    itoa ( nb_ecritures_par_comptes ),					    ")",					    NULL );		  else		    text[0] = NOM_DU_COMPTE;		  text[1] = NULL;		  text[2] = NULL;		  node_insertion = gtk_ctree_insert_node ( GTK_CTREE ( arbre_categ ),							   node,							   NULL,							   text,							   5,							   NULL,							   NULL,							   NULL,							   NULL,							   FALSE,							   FALSE );		  /* associe le no de compte  la ligne du compte */		  		  gtk_ctree_node_set_row_data ( GTK_CTREE ( arbre_categ ),						node_insertion,						GINT_TO_POINTER ( i ));		  /* on met une ligne bidon pour pouvoir l'ouvrir */		  gtk_ctree_insert_node ( GTK_CTREE ( arbre_categ ),					  node_insertion,					  NULL,					  text,					  5,					  NULL,					  NULL,					  NULL,					  NULL,					  FALSE,					  FALSE );		  pointeur_ope = NULL;		}	      else		pointeur_ope = pointeur_ope -> next;	    }	      	  p_tab_nom_de_compte_variable++;	}    }  else    {      /* c'est une ouverture d'un compte */      /*       cette fois, on fait le tour de toutes les ops du compte pour afficher celles qui correspondent  la categ */      GSList *pointeur_ope;      gint no_categ;      gint no_sous_categ;      if ( row -> level != 2 )	{	  no_categ = ((struct struct_categ *)(gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),									    GTK_CTREE_ROW ( GTK_CTREE_ROW ( node ) -> parent ) -> parent ))) -> no_categ;	  if ( gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),					     GTK_CTREE_ROW ( node ) -> parent ))	    no_sous_categ = ((struct struct_sous_categ *)(gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),											GTK_CTREE_ROW ( node ) -> parent ))) -> no_sous_categ;	  else	    no_sous_categ = 0;	}      else	{	  no_categ = 0;	  no_sous_categ = 0;	}      p_tab_nom_de_compte_variable = p_tab_nom_de_compte + GPOINTER_TO_INT ( gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_categ ),													   node ));      pointeur_ope = LISTE_OPERATIONS;      while ( pointeur_ope )	{	  struct struct_devise *devise_operation;	  struct structure_operation *operation;	  operation = pointeur_ope -> data;	  devise_operation = g_slist_find_custom ( liste_struct_devises,						   GINT_TO_POINTER ( operation -> devise ),						   ( GCompareFunc ) recherche_devise_par_no ) -> data;	  if ( operation -> categorie == no_categ	       &&	       operation -> sous_categorie == no_sous_categ	       &&	       !operation -> relation_no_operation	       &&	       !operation -> operation_ventilee  )	    {		      if ( operation -> notes )			{			  if ( operation -> no_operation_ventilee_associee )			    text[0] = g_strdup_printf ( _("%d/%d/%d : %4.2f %s (ventilation) [ %s ]"),							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_operation -> code_devise,							operation -> notes );			  else			    text[0] = g_strdup_printf ( "%d/%d/%d : %4.2f %s [ %s ]",							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_operation -> code_devise,							operation -> notes );			}		      else			{			  if ( operation -> no_operation_ventilee_associee )			    text[0] = g_strdup_printf ( _("%d/%d/%d : %4.2f %s (ventilation)"),							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_operation -> code_devise );			  else			    text[0] = g_strdup_printf ( "%d/%d/%d : %4.2f %s",							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_operation -> code_devise );			}	      text[1] = NULL;	      text[2] = NULL;	      text[3] = NULL;	      node_insertion = gtk_ctree_insert_node ( GTK_CTREE ( arbre_categ ),						       node,						       NULL,						       text,						       5,						       NULL,						       NULL,						       NULL,						       NULL,						       FALSE,						       FALSE ); 	      /* on associe  cette op l'adr de sa struct */	      gtk_ctree_node_set_row_data ( GTK_CTREE ( arbre_categ ),					    node_insertion,					    operation );	    }	  pointeur_ope = pointeur_ope -> next;	}    }  /* defreeze le ctree */  gtk_clist_thaw ( GTK_CLIST ( arbre_categ ));}