diff --git a/sflphone-client-gnome/src/contacts/calltree.c b/sflphone-client-gnome/src/contacts/calltree.c index 79aafe52330ac6ef0231548babc177b69286c391..734b798d219e4027214d2a16c962cf31a6737103 100644 --- a/sflphone-client-gnome/src/contacts/calltree.c +++ b/sflphone-client-gnome/src/contacts/calltree.c @@ -1425,23 +1425,55 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d // Make sure that drag n drop does not imply a dialing call - if(selected_type == A_CALL && selected_call->_state == CALL_STATE_DIALING) { + if(selected_type == A_CALL) { + + DEBUG("Selected a call"); + if(selected_call->_state == CALL_STATE_DIALING || + selected_call->_state == CALL_STATE_INVALID || + selected_call->_state == CALL_STATE_FAILURE || + selected_call->_state == CALL_STATE_BUSY || + selected_call->_state == CALL_STATE_TRANSFERT) { - DEBUG("Dragged a call on a dialing call"); + DEBUG("Selected an invalid call"); calltree_remove_call(current_calls, selected_call, NULL); calltree_add_call(current_calls, selected_call, NULL); return; + } + + + if(dragged_type == A_CALL) { + + DEBUG("Dragged on a call"); + if(dragged_call->_state == CALL_STATE_DIALING || + dragged_call->_state == CALL_STATE_INVALID || + dragged_call->_state == CALL_STATE_FAILURE || + dragged_call->_state == CALL_STATE_BUSY || + dragged_call->_state == CALL_STATE_TRANSFERT) { + + DEBUG("Dragged on an invalid call"); + + if(selected_call->_confID != NULL) { + + } + else { + calltree_remove_call(current_calls, selected_call, NULL); + calltree_add_call(current_calls, selected_call, NULL); + } + return; + } + } } - + /* else if(selected_type == A_CALL) { + // user may have dragged it outside the conference if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) { calltree_remove_call(current_calls, dragged_call, NULL); - DEBUG("Dragged a call on a dialing call"); + DEBUG("-------------------------------------- Dragged a call on a dialing call"); // test if call participate to a conference if(selected_call->_confID) { @@ -1459,20 +1491,34 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d return; } + } - else if(selected_type == A_CONFERENCE) { + */ - DEBUG("Dragged a conference on a dialing call"); + if(selected_type == A_CONFERENCE) { - if(dragged_call && dragged_call->_state == CALL_STATE_DIALING) { + DEBUG("Selected a conference"); + + if(dragged_type == A_CALL) { + + DEBUG("Dragged on a call"); + + if(dragged_call->_state == CALL_STATE_DIALING || + dragged_call->_state == CALL_STATE_INVALID || + dragged_call->_state == CALL_STATE_FAILURE || + dragged_call->_state == CALL_STATE_BUSY || + dragged_call->_state == CALL_STATE_TRANSFERT) { + + DEBUG("Dragged on an invalid call"); conf = selected_conf; calltree_remove_conference(current_calls, conf, NULL); calltree_add_conference(current_calls, conf); return; - } + } + } }