rpms/nautilus/devel nautilus-2.22.0-treeview-xds-dnd.patch, 1.1, 1.2 nautilus.spec, 1.233, 1.234

Tomas Bzatek tbzatek at fedoraproject.org
Mon Oct 27 11:03:42 UTC 2008


Author: tbzatek

Update of /cvs/extras/rpms/nautilus/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv21844

Modified Files:
	nautilus-2.22.0-treeview-xds-dnd.patch nautilus.spec 
Log Message:
* Mon Oct 27 2008 Tomas Bzatek <tbzatek at redhat.com> - 2.24.1-3
- Updated XDS support in tree view patch (sync with gnomebz #171655)


nautilus-2.22.0-treeview-xds-dnd.patch:

Index: nautilus-2.22.0-treeview-xds-dnd.patch
===================================================================
RCS file: /cvs/extras/rpms/nautilus/devel/nautilus-2.22.0-treeview-xds-dnd.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- nautilus-2.22.0-treeview-xds-dnd.patch	16 May 2008 13:55:30 -0000	1.1
+++ nautilus-2.22.0-treeview-xds-dnd.patch	27 Oct 2008 11:03:41 -0000	1.2
@@ -1,5 +1,7 @@
---- nautilus-2.22.0-orig/libnautilus-private/nautilus-tree-view-drag-dest.c	2008-03-07 16:28:45.000000000 +0100
-+++ nautilus-2.22.0-xdstree/libnautilus-private/nautilus-tree-view-drag-dest.c	2008-03-18 15:01:32.000000000 +0100
+Index: libnautilus-private/nautilus-tree-view-drag-dest.c
+===================================================================
+--- libnautilus-private/nautilus-tree-view-drag-dest.c	(Revision 14599)
++++ libnautilus-private/nautilus-tree-view-drag-dest.c	(Arbeitskopie)
 @@ -21,6 +21,7 @@
   * Boston, MA 02111-1307, USA.
   * 
@@ -8,7 +10,11 @@
   */
  
  /* nautilus-tree-view-drag-dest.c: Handles drag and drop for treeviews which 
-@@ -38,6 +39,9 @@
+@@ -34,9 +35,13 @@
+ #include <gtk/gtk.h>
+ #include <libgnome/gnome-macros.h>
+ #include "nautilus-file-dnd.h"
++#include "nautilus-file-changes-queue.h"
  #include "nautilus-icon-dnd.h"
  #include "nautilus-link.h"
  #include "nautilus-marshal.h"
@@ -18,16 +24,16 @@
  
  #define AUTO_SCROLL_MARGIN 20
  
-@@ -56,6 +60,8 @@ struct _NautilusTreeViewDragDestDetails 
+@@ -55,6 +60,8 @@ struct _NautilusTreeViewDragDestDetails 
  	guint highlight_id;
  	guint scroll_id;
  	guint expand_id;
 +	
-+	gchar *drop_path;
++	char *direct_save_uri;
  };
  
  enum {
-@@ -82,7 +88,8 @@ static const GtkTargetEntry drag_types [
+@@ -81,7 +88,8 @@ static const GtkTargetEntry drag_types [
  	/* prefer "_NETSCAPE_URL" over "text/uri-list" to satisfy web browsers. */
  	{ NAUTILUS_ICON_DND_NETSCAPE_URL_TYPE, 0, NAUTILUS_ICON_DND_NETSCAPE_URL },
  	{ NAUTILUS_ICON_DND_URI_LIST_TYPE, 0, NAUTILUS_ICON_DND_URI_LIST },
@@ -37,7 +43,30 @@
  };
  
  
