Skip to content
Snippets Groups Projects
Commit 469f57f5 authored by Alexandre Savard's avatar Alexandre Savard
Browse files

[#2466] Put null pointer protection test in gnome gui when dragging calls

parent cdda2110
No related branches found
No related tags found
No related merge requests found
...@@ -1355,49 +1355,67 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1355,49 +1355,67 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
conference_obj_t* conf; conference_obj_t* conf;
if(selected_path_depth == 1) if(selected_path_depth == 1) {
{
if(dragged_path_depth == 1)
{
if (selected_type == A_CALL && dragged_type == A_CALL) if(dragged_path_depth == 1) {
{
if (selected_type == A_CALL && dragged_type == A_CALL) {
if(gtk_tree_path_compare (dpath, spath) == 0) {
if(gtk_tree_path_compare (dpath, spath) == 0)
{
// draged a call on itself // draged a call on itself
} }
else else {
{
// dragged a single call on a single call // dragged a single call on a single call
if(selected_call != NULL && dragged_call != NULL) if(selected_call != NULL && dragged_call != NULL)
sflphone_join_participant(selected_call->_callID, dragged_call->_callID); sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
} }
} }
else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
{
// dragged a single call on a conference // dragged a single call on a conference
if(!selected_call) {
DEBUG("Error: call dragged on a conference is null");
return;
}
selected_call->_confID = g_strdup(dragged_call_id); selected_call->_confID = g_strdup(dragged_call_id);
sflphone_add_participant(selected_call_id, dragged_call_id); sflphone_add_participant(selected_call_id, dragged_call_id);
} }
else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
{
// dragged a conference on a single call (make no sence) // dragged a conference on a single call
calltree_remove_conference(current_calls, selected_conf, NULL); conf = selected_conf;
calltree_add_conference(current_calls, selected_conf);
calltree_remove_conference(current_calls, conf, NULL);
calltree_add_conference(current_calls, conf);
} }
else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE) else if(selected_type == A_CONFERENCE && dragged_type == A_CONFERENCE){
{
// dragged a conference on a conference // dragged a conference on a conference
if(gtk_tree_path_compare (dpath, spath) == 0) if(gtk_tree_path_compare (dpath, spath) == 0) {
{
if(!current_calls) {
DEBUG("Error while joining the same conference\n");
return;
}
DEBUG("Joined the same conference!\n"); DEBUG("Joined the same conference!\n");
gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE); gtk_tree_view_expand_row(GTK_TREE_VIEW(current_calls->view), path, FALSE);
} }
else else {
{
if(!selected_conf) {
DEBUG("Error: selected conference is null while joining 2 conference");
}
if(!dragged_conf) {
DEBUG("Error: dragged conference is null while joining 2 conference");
}
DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path); DEBUG("Joined two conference %s, %s!\n", dragged_path, selected_path);
sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID); sflphone_join_conference(selected_conf->_confID, dragged_conf->_confID);
} }
...@@ -1407,16 +1425,17 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1407,16 +1425,17 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
// TODO: dragged a conference on a NULL element (should do nothing) // TODO: dragged a conference on a NULL element (should do nothing)
} }
else // dragged_path_depth == 2 else {
{
if (selected_type == A_CALL && dragged_type == A_CALL) // dragged_path_depth == 2
{ if (selected_type == A_CALL && dragged_type == A_CALL) {
// TODO: dragged a call on a conference call // TODO: dragged a call on a conference call
calltree_remove_call(current_calls, selected_call, NULL); calltree_remove_call(current_calls, selected_call, NULL);
calltree_add_call(current_calls, selected_call, NULL); calltree_add_call(current_calls, selected_call, NULL);
} }
else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) else if(selected_type == A_CONFERENCE && dragged_type == A_CALL) {
{
// TODO: dragged a conference on a conference call // TODO: dragged a conference on a conference call
calltree_remove_conference(current_calls, selected_conf, NULL); calltree_remove_conference(current_calls, selected_conf, NULL);
calltree_add_conference(current_calls, selected_conf); calltree_add_conference(current_calls, selected_conf);
...@@ -1426,14 +1445,13 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1426,14 +1445,13 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
// TODO: dragged a conference on a NULL element // TODO: dragged a conference on a NULL element
} }
} }
else // selected_path_depth == 2 else {
{
if(dragged_path_depth == 1) // selected_path_depth == 2
{
if(selected_type == A_CALL && dragged_type == A_CALL) if(dragged_path_depth == 1) {
{
if(selected_type == A_CALL && dragged_type == A_CALL) {
// dragged a conference call on a call // dragged a conference call on a call
sflphone_detach_participant(selected_call_id); sflphone_detach_participant(selected_call_id);
...@@ -1442,27 +1460,28 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1442,27 +1460,28 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
sflphone_join_participant(selected_call->_callID, dragged_call->_callID); sflphone_join_participant(selected_call->_callID, dragged_call->_callID);
} }
else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) else if(selected_type == A_CALL && dragged_type == A_CONFERENCE) {
{
// dragged a conference call on a conference // dragged a conference call on a conference
sflphone_detach_participant(selected_call_id); sflphone_detach_participant(selected_call_id);
if(selected_call != NULL && dragged_conf != NULL) if(selected_call != NULL && dragged_conf != NULL) {
{
DEBUG("Adding a participant, since dragged call on a conference"); DEBUG("Adding a participant, since dragged call on a conference");
sflphone_add_participant(selected_call_id, dragged_call_id); sflphone_add_participant(selected_call_id, dragged_call_id);
} }
} }
else else {
{
// dragged a conference call on a NULL element // dragged a conference call on a NULL element
sflphone_detach_participant(selected_call_id); sflphone_detach_participant(selected_call_id);
} }
} }
else // dragged_path_depth == 2 else {
{
// dragged_path_depth == 2
// dragged a conference call on another conference call (same conference) // dragged a conference call on another conference call (same conference)
// TODO: dragged a conference call on another conference call (different conference) // TODO: dragged a conference call on another conference call (different conference)
...@@ -1473,22 +1492,21 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1473,22 +1492,21 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
gtk_tree_path_up(dpath); gtk_tree_path_up(dpath);
gtk_tree_path_up(spath); gtk_tree_path_up(spath);
if(gtk_tree_path_compare (dpath, spath) == 0) if(gtk_tree_path_compare (dpath, spath) == 0) {
{
DEBUG("Dragged a call in the same conference"); DEBUG("Dragged a call in the same conference");
calltree_remove_call (current_calls, selected_call, NULL); calltree_remove_call (current_calls, selected_call, NULL);
calltree_add_call (current_calls, selected_call, &parent_conference); calltree_add_call (current_calls, selected_call, &parent_conference);
} }
else else {
{
DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath)); DEBUG("Dragged a conference call onto another conference call %s, %s", gtk_tree_path_to_string(dpath), gtk_tree_path_to_string(spath));
conf = NULL; conf = NULL;
val.g_type = 0; val.g_type = 0;
if(gtk_tree_model_get_iter (model, &iter, dpath)) if(gtk_tree_model_get_iter (model, &iter, dpath)) {
{
DEBUG("we got an iter!"); DEBUG("we got an iter!");
gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val); gtk_tree_model_get_value (model, &iter, COLUMN_ACCOUNT_PTR, &val);
...@@ -1498,13 +1516,13 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d ...@@ -1498,13 +1516,13 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context, gpointer d
sflphone_detach_participant(selected_call_id); sflphone_detach_participant(selected_call_id);
if(conf) if(conf) {
{
DEBUG("we got a conf!"); DEBUG("we got a conf!");
sflphone_add_participant(selected_call_id, conf->_confID); sflphone_add_participant(selected_call_id, conf->_confID);
} }
else else {
{
DEBUG("didn't find a conf!"); DEBUG("didn't find a conf!");
} }
} }
...@@ -1546,42 +1564,40 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, g ...@@ -1546,42 +1564,40 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, g
gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val); gtk_tree_model_get_value(tree_model, &iter, COLUMN_ACCOUNT_PTR, &val);
if(gtk_tree_model_iter_has_child(tree_model, &iter)) if(gtk_tree_model_iter_has_child(tree_model, &iter)) {
{
DEBUG("DRAGGING ON A CONFERENCE"); DEBUG("DRAGGING ON A CONFERENCE");
dragged_type = A_CONFERENCE; dragged_type = A_CONFERENCE;
} }
else else {
{
DEBUG("DRAGGING ON A CALL"); DEBUG("DRAGGING ON A CALL");
dragged_type = A_CALL; dragged_type = A_CALL;
} }
switch (position) switch (position) {
{
case GTK_TREE_VIEW_DROP_AFTER: case GTK_TREE_VIEW_DROP_AFTER:
dragged_path = gtk_tree_path_to_string(drop_path); dragged_path = gtk_tree_path_to_string(drop_path);
dragged_path_depth = gtk_tree_path_get_depth(drop_path); dragged_path_depth = gtk_tree_path_get_depth(drop_path);
dragged_call_id = "NULL"; dragged_call_id = "NULL";
dragged_call = NULL; dragged_call = NULL;
dragged_conf = NULL; dragged_conf = NULL;
// DEBUG(" AFTER dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth);
break; break;
case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
dragged_path = gtk_tree_path_to_string(drop_path); dragged_path = gtk_tree_path_to_string(drop_path);
dragged_path_depth = gtk_tree_path_get_depth(drop_path); dragged_path_depth = gtk_tree_path_get_depth(drop_path);
if (dragged_type == A_CALL) if (dragged_type == A_CALL) {
{
dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
dragged_call = (callable_obj_t*)g_value_get_pointer(&val); dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
} }
else else {
{
dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
} }
// DEBUG(" INTO_OR_AFTER dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth);
break; break;
case GTK_TREE_VIEW_DROP_BEFORE: case GTK_TREE_VIEW_DROP_BEFORE:
...@@ -1590,23 +1606,19 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, g ...@@ -1590,23 +1606,19 @@ void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context, gint x, g
dragged_call_id = "NULL"; dragged_call_id = "NULL";
dragged_call = NULL; dragged_call = NULL;
dragged_conf = NULL; dragged_conf = NULL;
// DEBUG(" BEFORE dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth);
break; break;
case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
dragged_path = gtk_tree_path_to_string(drop_path); dragged_path = gtk_tree_path_to_string(drop_path);
dragged_path_depth = gtk_tree_path_get_depth(drop_path); dragged_path_depth = gtk_tree_path_get_depth(drop_path);
if (dragged_type == A_CALL) if (dragged_type == A_CALL) {
{
dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID; dragged_call_id = ((callable_obj_t*)g_value_get_pointer(&val))->_callID;
dragged_call = (callable_obj_t*)g_value_get_pointer(&val); dragged_call = (callable_obj_t*)g_value_get_pointer(&val);
} }
else else {
{
dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID; dragged_call_id = ((conference_obj_t*)g_value_get_pointer(&val))->_confID;
dragged_conf = (conference_obj_t*)g_value_get_pointer(&val); dragged_conf = (conference_obj_t*)g_value_get_pointer(&val);
} }
// DEBUG(" INTO_OR_BEFORE dragged_path %s, dragged_call_id %s, dragged_path_depth %i\n", dragged_path, dragged_call_id, dragged_path_depth);
break; break;
default: default:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment