Esempio n. 1
0
/**
 * 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);
}
Esempio n. 2
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);
}
Esempio n. 3
0
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);
    }
}
Esempio n. 4
0
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);
}