#endif
}
+static void folderview_recollapse_nodes(FolderView *folderview, GtkCTreeNode *node)
+{
+ GSList *list = NULL;
+ GSList *done = NULL;
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+ for (list = folderview->nodes_to_recollapse; list != NULL; list = g_slist_next(list)) {
+ if (!gtkut_ctree_node_is_parent(GTK_CTREE_NODE(list->data), node)
+ && list->data != node) {
+ gtk_ctree_collapse(ctree, GTK_CTREE_NODE(list->data));
+ done = g_slist_append(done, GTK_CTREE_NODE(list->data));
+ }
+ }
+ for (list = done; list != NULL; list = g_slist_next(list)) {
+ folderview->nodes_to_recollapse = g_slist_remove(folderview->nodes_to_recollapse,
+ list->data);
+ }
+ g_slist_free(done);
+}
+
static gboolean folderview_drag_motion_cb(GtkWidget *widget,
GdkDragContext *context,
gint x,
}
+ if (acceptable || (src_item && src_item == item)) {
+ folderview_recollapse_nodes(folderview, node);
+ if (item->collapsed) {
+ gtk_ctree_expand(GTK_CTREE(widget), node);
+ folderview->nodes_to_recollapse = g_slist_append(
+ folderview->nodes_to_recollapse,
+ node);
+ }
+ }
+
if (acceptable) {
gtk_signal_handler_block_by_func
(GTK_OBJECT(widget),
}
node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node);
- src_item = folder_find_item_from_path(source);
+ src_item = folder_find_item_from_identifier(source);
if (!item || !src_item || src_item->stype != F_NORMAL) {
gtk_drag_finish(drag_context, FALSE, FALSE, time);
inc_unlock();
gtk_widget_set_sensitive(folderview->ctree, TRUE);
}
+ folderview->nodes_to_recollapse = NULL;
}
static gint folderview_clist_compare(GtkCList *clist,
list = gtk_target_list_new(folderview_drag_types, 1);
+ folderview->nodes_to_recollapse = NULL; /* in case the last drag has been cancelled */
+
context = gtk_drag_begin(widget, list,
GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event);
gtk_drag_set_icon_default(context);
(GTK_CTREE(folderview->ctree),
GTK_CTREE_NODE(cur->data));
if (item) {
- source = g_strdup_printf ("FROM_OTHER_FOLDER%s", item->path);
+ source = g_strdup_printf ("FROM_OTHER_FOLDER%s", folder_item_get_identifier(item));
gtk_selection_data_set(selection_data,
selection_data->target, 8,
source, strlen(source));