/** * ephy_node_view_enable_drag_source: * @view: an #EphyNodeView * @types: a #GtkTargetEntry for the @view * @n_types: length of @types * @base_drag_column_id: id of the column for ephy_tree_model_sort_set_base_drag_column_id * @extra_drag_column_id: id of the column for ephy_tree_model_sort_set_extra_drag_column_id * * Sets @view as a drag source. **/ void ephy_node_view_enable_drag_source (EphyNodeView *view, const GtkTargetEntry *types, int n_types, int base_drag_column_id, int extra_drag_column_id) { g_return_if_fail (view != NULL); view->priv->source_target_list = gtk_target_list_new (types, n_types); ephy_tree_model_sort_set_base_drag_column_id (EPHY_TREE_MODEL_SORT (view->priv->sortmodel), base_drag_column_id); ephy_tree_model_sort_set_extra_drag_column_id (EPHY_TREE_MODEL_SORT (view->priv->sortmodel), extra_drag_column_id); g_signal_connect_object (G_OBJECT (view), "button_release_event", G_CALLBACK (button_release_cb), view, 0); g_signal_connect_object (G_OBJECT (view), "motion_notify_event", G_CALLBACK (motion_notify_cb), view, 0); g_signal_connect_object (G_OBJECT (view), "drag_data_get", G_CALLBACK (drag_data_get_cb), view, 0); }
static void ephy_tree_model_sort_finalize (GObject *object) { EphyTreeModelSort *model = EPHY_TREE_MODEL_SORT (object); g_free (model->priv->str_list); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void each_property_get_data_binder (EphyDragEachSelectedItemDataGet iteratee, gpointer iterator_context, gpointer data) { gpointer *context = (gpointer *) iterator_context; GList *path_list = (GList *) (context[0]); GList *i; EphyTreeModelSort *model = EPHY_TREE_MODEL_SORT (context[1]); GValue base_value = {0, }, extra_value = {0, }; for (i = path_list; i != NULL; i = i->next) { GtkTreeIter iter; GtkTreePath *path = NULL; const char *base_data, *extra_data; path = gtk_tree_row_reference_get_path (i->data); gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, path); gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, model->priv->base_drag_column_id, &base_value); base_data = g_value_get_string (&base_value); if (model->priv->extra_drag_column_id >= 0) { gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, model->priv->extra_drag_column_id, &extra_value); extra_data = g_value_get_string (&extra_value); } else extra_data = NULL; g_return_if_fail (base_data != NULL); LOG ("Data get %s (%s)", base_data, extra_data); iteratee (base_data, extra_data, data); gtk_tree_path_free (path); g_value_unset (&base_value); if (model->priv->extra_drag_column_id >= 0) g_value_unset (&extra_value); } }
static gboolean ephy_tree_model_sort_multi_row_draggable (EggTreeMultiDragSource *drag_source, GList *path_list) { return (EPHY_TREE_MODEL_SORT (drag_source)->priv->base_drag_column_id >= 0); }