diff --git a/gnome/src/contacts/calltree.c b/gnome/src/contacts/calltree.c index 743aefdf5194a513c68af315f080796428417770..2bb51334b76ac79bce76724df91693264e69c875 100644 --- a/gnome/src/contacts/calltree.c +++ b/gnome/src/contacts/calltree.c @@ -35,6 +35,7 @@ #include "str_utils.h" #include <string.h> #include <stdlib.h> +#include <gtk/gtk.h> #include "gtk2_wrappers.h" #include "eel-gconf-extensions.h" @@ -79,9 +80,9 @@ static callable_obj_t *calltree_source_call_for_drag = NULL; static conference_obj_t *calltree_dest_conf = NULL; static conference_obj_t *calltree_source_conf = NULL; -static void drag_data_get_cb(GtkTreeDragSource *drag_source, GtkTreePath *path, GtkSelectionData *selection_data, gpointer data); +static void drag_data_get_cb(GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, + guint target_type, guint etime, gpointer user_data); static void drag_end_cb(GtkWidget *, GdkDragContext *, gpointer); -static void drag_begin_cb(GtkWidget *widget, GdkDragContext *context, gpointer data UNUSED); static void drag_data_received_cb(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); static void drag_history_received_cb(GtkWidget *, GdkDragContext *, gint, gint, GtkSelectionData *, guint, guint, gpointer); static void menuitem_response(gchar *str); @@ -485,7 +486,6 @@ calltree_create(calltab_t* tab, int searchbar_type) // source widget drag n drop signals g_signal_connect(G_OBJECT(tab->view), "drag_end", G_CALLBACK(drag_end_cb), NULL); - g_signal_connect(G_OBJECT(tab->view), "drag_begin", G_CALLBACK(drag_begin_cb), NULL); // destination widget drag n drop signals g_signal_connect(G_OBJECT(tab->view), "drag_data_received", G_CALLBACK(drag_data_received_cb), NULL); @@ -1218,20 +1218,32 @@ non_draggable_call(callable_obj_t *call) * Source side drag signals * The data to be dragged to */ -static void drag_data_get_cb(GtkTreeDragSource *drag_source UNUSED, GtkTreePath *path UNUSED, GtkSelectionData *selection_data UNUSED, gpointer data UNUSED) +static void +drag_data_get_cb(GtkWidget *widget, GdkDragContext *context, + GtkSelectionData *selection_data, guint target_type, + guint etime, gpointer user_data) { -} + GtkTreeView *tree_view = GTK_TREE_VIEW(widget); + GtkTreeSelection *sel = gtk_tree_view_get_selection(tree_view); + GtkTreeModel *model; + GtkTreeIter iter; + gtk_tree_selection_get_selected(sel, &model, &iter); + gchar *id; + gtk_tree_model_get(model, &iter, COLUMN_ID, &id, -1); + DEBUG("get_cb: source id is %s", id); + enum {BITS_PER_BYTE = 8}; + gtk_selection_data_set(selection_data, NULL, BITS_PER_BYTE, (guchar*) id, strlen(id)); -static void drag_begin_cb(GtkWidget *widget UNUSED, GdkDragContext *context UNUSED, gpointer data UNUSED) -{ - DEBUG("source_path %s, source_call_id %s, source_path_depth %d", - calltree_source_path, calltree_source_call_id, calltree_source_path_depth); g_free(calltree_source_path_for_drag); calltree_source_path_for_drag = g_strdup(calltree_source_path); g_free(calltree_source_call_id_for_drag); - calltree_source_call_id_for_drag = g_strdup(calltree_source_call_id); + calltree_source_call_id = g_strdup(id); + calltree_source_call_id_for_drag = g_strdup(id); calltree_source_path_depth_for_drag = calltree_source_path_depth; calltree_source_call_for_drag = calltree_source_call; + DEBUG("source_path %s, source_call_id %s, source_path_depth %d", + calltree_source_path, calltree_source_call_id, calltree_source_path_depth); + //g_free(id); } static void undo_drag_call_action(callable_obj_t *call, GtkTreePath *spath) @@ -1256,11 +1268,6 @@ static void drag_end_cb(GtkWidget * widget, GdkDragContext * context UNUSED, gpo if (active_calltree_tab == history_tab) return; - DEBUG("source_path for drag %s, source_call_id for drag %s, source_path_depth for drag%d", - calltree_source_path_for_drag, calltree_source_call_id_for_drag, calltree_source_path_depth_for_drag); - DEBUG("source path %s, source call id %s, source path depth %d", - calltree_source_path, calltree_source_call_id, calltree_source_path_depth); - GtkTreeView *treeview = GTK_TREE_VIEW(widget); GtkTreeModel *model = gtk_tree_view_get_model(treeview); @@ -1461,7 +1468,8 @@ void drag_history_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, g_signal_stop_emission_by_name(G_OBJECT(widget), "drag_data_received"); } -void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gint x UNUSED, gint y UNUSED, GtkSelectionData *selection_data UNUSED, guint info UNUSED, guint t UNUSED, gpointer data UNUSED) +void drag_data_received_cb(GtkWidget *widget, GdkDragContext *context UNUSED, gint x UNUSED, + gint y UNUSED, GtkSelectionData *selection_data, guint target_type UNUSED, guint etime UNUSED, gpointer data UNUSED) { if (active_calltree_tab == history_tab) { g_signal_stop_emission_by_name(G_OBJECT(widget), "drag_data_received");