-@@ -408,6 +415,7 @@ get_drop_action (NautilusTreeViewDragDes
+@@ -245,6 +253,12 @@ get_drag_data (NautilusTreeViewDragDest 
+ 	target = gtk_drag_dest_find_target (GTK_WIDGET (dest->details->tree_view), 
+ 					    context, 
+ 					    NULL);
++	if (target == gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE) &&
++	    !dest->details->drop_occurred) {
++		dest->details->drag_type = NAUTILUS_ICON_DND_XDNDDIRECTSAVE;
++		dest->details->have_drag_data = TRUE;
++		return;
++	}
+ 
+ 	gtk_drag_get_data (GTK_WIDGET (dest->details->tree_view),
+ 			   context, target, time);
+@@ -264,6 +278,9 @@ free_drag_data (NautilusTreeViewDragDest
+ 		nautilus_drag_destroy_selection_list (dest->details->drag_list);
+ 		dest->details->drag_list = NULL;
+ 	}
++
++	g_free (dest->details->direct_save_uri);
++	dest->details->direct_save_uri = NULL;
+ }
+ 
+ static char *
+@@ -408,6 +425,7 @@ get_drop_action (NautilusTreeViewDragDes
  		return context->suggested_action;
  
  	case NAUTILUS_ICON_DND_TEXT:
@@ -45,89 +74,138 @@
  		return GDK_ACTION_COPY;
  
  	case NAUTILUS_ICON_DND_KEYWORD:
-@@ -438,6 +446,7 @@ drag_motion_callback (GtkWidget *widget,
- 	GtkTreeViewDropPosition pos;
- 	GdkWindow *bin_window;
- 	guint action;
-+	gchar *uri_path;
- 
- 	dest = NAUTILUS_TREE_VIEW_DRAG_DEST (data);
- 
-@@ -464,13 +473,42 @@ drag_motion_callback (GtkWidget *widget,
- 	gtk_tree_view_get_drag_dest_row (GTK_TREE_VIEW (widget), &old_drop_path,
- 					 NULL);
- 	
-+	
- 	if (action) {
-+		
-+		/* XDS support: I need to save the drop path here, because I didn't 
-+		 * succeeded to get it from the drag_drop_callback (x and y coordinates
-+		 * passed to it do not match drop position, so I cannot get the target later) */
-+		
-+		uri_path = get_drop_target_uri_for_path (dest, drop_path);	
-+			
-+		if (uri_path != NULL) {
-+			if (dest->details->drop_path != NULL) {
-+				/* A path is already in, free and replace */
-+				if (strcmp (uri_path, dest->details->drop_path) != 0) {
-+					g_free (dest->details->drop_path);
-+					dest->details->drop_path = g_strdup (uri_path);
-+				}
-+			} else {
-+				/* No previous path is there */
-+				dest->details->drop_path = g_strdup (uri_path);
-+			}
-+		
-+			g_free (uri_path);
-+		
-+		}
-+		
-+		/* End XDS support */
-+		
- 		set_drag_dest_row (dest, drop_path);
-+		
- 		model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
- 		if (drop_path == NULL || (old_drop_path != NULL &&
- 		    gtk_tree_path_compare (old_drop_path, drop_path) != 0)) {
- 			remove_expand_timeout (dest);
- 		}
-+		
-+			
- 		if (dest->details->expand_id == 0 && drop_path != NULL) {
- 			gtk_tree_model_get_iter (model, &drop_iter, drop_path);
- 			if (gtk_tree_model_iter_has_child (model, &drop_iter)) {
-@@ -767,6 +805,22 @@ drag_data_received_callback (GtkWidget *
+@@ -718,6 +736,35 @@ receive_dropped_keyword (NautilusTreeVie
+ 	g_free (drop_target_uri);
+ }
+ 
++static void
++receive_xds (NautilusTreeViewDragDest *dest,
++	     GdkDragContext *context,
++	     int x, int y)
++{
++	GFile *location;
++
++	/* Indicate that we don't provide "F" fallback */
++	if (G_UNLIKELY (dest->details->drag_data->format == 8 
++			&& dest->details->drag_data->length == 1 
++			&& dest->details->drag_data->data[0] == 'F')) {
++		gdk_property_change (GDK_DRAWABLE (context->source_window),
++				     gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
++				     gdk_atom_intern ("text/plain", FALSE), 8,
++				     GDK_PROP_MODE_REPLACE, (const guchar *) "", 0);
++	} else if (G_LIKELY (dest->details->drag_data->format == 8 
++			     && dest->details->drag_data->length == 1 
++			     && dest->details->drag_data->data[0] == 'S')) {
++		g_assert (dest->details->direct_save_uri != NULL);
++		location = g_file_new_for_uri (dest->details->direct_save_uri);
++
++		nautilus_file_changes_queue_file_added (location);
++		nautilus_file_changes_consume_changes (TRUE);
++
++		g_object_unref (location);
++	}
++}
++
++
+ static gboolean
+ drag_data_received_callback (GtkWidget *widget,
+ 			     GdkDragContext *context,
+@@ -767,6 +814,10 @@ drag_data_received_callback (GtkWidget *
  			receive_dropped_keyword (dest, context, x, y);
  			success = TRUE;
  			break;
 +		case NAUTILUS_ICON_DND_XDNDDIRECTSAVE:
-+			/* Indicate that we don't provide "F" fallback */
-+			if (G_UNLIKELY (dest->details->drag_data->format == 8 
-+				&& dest->details->drag_data->length == 1 
-+				&& dest->details->drag_data->data[0] == 'F')) {
-+					gdk_property_change (GDK_DRAWABLE (context->source_window),
-+								   gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
-+								   gdk_atom_intern ("text/plain", FALSE), 8,
-+								   GDK_PROP_MODE_REPLACE, (const guchar *) "", 0);
-+				} else if (G_LIKELY (dest->details->drag_data->format == 8 
-+				&& dest->details->drag_data->length == 1 
-+				&& dest->details->drag_data->data[0] == 'S')) {
-+				/* FIXME: XDS Successful... Do we need to tell the treeview to update itself? */
-+				}
++			receive_xds (dest, context, x, y);
 +			success = TRUE;
 +			break;
  		}
  
  		dest->details->drop_occurred = FALSE;
-@@ -791,8 +845,71 @@ drag_drop_callback (GtkWidget *widget,
+@@ -782,6 +833,79 @@ drag_data_received_callback (GtkWidget *
+ 	return TRUE;
+ }
+ 
++static char *
++get_direct_save_filename (GdkDragContext *context)
++{
++	guchar *prop_text;
++	gint prop_len;
++	
++	if (!gdk_property_get (context->source_window, gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
++			       gdk_atom_intern ("text/plain", FALSE), 0, 1024, FALSE, NULL, NULL,
++			       &prop_len, &prop_text) && prop_text != NULL) {
++		return NULL;
++	}
++
++	/* Zero-terminate the string */
++	prop_text = g_realloc (prop_text, prop_len + 1);
++	prop_text[prop_len] = '\0';
++
++	/* Verify that the file name provided by the source is valid */
++	if (*prop_text == '\0' ||
++	    strchr ((const gchar *) prop_text, G_DIR_SEPARATOR) != NULL) {
++		nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
++				    "Invalid filename provided by XDS drag site");
++		g_free (prop_text);
++		return NULL;
++	}
++
++	return prop_text;
++}
++
++static gboolean
++set_direct_save_uri (NautilusTreeViewDragDest *dest,
++		     GdkDragContext *context,
++		     int x, int y)
++{
++	GFile *base, *child;
++	char *drop_uri;
++	char *filename, *uri;
++
++	g_assert (dest->details->direct_save_uri == NULL);
++
++	uri = NULL;
++
++	drop_uri = get_drop_target_uri_at_pos (dest, x, y);
++	if (drop_uri != NULL) {
++		filename = get_direct_save_filename (context);
++		if (filename != NULL) {
++			/* Resolve relative path */
++			base = g_file_new_for_uri (drop_uri);
++			child = g_file_get_child (base, filename);
++			uri = g_file_get_uri (child);
++
++			g_object_unref (base);
++			g_object_unref (child);
++
++			/* Change the property */
++			gdk_property_change (GDK_DRAWABLE (context->source_window),
++					     gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
++					     gdk_atom_intern ("text/plain", FALSE), 8,
++					     GDK_PROP_MODE_REPLACE, (const guchar *) uri,
++					     strlen (uri));
++
++			dest->details->direct_save_uri = uri;
++		} else {
++			nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
++					    "Invalid filename provided by XDS drag site");
++		}
++	} else {
++		nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
++				    "Could not retrieve XDS drop destination");
++	}
++
++	return uri != NULL;
++}
++
+ static gboolean
+ drag_drop_callback (GtkWidget *widget,
+ 		    GdkDragContext *context,
+@@ -791,8 +915,24 @@ drag_drop_callback (GtkWidget *widget,
  		    gpointer data)
  {
  	NautilusTreeViewDragDest *dest;
 +	guint info;
-+	guchar *prop_text;
-+	gint prop_len;
-+	GFile *base, *child;
-+	gchar *uri = NULL;
 +	GdkAtom target;
  
  	dest = NAUTILUS_TREE_VIEW_DRAG_DEST (data);
@@ -135,69 +213,16 @@
 +	target = gtk_drag_dest_find_target (GTK_WIDGET (dest->details->tree_view), 
 +					    context, 
 +					    NULL);
-+	
++	if (target == GDK_NONE) {
++		return FALSE;
++	}
++
 +	info = dest->details->drag_type;
-+	
-+	if (G_UNLIKELY (target == GDK_NONE)) {
++
++	if (info == NAUTILUS_ICON_DND_XDNDDIRECTSAVE &&
++	    !set_direct_save_uri (dest, context, x, y)) {
 +		return FALSE;
-+	} else if (target != GDK_NONE) {
-+		if (info == NAUTILUS_ICON_DND_XDNDDIRECTSAVE) {
-+					 if (gdk_property_get (context->source_window, gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
-+													gdk_atom_intern ("text/plain", FALSE), 0, 1024, FALSE, NULL, NULL,
-+													&prop_len, &prop_text) && prop_text != NULL) {
-+								/* Zero-terminate the string */
-+								prop_text = g_realloc (prop_text, prop_len + 1);
-+								prop_text[prop_len] = '\0';
-+
-+								/* Verify that the file name provided by the source is valid */
-+								if (G_LIKELY (*prop_text != '\0' && strchr ((const gchar *) prop_text, G_DIR_SEPARATOR) == NULL)) {
-+								
-+								/* Retrieve drop target path */
-+								if (dest->details->drop_path != NULL) {
-+										/* Resolve relative path */
-+										base = g_file_new_for_uri (dest->details->drop_path);
-+										child = g_file_get_child (base, (const gchar *) prop_text);
-+										uri = g_file_get_uri (child);
-+										g_object_unref (base);
-+										g_object_unref (child);
-+										/* Change the property */
-+										gdk_property_change (GDK_DRAWABLE (context->source_window),
-+																gdk_atom_intern (NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, FALSE),
-+																gdk_atom_intern ("text/plain", FALSE), 8,
-+																GDK_PROP_MODE_REPLACE, (const guchar *) uri,
-+																strlen (uri));
-+
-+										/* Free memory */
-+										g_free (dest->details->drop_path);
-+										dest->details->drop_path = NULL;
-+										g_free (uri);
-+								} else {
-+									nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
-+									"Could not retrieve XDS drag site ");
-+								}
-+									} else {
-+									  /* tell the user that the file name provided by the X Direct Save source is invalid */
-+										nautilus_debug_log (FALSE, NAUTILUS_DEBUG_LOG_DOMAIN_USER,
-+										"Invalid filename provided by XDS drag site");
-+									}
-+								/* cleanup */
-+								g_free (prop_text);
-+					}
-+					/* if uri == NULL, we didn't set the property */
-+					if (G_UNLIKELY (uri == NULL))
-+						return FALSE;
-+		}
 +	}
  
  	dest->details->drop_occurred = TRUE;
  
-@@ -845,6 +962,9 @@ nautilus_tree_view_drag_dest_finalize (G
- 	dest = NAUTILUS_TREE_VIEW_DRAG_DEST (object);
- 
- 	free_drag_data (dest);
-+	
-+	if (dest->details->drop_path)
-+		g_free (dest->details->drop_path);
- 
- 	g_free (dest->details);
- 


Index: nautilus.spec
===================================================================
RCS file: /cvs/extras/rpms/nautilus/devel/nautilus.spec,v
retrieving revision 1.233
retrieving revision 1.234
diff -u -r1.233 -r1.234
--- nautilus.spec	24 Oct 2008 09:33:34 -0000	1.233
+++ nautilus.spec	27 Oct 2008 11:03:41 -0000	1.234
@@ -19,7 +19,7 @@
 Name:		nautilus
 Summary:        Nautilus is a file manager for GNOME
 Version: 	2.24.1
-Release:	2%{?dist}
+Release:	3%{?dist}
 License: 	GPLv2+
 Group:          User Interface/Desktops
 Source: 	http://download.gnome.org/sources/%{name}/2.24/%{name}-%{version}.tar.bz2
@@ -138,7 +138,7 @@
 %patch7 -p1 -b .rtl-fix
 # %patch8 -p1 -b .hide-white-screen
 %patch10 -p0 -b .gvfs-desktop-key
-%patch15 -p1 -b .xds
+%patch15 -p0 -b .xds
 %patch17 -p0 -b .symlink
 %patch18 -p0 -b .fallback-file-icon
 
@@ -269,6 +269,9 @@
 
 
 %changelog
+* Mon Oct 27 2008 Tomas Bzatek <tbzatek at redhat.com> - 2.24.1-3
+- Updated XDS support in tree view patch (sync with gnomebz #171655)
+
 * Fri Oct 24 2008 Alexander Larsson <alexl at redhat.com> - 2.24.1-2
 - Manually check for fallback file icon since we're not
   always returning that from gio anymore (from upstream)




More information about the scm-commits mailing list