Big TreeView DnD fixage, makes drops on empty models work, makes TreeStore

Wed Sep 10 01:06:44 2003  Kristian Rietveld  <kris@gtk.org>

	Big TreeView DnD fixage, makes drops on empty models work, makes
	TreeStore DnD work and gets rid of gtk-tree-model-drop-append.
	Related bugs #95362 and #113314. I don't want to touch this code
	ever again.

	* gtk/gtktreeprivate.h (GtkTreePrivate): add empty_view_drop field.

	* gtk/gtktreednd.c (gtk_tree_get_row_drag_data): add check
	for selection_data->length.

	* gtk/gtktreeview.c (struct DestRow), (dest_row_free),
	(set_dest_row), (get_dest_row): we don't store just the row ref
	anymore, but a struct with the row ref and additional info,
	(set_destination_row): handle drops on empty space and some
	style fixes,
	(get_logical_dest_row): also return path_down_mode/drop_append_mode
	flags, handle dropping childs on their new parents, rewrite
	drop append handling into something saner,
	(gtk_tree_view_drag_motion): show a "drop possible arrow" on empty
	spaces,
	(gtk_tree_view_drag_drop): updates for updated backend,
	(gtk_tree_view_drag_data_received): updates for updated backend,
	path down mode (treestore DnD) handling,
	(gtk_tree_view_set_drag_dest_row): set empty_view_drop flag,
	when we are trying to drop a row on an empty model,
	(gtk_tree_view_get_drag_dest_row): handle empty_view_drop flag.

	* gtk/gtkliststore.c (gtk_list_store_drag_data_received),
	(gtk_list_store_row_drop_possible): style and drop-append fixes.

	* gtk/gtktreestore.c (gtk_tree_store_drag_data_received): ditto.
This commit is contained in:
Kristian Rietveld
2003-09-09 23:13:39 +00:00
committed by Kristian Rietveld
parent 4b3e2d69a5
commit b78691f098
10 changed files with 370 additions and 84 deletions

View File

@ -1754,7 +1754,7 @@ gtk_tree_store_drag_data_received (GtkTreeDragDest *drag_dest,
gtk_tree_path_free (parent);
parent = NULL;
gtk_tree_store_prepend (GTK_TREE_STORE (tree_model),
gtk_tree_store_prepend (tree_store,
&dest_iter,
dest_parent_p);
@ -1762,36 +1762,17 @@ gtk_tree_store_drag_data_received (GtkTreeDragDest *drag_dest,
}
else
{
if (gtk_tree_model_get_iter (GTK_TREE_MODEL (tree_model),
&dest_iter,
prev))
if (gtk_tree_model_get_iter (tree_model, &dest_iter, prev))
{
GtkTreeIter tmp_iter = dest_iter;
if (GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tree_model), "gtk-tree-model-drop-append")))
{
GtkTreeIter parent;
gtk_tree_store_insert_after (tree_store, &dest_iter, NULL,
&tmp_iter);
if (gtk_tree_model_iter_parent (GTK_TREE_MODEL (tree_model), &parent, &tmp_iter))
gtk_tree_store_append (GTK_TREE_STORE (tree_model),
&dest_iter, &parent);
else
gtk_tree_store_append (GTK_TREE_STORE (tree_model),
&dest_iter, NULL);
}
else
gtk_tree_store_insert_after (GTK_TREE_STORE (tree_model),
&dest_iter,
NULL,
&tmp_iter);
retval = TRUE;
}
}
g_object_set_data (G_OBJECT (tree_model), "gtk-tree-model-drop-append",
NULL);
gtk_tree_path_free (prev);
/* If we succeeded in creating dest_iter, walk src_iter tree branch,