[nautilus] pathbar: support switching locations for XDS drag types



commit b0fdd7453b5f017f811b732eb1a9ff5306ae7ae6
Author: Nelson Benitez Leon <nbenitezl gmail com>
Date:   Wed Aug 7 15:44:46 2013 +0200

    pathbar: support switching locations for XDS drag types
    
        Make pathbar also change locations when hovered by
        XDS dnd targets (eg. dragging a file from file-roller).
    
        Fixes bug 705609
    
    Signed-off-by: Nelson Benítez León <nbenitezl+gnome gmail com>

 src/nautilus-window-slot-dnd.c |   19 +++++++++++++++----
 1 files changed, 15 insertions(+), 4 deletions(-)
---
diff --git a/src/nautilus-window-slot-dnd.c b/src/nautilus-window-slot-dnd.c
index bc45857..3d6638c 100644
--- a/src/nautilus-window-slot-dnd.c
+++ b/src/nautilus-window-slot-dnd.c
@@ -160,11 +160,13 @@ slot_proxy_drag_motion (GtkWidget          *widget,
   int action;
   char *target_uri;
   gboolean valid_text_drag;
+  gboolean valid_xds_drag;
 
   drag_info = user_data;
 
   action = 0;
   valid_text_drag = FALSE;
+  valid_xds_drag = FALSE;
 
   if (gtk_drag_get_source_widget (context) == widget) {
     goto out;
@@ -222,13 +224,16 @@ slot_proxy_drag_motion (GtkWidget          *widget,
       action = nautilus_drag_default_drop_action_for_netscape_url (context);
     } else if (drag_info->info == NAUTILUS_ICON_DND_TEXT) {
       valid_text_drag = TRUE;
+    } else if (drag_info->info == NAUTILUS_ICON_DND_XDNDDIRECTSAVE ||
+               drag_info->info == NAUTILUS_ICON_DND_RAW) {
+      valid_xds_drag = TRUE;
     }
   }
 
   g_free (target_uri);
 
  out:
-  if (action != 0 || valid_text_drag) {
+  if (action != 0 || valid_text_drag || valid_xds_drag) {
     gtk_drag_highlight (widget);
     slot_proxy_check_switch_location_timer (drag_info, widget);
   } else {
@@ -267,7 +272,9 @@ drag_info_clear (NautilusDragSlotProxyInfo *drag_info)
     g_list_free (drag_info->data.uri_list);
   } else if (drag_info->info == NAUTILUS_ICON_DND_NETSCAPE_URL) {
     g_free (drag_info->data.netscape_url);
-  } else if (drag_info->info == NAUTILUS_ICON_DND_TEXT) {
+  } else if (drag_info->info == NAUTILUS_ICON_DND_TEXT ||
+             drag_info->info == NAUTILUS_ICON_DND_XDNDDIRECTSAVE ||
+             drag_info->info == NAUTILUS_ICON_DND_RAW) {
     if (drag_info->data.selection_data != NULL) {
       gtk_selection_data_free (drag_info->data.selection_data);
     }
@@ -430,7 +437,9 @@ slot_proxy_drag_data_received (GtkWidget          *widget,
     drag_info->data.netscape_url = g_strdup ((char *) gtk_selection_data_get_data (data));
 
     drag_info->have_valid_data = drag_info->data.netscape_url != NULL;
-  } else if (info == NAUTILUS_ICON_DND_TEXT) {
+  } else if (info == NAUTILUS_ICON_DND_TEXT ||
+             info == NAUTILUS_ICON_DND_XDNDDIRECTSAVE ||
+             info == NAUTILUS_ICON_DND_RAW) {
     drag_info->data.selection_data = gtk_selection_data_copy (data);
     drag_info->have_valid_data = drag_info->data.selection_data != NULL;
   }
@@ -449,7 +458,9 @@ nautilus_drag_slot_proxy_init (GtkWidget *widget,
 
   const GtkTargetEntry targets[] = {
     { NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE, 0, NAUTILUS_ICON_DND_GNOME_ICON_LIST },
-    { NAUTILUS_ICON_DND_NETSCAPE_URL_TYPE, 0, NAUTILUS_ICON_DND_NETSCAPE_URL }
+    { NAUTILUS_ICON_DND_NETSCAPE_URL_TYPE, 0, NAUTILUS_ICON_DND_NETSCAPE_URL },
+    { NAUTILUS_ICON_DND_XDNDDIRECTSAVE_TYPE, 0, NAUTILUS_ICON_DND_XDNDDIRECTSAVE }, /* XDS Protocol Type */
+    { NAUTILUS_ICON_DND_RAW_TYPE, 0, NAUTILUS_ICON_DND_RAW }
   };
   GtkTargetList *target_list;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]