diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index de6da55168e2fe4da232483678d6fa57fd343a69..5520d25e5d54301ae5ec04799b5cc5048b127fe3 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -139,7 +139,7 @@ sflphone_ringing(callable_obj_t * c ) sflphone_hung_up( callable_obj_t * c) { calllist_remove( current_calls, c->_callID); - calltree_remove_call(current_calls, c); + calltree_remove_call(current_calls, c, NULL); c->_state = CALL_STATE_DIALING; update_menus(); #if GTK_CHECK_VERSION(2,10,0) diff --git a/sflphone-client-gnome/src/contacts/calllist.c b/sflphone-client-gnome/src/contacts/calllist.c index b44c9dfd5d950f953a839390ce3667bc4ed0bc19..2e635c4a34e445c9633048f1e995ed9b6e8c4869 100644 --- a/sflphone-client-gnome/src/contacts/calllist.c +++ b/sflphone-client-gnome/src/contacts/calllist.c @@ -112,7 +112,7 @@ calllist_clean_history( void ) callable_obj_t* c = calllist_get_nth( history , i ); // Delete the call from the call tree DEBUG("Delete calls"); - calltree_remove_call(history , c); + calltree_remove_call(history, c, NULL); } calllist_reset( history ); } @@ -122,7 +122,7 @@ void calllist_remove_from_history( callable_obj_t* c ) { calllist_remove( history, c->_callID ); - calltree_remove_call( history, c ); + calltree_remove_call(history, c, NULL); DEBUG("Size of history = %i" , calllist_get_size( history )); } diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index ac30bc84269c23e5f9dc9efbdb9e5d8437e9fcf2..28d9cf6b27f0937f22ec4e8b3856d3a4bae64b50 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -314,19 +314,24 @@ calltree_create (calltab_t* tab, gboolean searchbar_type) } void -calltree_remove_call (calltab_t* tab, callable_obj_t * c) + calltree_remove_call (calltab_t* tab, callable_obj_t * c, GtkTreeIter *parent) { GtkTreeIter iter; GValue val; callable_obj_t * iterCall; GtkTreeStore* store = tab->store; - int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), NULL); + int nbChild = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(store), parent); int i; for( i = 0; i < nbChild; i++) { - if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i)) + if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, parent, i)) { + if(gtk_tree_model_iter_has_child(GTK_TREE_MODEL(store), &iter)) + { + calltree_remove_call (tab, c, &iter); + } + val.g_type = 0; gtk_tree_model_get_value (GTK_TREE_MODEL(store), &iter, 2, &val); @@ -700,7 +705,7 @@ void calltree_add_conference (calltab_t* tab, const conference_obj_t* conf) call = calllist_get (tab, call_id); // create_new_call_from_details (conf_id, conference_details, &c); - calltree_remove_call(tab, call); + calltree_remove_call(tab, call, NULL); calltree_add_call (tab, call, &iter); } } @@ -739,8 +744,7 @@ void calltree_remove_conference (calltab_t* tab, const conference_obj_t* conf) int nbParticipant; - int i; - int j; + int i, j; for( i = 0; i < nbChild; i++) { if(gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter_parent, NULL, i)) diff --git a/sflphone-client-gnome/src/contacts/calltree.h b/sflphone-client-gnome/src/contacts/calltree.h index 111fc519d227a1f1e49a7a4d50c0284833480270..c2ba938c930820f8d344bb0253adcaa99a31794f 100644 --- a/sflphone-client-gnome/src/contacts/calltree.h +++ b/sflphone-client-gnome/src/contacts/calltree.h @@ -54,7 +54,7 @@ calltree_update_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent); * @param c The call to remove */ void -calltree_remove_call (calltab_t* ct, callable_obj_t * c); +calltree_remove_call (calltab_t* ct, callable_obj_t * c, GtkTreeIter *parent); void calltree_add_conference (calltab_t* tab, const conference_obj_t* conf);