From 2693911367098285a686f6f060fe455e83becde5 Mon Sep 17 00:00:00 2001
From: Alexandre Savard <alexandre.savard@savoirfairelinux.net>
Date: Thu, 27 Aug 2009 11:44:25 -0400
Subject: [PATCH] [#2006] Make calltree_remove_call recursive (for
 GtkTreeStore)

---
 sflphone-client-gnome/src/actions.c           |  2 +-
 sflphone-client-gnome/src/contacts/calllist.c |  4 ++--
 sflphone-client-gnome/src/contacts/calltree.c | 16 ++++++++++------
 sflphone-client-gnome/src/contacts/calltree.h |  2 +-
 4 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c
index de6da55168..5520d25e5d 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 b44c9dfd5d..2e635c4a34 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 ac30bc8426..28d9cf6b27 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 111fc519d2..c2ba938c93 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);
-- 
GitLab