The DND setup should take place in the "drag-begin" handler not after
the drag is already taking place. This inter alia takes care that the
drag icon is displayed instantly when the drag starts and not just some
time later.

Proposed patch attached.

-- 
Christian Neumair <[EMAIL PROTECTED]>
Index: src/file-manager/fm-list-view.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-list-view.c,v
retrieving revision 1.256
diff -u -p -r1.256 fm-list-view.c
--- src/file-manager/fm-list-view.c	12 Aug 2005 18:11:30 -0000	1.256
+++ src/file-manager/fm-list-view.c	24 Aug 2005 12:26:54 -0000
@@ -406,6 +419,34 @@ get_drag_pixbuf (FMListView *view)
 	return ret;
 }
 
+static void
+drag_begin_callback (GtkWidget *widget,
+		     GdkDragContext *context,
+		     FMListView *view)
+{
+	GList *ref_list;
+	GdkPixbuf *pixbuf;
+
+	pixbuf = get_drag_pixbuf (view);
+	if (pixbuf) {
+		gtk_drag_set_icon_pixbuf (context,
+					  pixbuf,
+					  0, 0);
+		g_object_unref (pixbuf);
+	} else {
+		gtk_drag_set_icon_default (context);
+	}
+
+	stop_drag_check (view);
+	view->details->drag_started = TRUE;
+	
+	ref_list = get_filtered_selection_refs (GTK_TREE_VIEW (widget));
+	g_object_set_data_full (G_OBJECT (context),
+				"drag-info",
+				ref_list,
+				(GDestroyNotify)ref_list_free);
+}
+
 static gboolean
 motion_notify_callback (GtkWidget *widget,
 			GdkEventMotion *event,
@@ -414,8 +455,6 @@ motion_notify_callback (GtkWidget *widge
 	FMListView *view;
 	GdkDragContext *context;
 	GdkCursor *cursor;
-	GList *ref_list;
-	GdkPixbuf *pixbuf;	
 	GtkTreePath *last_hover_path;
 	GtkTreeIter iter;
 	
@@ -476,25 +515,6 @@ motion_notify_callback (GtkWidget *widge
 				 GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK,
 				 view->details->drag_button,
 				 (GdkEvent*)event);
-
-			stop_drag_check (view);
-			view->details->drag_started = TRUE;
-			
-			ref_list = get_filtered_selection_refs (GTK_TREE_VIEW (widget));
-			g_object_set_data_full (G_OBJECT (context),
-						"drag-info",
-						ref_list,
-						(GDestroyNotify)ref_list_free);
-
-			pixbuf = get_drag_pixbuf (view);
-			if (pixbuf) {
-				gtk_drag_set_icon_pixbuf (context,
-							  pixbuf,
-							  0, 0);
-				g_object_unref (pixbuf);
-			} else {
-				gtk_drag_set_icon_default (context);
-			}
 		}		      
 		return TRUE;
 	}
@@ -1346,6 +1366,8 @@ create_and_set_up_tree_view (FMListView 
 				 "changed",
 				 G_CALLBACK (list_selection_changed_callback), view, 0);
 
+	g_signal_connect_object (view->details->tree_view, "drag_begin",
+				 G_CALLBACK (drag_begin_callback), view, 0);
 	g_signal_connect_object (view->details->tree_view, "drag_data_get",
 				 G_CALLBACK (drag_data_get_callback), view, 0);
 	g_signal_connect_object (view->details->tree_view, "motion_notify_event",

Attachment: signature.asc
Description: This is a digitally signed message part

-- 
nautilus-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/nautilus-list

Reply via email to