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:
committed by
Kristian Rietveld
parent
4b3e2d69a5
commit
b78691f098
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user