summaryrefslogtreecommitdiff
path: root/src/nautilus-window-slot-dnd.c
diff options
context:
space:
mode:
authorNelson Benitez Leon <nbenitezl@gmail.com>2013-08-07 15:44:46 +0200
committerNelson Benítez León <nbenitezl+gnome@gmail.com>2013-08-07 16:59:29 +0200
commitb0fdd7453b5f017f811b732eb1a9ff5306ae7ae6 (patch)
tree54f8cc8bcd0dfa7e1b474875bcc76f9a771f15bd /src/nautilus-window-slot-dnd.c
parent3aa43358e2e4175df603666900e7bebde46b0e31 (diff)
downloadnautilus-b0fdd7453b5f017f811b732eb1a9ff5306ae7ae6.tar.gz
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>
Diffstat (limited to 'src/nautilus-window-slot-dnd.c')
-rw-r--r--src/nautilus-window-slot-dnd.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/nautilus-window-slot-dnd.c b/src/nautilus-window-slot-dnd.c
index bc4585756..3d6638cad 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;