Index: ruby-gnome2-0.19.1/gtk/src/rbgtktreedrag.c
===================================================================
--- ruby-gnome2-0.19.1.orig/gtk/src/rbgtktreedrag.c 2009-08-20 15:05:27.987213034 +0200
+++ ruby-gnome2-0.19.1/gtk/src/rbgtktreedrag.c 2009-08-20 15:05:28.007211725 +0200
@@ -54,24 +54,25 @@
}
static void
-_rb_marshal_BOOLEAN__BOXED_BOXED(GClosure *closure,
- GValue *return_value,
- guint n_param_values,
- const GValue *param_values,
- gpointer invocation_hint,
- gpointer marshal_data)
-{
- typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_BOXED) (gpointer data1,
- gpointer arg_1,
- gpointer arg_2,
- gpointer data2);
- register GMarshalFunc_BOOLEAN__BOXED_BOXED callback;
+_rb_marshal_BOOLEAN__BOXED_OBJECT_BOXED(GClosure *closure,
+ GValue *return_value,
+ guint n_param_values,
+ const GValue *param_values,
+ gpointer invocation_hint,
+ gpointer marshal_data)
+{
+ typedef gboolean (*GMarshalFunc_BOOLEAN__BOXED_OBJECT_BOXED) (gpointer data1,
+ gpointer arg_1,
+ gpointer arg_2,
+ gpointer arg_3,
+ gpointer data2);
+ register GMarshalFunc_BOOLEAN__BOXED_OBJECT_BOXED callback;
register GCClosure *cc = (GCClosure*) closure;
register gpointer data1, data2;
gboolean v_return;
g_return_if_fail (return_value != NULL);
- g_return_if_fail (n_param_values == 3);
+ g_return_if_fail (n_param_values == 4);
if (G_CCLOSURE_SWAP_DATA (closure))
{
@@ -83,11 +84,12 @@
data1 = g_value_peek_pointer (param_values + 0);
data2 = closure->data;
}
- callback = (GMarshalFunc_BOOLEAN__BOXED_BOXED) (marshal_data ? marshal_data : cc->callback);
+ callback = (GMarshalFunc_BOOLEAN__BOXED_OBJECT_BOXED) (marshal_data ? marshal_data : cc->callback);
v_return = callback (data1,
g_marshal_value_peek_boxed (param_values + 1),
- g_marshal_value_peek_boxed (param_values + 2),
+ g_marshal_value_peek_object (param_values + 2),
+ g_marshal_value_peek_boxed (param_values + 3),
data2);
g_value_set_boolean (return_value, v_return);
@@ -110,10 +112,11 @@
G_SIGNAL_RUN_LAST,
0,
NULL, NULL,
- _rb_marshal_BOOLEAN__BOXED_BOXED,
- G_TYPE_BOOLEAN, 2,
+ _rb_marshal_BOOLEAN__BOXED_OBJECT_BOXED,
+ G_TYPE_BOOLEAN, 3,
GTK_TYPE_TREE_PATH,
- GTK_TYPE_SELECTION_DATA);
+ GTK_TYPE_TREE_MODEL,
+ GTK_TYPE_TREE_PATH);
}
static gboolean
@@ -146,11 +149,20 @@
guint signal_id = g_signal_lookup("row-drop-possible", G_TYPE_FROM_INSTANCE(drag_dest));
+ GtkTreeModel* source_model = NULL;
+ GtkTreePath* source_path = NULL;
+ /* The selection_data must be of type GTK_TREE_MODEL_ROW, otherwise
+ the get function returns false and the out values are hopefully left
+ as-is. */
+ gtk_tree_get_row_drag_data(selection_data, &source_model, &source_path);
+
if(g_signal_has_handler_pending(drag_dest, signal_id, 0, FALSE))
- g_signal_emit(drag_dest, signal_id, 0, dest_path, selection_data, &retval);
+ g_signal_emit(drag_dest, signal_id, 0, dest_path, source_model, source_path, &retval);
else
retval = TRUE; /* default value */
+ if(source_path)
+ gtk_tree_path_free(source_path);
return retval;
}