rem: GTK_CTREE_ROW ( GTK_CTREE_ROW ( node ) -> parent ) -> parent )))
add: GTK_CTREE_ROW ( GTK_CTREE_ROW ( node ) -> parent ) -> parent )) && imputation != GINT_TO_POINTER(-1) )
context: void ouverture_node_imputation ( GtkWidget *arbre,				 GtkCTreeNode *node,				 gpointer null ){			      GtkCTreeRow *row;  gchar *text[4];  GtkCTreeNode *node_insertion;  row = GTK_CTREE_ROW ( node );  /*   si on ouvre une imputation, on fait rien */  if ( row->level == 1 )    return;  /*   si le fiston = -1, c'est qu'il n'a pas encore t cr */  /* dans le cas contraire, on vire */  if ( GPOINTER_TO_INT ( gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),						       row -> children )) != -1 )    return;  /* freeze le ctree */  gtk_clist_freeze ( GTK_CLIST ( arbre_imputation ));  /* on commence par virer la ligne bidon qui tait attache  ce noeud */  gtk_ctree_remove_node ( GTK_CTREE ( arbre_imputation ),			  row -> children );  /* sparation entre ouverture de sous-imputation ( 2 ) et ouverture de compte ( 3 ) */  if ( row -> level == 2 )    {      /* c'est une ouverture de sous imputation, on rcupre sa structure  */      struct struct_imputation *imputation;      struct struct_sous_imputation *sous_imputation;      gint no_imputation;      gint no_sous_imputation;      gint i;      if (( imputation = gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),						       GTK_CTREE_ROW ( node ) -> parent )))	{	  no_imputation = imputation -> no_imputation;	  if (( sous_imputation = gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),								node)))	    no_sous_imputation = sous_imputation -> no_sous_imputation;	  else	    no_sous_imputation = 0;	}      else	{	  no_imputation = 0;	  no_sous_imputation = 0;	}      /* on va scanner tous les comptes, ds qu'une imputation correspondant  l'imput slectionne 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 -> imputation == no_imputation		   &&		   operation -> sous_imputation == no_sous_imputation		   &&		   !operation -> operation_ventilee )		{		  /* affiche le compte courant */		  text[3] = calcule_total_montant_imputation_par_compte ( operation -> imputation,									  operation -> sous_imputation,									  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_imputation ),							   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_imputation ),						node_insertion,						GINT_TO_POINTER ( i ));		  /* on met une ligne bidon pour pouvoir l'ouvrir */		  node_insertion = gtk_ctree_insert_node ( GTK_CTREE ( arbre_imputation ),							   node_insertion,							   NULL,							   text,							   5,							   NULL,							   NULL,							   NULL,							   NULL,							   FALSE,							   FALSE );		  /* on associe le fils bidon  -1 */		  		  gtk_ctree_node_set_row_data ( GTK_CTREE ( arbre_imputation ),						node_insertion,						GINT_TO_POINTER (-1));		  		  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 imputation */      struct struct_imputation *imputation;      struct struct_sous_imputation *sous_imputation;      GSList *pointeur_ope;      gint no_imputation;      gint no_sous_imputation;      if (( imputation = gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),						       GTK_CTREE_ROW ( GTK_CTREE_ROW ( node ) -> parent ) -> parent )))	{	  no_imputation = imputation -> no_imputation;	  if (( sous_imputation = gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),								GTK_CTREE_ROW ( node ) -> parent )))	    no_sous_imputation = sous_imputation -> no_sous_imputation;	  else	    no_sous_imputation = 0;	}      else	{	  no_imputation = 0;	  no_sous_imputation = 0;	}      p_tab_nom_de_compte_variable = p_tab_nom_de_compte + GPOINTER_TO_INT ( gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),													   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 -> imputation == no_imputation	       &&	       operation -> sous_imputation == no_sous_imputation	       &&	       !operation -> operation_ventilee  )	    {		      if ( operation -> notes )			{			  if ( operation -> no_operation_ventilee_associee )			    text[0] = g_strdup_printf ( _("%d/%d/%d : %4.2f %s (breakdown) [ %s ]"),							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_name ( devise_operation ),							operation -> notes );			  else			    text[0] = g_strdup_printf ( _("%d/%d/%d : %4.2f %s [ %s ]"),							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_name ( devise_operation ),							operation -> notes );			}		      else			{			  if ( operation -> no_operation_ventilee_associee )			    text[0] = g_strdup_printf ( _("%d/%d/%d : %4.2f %s (breakdown)"),							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_name ( devise_operation ) );			  else			    text[0] = g_strdup_printf ( "%d/%d/%d : %4.2f %s",							operation -> jour,							operation -> mois,							operation -> annee,							operation -> montant,							devise_name ( devise_operation ) );			}	      text[1] = NULL;	      text[2] = NULL;	      text[3] = NULL;	      node_insertion = gtk_ctree_insert_node ( GTK_CTREE ( arbre_imputation ),						       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_imputation ),					    node_insertion,					    operation );	    }	  pointeur_ope = pointeur_ope -> next;	}    }  /* defreeze le ctree */  gtk_clist_thaw ( GTK_CLIST ( arbre_imputation ));}