summaryrefslogtreecommitdiff
path: root/src/nautilus-files-view-dnd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-files-view-dnd.c')
-rw-r--r--src/nautilus-files-view-dnd.c826
1 files changed, 443 insertions, 383 deletions
diff --git a/src/nautilus-files-view-dnd.c b/src/nautilus-files-view-dnd.c
index eeba6631c..9f73624a5 100644
--- a/src/nautilus-files-view-dnd.c
+++ b/src/nautilus-files-view-dnd.c
@@ -1,4 +1,3 @@
-
/*
* nautilus-view-dnd.c: DnD helpers for NautilusFilesView
*
@@ -41,17 +40,18 @@
#include "nautilus-global-preferences.h"
#define GET_ANCESTOR(obj) \
- GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (obj), GTK_TYPE_WINDOW))
+ GTK_WINDOW (gtk_widget_get_ancestor (GTK_WIDGET (obj), GTK_TYPE_WINDOW))
static inline void
view_widget_to_file_operation_position (NautilusFilesView *view,
GdkPoint *position)
{
- NautilusFilesViewClass *class = NAUTILUS_FILES_VIEW_GET_CLASS (view);
+ NautilusFilesViewClass *class = NAUTILUS_FILES_VIEW_GET_CLASS (view);
- if (class->widget_to_file_operation_position != NULL) {
- class->widget_to_file_operation_position (view, position);
- }
+ if (class->widget_to_file_operation_position != NULL)
+ {
+ class->widget_to_file_operation_position (view, position);
+ }
}
static void
@@ -59,32 +59,35 @@ view_widget_to_file_operation_position_xy (NautilusFilesView *view,
int *x,
int *y)
{
- GdkPoint position;
+ GdkPoint position;
- position.x = *x;
- position.y = *y;
- view_widget_to_file_operation_position (view, &position);
- *x = position.x;
- *y = position.y;
+ position.x = *x;
+ position.y = *y;
+ view_widget_to_file_operation_position (view, &position);
+ *x = position.x;
+ *y = position.y;
}
-typedef struct {
- NautilusFilesView *view;
- char *link_name;
- char *target_uri;
- char *url;
- GdkPoint point;
+typedef struct
+{
+ NautilusFilesView *view;
+ char *link_name;
+ char *target_uri;
+ char *url;
+ GdkPoint point;
} NetscapeUrlDropLink;
static void
revert_slashes (char *string)
{
- while (*string != 0) {
- if (*string == '/') {
- *string = '\\';
- }
- string++;
+ while (*string != 0)
+ {
+ if (*string == '/')
+ {
+ *string = '\\';
}
+ string++;
+ }
}
static void
@@ -92,62 +95,65 @@ handle_netscape_url_drop_link_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- NetscapeUrlDropLink *data = user_data;
- char *link_name = data->link_name;
- char *link_display_name;
- gint screen_num;
- GFileInfo *info;
- char *icon_name = NULL;
- GdkScreen *screen;
-
- info = g_file_query_info_finish (G_FILE (source_object),
- res, NULL);
-
- if (info != NULL) {
- GIcon *icon;
- const char * const *names;
-
- icon = g_file_info_get_icon (info);
-
- if (G_IS_THEMED_ICON (icon)) {
- names = g_themed_icon_get_names (G_THEMED_ICON (icon));
- icon_name = g_strdup (names[0]);
- }
-
- g_object_unref (info);
+ NetscapeUrlDropLink *data = user_data;
+ char *link_name = data->link_name;
+ char *link_display_name;
+ gint screen_num;
+ GFileInfo *info;
+ char *icon_name = NULL;
+ GdkScreen *screen;
+
+ info = g_file_query_info_finish (G_FILE (source_object),
+ res, NULL);
+
+ if (info != NULL)
+ {
+ GIcon *icon;
+ const char * const *names;
+
+ icon = g_file_info_get_icon (info);
+
+ if (G_IS_THEMED_ICON (icon))
+ {
+ names = g_themed_icon_get_names (G_THEMED_ICON (icon));
+ icon_name = g_strdup (names[0]);
}
- if (icon_name == NULL) {
- icon_name = g_strdup ("text-html");
- }
+ g_object_unref (info);
+ }
- link_display_name = g_strdup_printf (_("Link to %s"), link_name);
+ if (icon_name == NULL)
+ {
+ icon_name = g_strdup ("text-html");
+ }
- /* The filename can't contain slashes, strip em.
- (the basename of http://foo/ is http://foo/) */
- revert_slashes (link_name);
+ link_display_name = g_strdup_printf (_("Link to %s"), link_name);
- screen = gtk_widget_get_screen (GTK_WIDGET (data->view));
- screen_num = gdk_screen_get_number (screen);
+ /* The filename can't contain slashes, strip em.
+ * (the basename of http://foo/ is http://foo/) */
+ revert_slashes (link_name);
- nautilus_link_local_create (data->target_uri,
- link_name,
- link_display_name,
- icon_name,
- data->url,
- &data->point,
- screen_num,
- TRUE);
+ screen = gtk_widget_get_screen (GTK_WIDGET (data->view));
+ screen_num = gdk_screen_get_number (screen);
- g_free (link_display_name);
- g_free (icon_name);
+ nautilus_link_local_create (data->target_uri,
+ link_name,
+ link_display_name,
+ icon_name,
+ data->url,
+ &data->point,
+ screen_num,
+ TRUE);
- g_free (data->url);
- g_free (data->link_name);
- g_free (data->target_uri);
+ g_free (link_display_name);
+ g_free (icon_name);
- g_object_unref (data->view);
- g_slice_free (NetscapeUrlDropLink, data);
+ g_free (data->url);
+ g_free (data->link_name);
+ g_free (data->target_uri);
+
+ g_object_unref (data->view);
+ g_slice_free (NetscapeUrlDropLink, data);
}
void
@@ -158,99 +164,115 @@ nautilus_files_view_handle_netscape_url_drop (NautilusFilesView *view,
int x,
int y)
{
- char *url, *title;
- char *link_name;
- GArray *points;
- char **bits;
- GList *uri_list = NULL;
- GFile *f;
-
- f = g_file_new_for_uri (target_uri);
-
- if (!g_file_is_native (f)) {
- eel_show_warning_dialog (_("Drag and drop is not supported."),
- _("Drag and drop is only supported on local file systems."),
- GET_ANCESTOR (view));
- g_object_unref (f);
- return;
- }
-
+ char *url, *title;
+ char *link_name;
+ GArray *points;
+ char **bits;
+ GList *uri_list = NULL;
+ GFile *f;
+
+ f = g_file_new_for_uri (target_uri);
+
+ if (!g_file_is_native (f))
+ {
+ eel_show_warning_dialog (_("Drag and drop is not supported."),
+ _("Drag and drop is only supported on local file systems."),
+ GET_ANCESTOR (view));
g_object_unref (f);
+ return;
+ }
- /* _NETSCAPE_URL_ works like this: $URL\n$TITLE */
- bits = g_strsplit (encoded_url, "\n", 0);
- switch (g_strv_length (bits)) {
+ g_object_unref (f);
+
+ /* _NETSCAPE_URL_ works like this: $URL\n$TITLE */
+ bits = g_strsplit (encoded_url, "\n", 0);
+ switch (g_strv_length (bits))
+ {
case 0:
- g_strfreev (bits);
- return;
+ {
+ g_strfreev (bits);
+ return;
+ }
+
case 1:
- url = bits[0];
- title = NULL;
- break;
+ {
+ url = bits[0];
+ title = NULL;
+ }
+ break;
+
default:
- url = bits[0];
- title = bits[1];
+ url = bits[0];
+ title = bits[1];
+ }
+
+ f = g_file_new_for_uri (url);
+
+ view_widget_to_file_operation_position_xy (view, &x, &y);
+
+ /* We don't support GDK_ACTION_ASK or GDK_ACTION_PRIVATE
+ * and we don't support combinations either. */
+ if ((action != GDK_ACTION_DEFAULT) &&
+ (action != GDK_ACTION_COPY) &&
+ (action != GDK_ACTION_MOVE) &&
+ (action != GDK_ACTION_LINK))
+ {
+ eel_show_warning_dialog (_("Drag and drop is not supported."),
+ _("An invalid drag type was used."),
+ GET_ANCESTOR (view));
+ return;
+ }
+
+ if (action == GDK_ACTION_LINK)
+ {
+ if (g_strcmp0 (title, NULL) == 0)
+ {
+ link_name = g_file_get_basename (f);
+ }
+ else
+ {
+ link_name = g_strdup (title);
}
- f = g_file_new_for_uri (url);
+ if (g_strcmp0 (link_name, NULL) != 0)
+ {
+ NetscapeUrlDropLink *data;
+
+ data = g_slice_new0 (NetscapeUrlDropLink);
+ data->link_name = link_name;
+ data->point.x = x;
+ data->point.y = y;
+ data->view = g_object_ref (view);
+ data->target_uri = g_strdup (target_uri);
+ data->url = g_strdup (url);
+
+ g_file_query_info_async (f,
+ G_FILE_ATTRIBUTE_STANDARD_ICON,
+ 0, 0, NULL,
+ handle_netscape_url_drop_link_cb,
+ data);
+ }
+ }
+ else
+ {
+ GdkPoint tmp_point = { 0, 0 };
- view_widget_to_file_operation_position_xy (view, &x, &y);
+ /* pass in a 1-item array of icon positions, relative to x, y */
+ points = g_array_new (FALSE, TRUE, sizeof (GdkPoint));
+ g_array_append_val (points, tmp_point);
- /* We don't support GDK_ACTION_ASK or GDK_ACTION_PRIVATE
- * and we don't support combinations either. */
- if ((action != GDK_ACTION_DEFAULT) &&
- (action != GDK_ACTION_COPY) &&
- (action != GDK_ACTION_MOVE) &&
- (action != GDK_ACTION_LINK)) {
- eel_show_warning_dialog (_("Drag and drop is not supported."),
- _("An invalid drag type was used."),
- GET_ANCESTOR (view));
- return;
- }
+ uri_list = g_list_append (uri_list, url);
- if (action == GDK_ACTION_LINK) {
- if (g_strcmp0 (title, NULL) == 0) {
- link_name = g_file_get_basename (f);
- } else {
- link_name = g_strdup (title);
- }
-
- if (g_strcmp0 (link_name, NULL) != 0) {
- NetscapeUrlDropLink *data;
-
- data = g_slice_new0 (NetscapeUrlDropLink);
- data->link_name = link_name;
- data->point.x = x;
- data->point.y = y;
- data->view = g_object_ref (view);
- data->target_uri = g_strdup (target_uri);
- data->url = g_strdup (url);
-
- g_file_query_info_async (f,
- G_FILE_ATTRIBUTE_STANDARD_ICON,
- 0, 0, NULL,
- handle_netscape_url_drop_link_cb,
- data);
- }
- } else {
- GdkPoint tmp_point = { 0, 0 };
-
- /* pass in a 1-item array of icon positions, relative to x, y */
- points = g_array_new (FALSE, TRUE, sizeof (GdkPoint));
- g_array_append_val (points, tmp_point);
-
- uri_list = g_list_append (uri_list, url);
-
- nautilus_files_view_move_copy_items (view, uri_list, points,
- target_uri,
- action, x, y);
-
- g_list_free (uri_list);
- g_array_free (points, TRUE);
- }
+ nautilus_files_view_move_copy_items (view, uri_list, points,
+ target_uri,
+ action, x, y);
- g_object_unref (f);
- g_strfreev (bits);
+ g_list_free (uri_list);
+ g_array_free (points, TRUE);
+ }
+
+ g_object_unref (f);
+ g_strfreev (bits);
}
void
@@ -261,81 +283,93 @@ nautilus_files_view_handle_uri_list_drop (NautilusFilesView *view,
int x,
int y)
{
- gchar **uri_list;
- GList *real_uri_list = NULL;
- char *container_uri;
- int n_uris, i;
- GArray *points;
-
- if (item_uris == NULL) {
- return;
- }
-
- container_uri = NULL;
- if (target_uri == NULL) {
- container_uri = nautilus_files_view_get_backing_uri (view);
- g_assert (container_uri != NULL);
- }
-
- if (action == GDK_ACTION_ASK) {
- action = nautilus_drag_drop_action_ask
- (GTK_WIDGET (view),
- GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
- if (action == 0) {
- g_free (container_uri);
- return;
- }
- }
-
- /* We don't support GDK_ACTION_ASK or GDK_ACTION_PRIVATE
- * and we don't support combinations either. */
- if ((action != GDK_ACTION_DEFAULT) &&
- (action != GDK_ACTION_COPY) &&
- (action != GDK_ACTION_MOVE) &&
- (action != GDK_ACTION_LINK)) {
- eel_show_warning_dialog (_("Drag and drop is not supported."),
- _("An invalid drag type was used."),
- GET_ANCESTOR (view));
- g_free (container_uri);
- return;
- }
-
- n_uris = 0;
- uri_list = g_uri_list_extract_uris (item_uris);
- for (i = 0; uri_list[i] != NULL; i++) {
- real_uri_list = g_list_append (real_uri_list, uri_list[i]);
- n_uris++;
- }
- g_free (uri_list);
-
- /* do nothing if no real uris are left */
- if (n_uris == 0) {
- g_free (container_uri);
- return;
+ gchar **uri_list;
+ GList *real_uri_list = NULL;
+ char *container_uri;
+ int n_uris, i;
+ GArray *points;
+
+ if (item_uris == NULL)
+ {
+ return;
+ }
+
+ container_uri = NULL;
+ if (target_uri == NULL)
+ {
+ container_uri = nautilus_files_view_get_backing_uri (view);
+ g_assert (container_uri != NULL);
+ }
+
+ if (action == GDK_ACTION_ASK)
+ {
+ action = nautilus_drag_drop_action_ask
+ (GTK_WIDGET (view),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
+ if (action == 0)
+ {
+ g_free (container_uri);
+ return;
}
+ }
+
+ /* We don't support GDK_ACTION_ASK or GDK_ACTION_PRIVATE
+ * and we don't support combinations either. */
+ if ((action != GDK_ACTION_DEFAULT) &&
+ (action != GDK_ACTION_COPY) &&
+ (action != GDK_ACTION_MOVE) &&
+ (action != GDK_ACTION_LINK))
+ {
+ eel_show_warning_dialog (_("Drag and drop is not supported."),
+ _("An invalid drag type was used."),
+ GET_ANCESTOR (view));
+ g_free (container_uri);
+ return;
+ }
+
+ n_uris = 0;
+ uri_list = g_uri_list_extract_uris (item_uris);
+ for (i = 0; uri_list[i] != NULL; i++)
+ {
+ real_uri_list = g_list_append (real_uri_list, uri_list[i]);
+ n_uris++;
+ }
+ g_free (uri_list);
+
+ /* do nothing if no real uris are left */
+ if (n_uris == 0)
+ {
+ g_free (container_uri);
+ return;
+ }
- if (n_uris == 1) {
- GdkPoint tmp_point = { 0, 0 };
+ if (n_uris == 1)
+ {
+ GdkPoint tmp_point = { 0, 0 };
- /* pass in a 1-item array of icon positions, relative to x, y */
- points = g_array_new (FALSE, TRUE, sizeof (GdkPoint));
- g_array_append_val (points, tmp_point);
- } else {
- points = NULL;
- }
+ /* pass in a 1-item array of icon positions, relative to x, y */
+ points = g_array_new (FALSE, TRUE, sizeof (GdkPoint));
+ g_array_append_val (points, tmp_point);
+ }
+ else
+ {
+ points = NULL;
+ }
- view_widget_to_file_operation_position_xy (view, &x, &y);
+ view_widget_to_file_operation_position_xy (view, &x, &y);
- nautilus_files_view_move_copy_items (view, real_uri_list, points,
- target_uri != NULL ? target_uri : container_uri,
- action, x, y);
+ nautilus_files_view_move_copy_items (view, real_uri_list, points,
+ target_uri != NULL ? target_uri : container_uri,
+ action, x, y);
- g_list_free_full (real_uri_list, g_free);
+ g_list_free_full (real_uri_list, g_free);
- if (points != NULL)
- g_array_free (points, TRUE);
+ if (points != NULL)
+ {
+ g_array_free (points, TRUE);
+ }
- g_free (container_uri);
+ g_free (container_uri);
}
#define MAX_LEN_FILENAME 128
@@ -344,56 +378,72 @@ nautilus_files_view_handle_uri_list_drop (NautilusFilesView *view,
static char *
get_drop_filename (const char *text)
{
- char *filename;
- char trimmed[MAX_LEN_FILENAME];
- int i;
- int last_word = -1;
- int last_sentence = -1;
- int last_nonspace = -1;
- int num_attrs;
- PangoLogAttr *attrs;
- gchar *current_char;
-
- num_attrs = MIN (g_utf8_strlen (text, -1), MAX_LEN_FILENAME) + 1;
- attrs = g_new (PangoLogAttr, num_attrs);
- g_utf8_strncpy (trimmed, text, num_attrs - 1);
- pango_get_log_attrs (trimmed, -1, -1, pango_language_get_default (), attrs, num_attrs);
-
- /* since the end of the text will always match a word boundary don't include it */
- for (i = 0; (i < num_attrs - 1); i++) {
- if (!attrs[i].is_white)
- last_nonspace = i;
- if (attrs[i].is_sentence_end)
- last_sentence = last_nonspace;
- if (attrs[i].is_word_boundary)
- last_word = last_nonspace;
+ char *filename;
+ char trimmed[MAX_LEN_FILENAME];
+ int i;
+ int last_word = -1;
+ int last_sentence = -1;
+ int last_nonspace = -1;
+ int num_attrs;
+ PangoLogAttr *attrs;
+ gchar *current_char;
+
+ num_attrs = MIN (g_utf8_strlen (text, -1), MAX_LEN_FILENAME) + 1;
+ attrs = g_new (PangoLogAttr, num_attrs);
+ g_utf8_strncpy (trimmed, text, num_attrs - 1);
+ pango_get_log_attrs (trimmed, -1, -1, pango_language_get_default (), attrs, num_attrs);
+
+ /* since the end of the text will always match a word boundary don't include it */
+ for (i = 0; (i < num_attrs - 1); i++)
+ {
+ if (!attrs[i].is_white)
+ {
+ last_nonspace = i;
}
- g_free (attrs);
-
- if (last_sentence > 0)
- i = last_sentence;
- else
- i = last_word;
-
- if (i > MIN_LEN_FILENAME) {
- char basename[MAX_LEN_FILENAME];
- g_utf8_strncpy (basename, trimmed, i);
- filename = g_strdup_printf ("%s.txt", basename);
- } else {
- /* Translator: This is the filename used for when you dnd text to a directory */
- filename = g_strdup (_("Dropped Text.txt"));
+ if (attrs[i].is_sentence_end)
+ {
+ last_sentence = last_nonspace;
}
-
- /* Remove any invalid characters */
- for (current_char = filename;
- *current_char;
- current_char = g_utf8_next_char (current_char)) {
- if ( G_IS_DIR_SEPARATOR ( g_utf8_get_char (current_char))) {
- *current_char = '-';
- }
+ if (attrs[i].is_word_boundary)
+ {
+ last_word = last_nonspace;
+ }
+ }
+ g_free (attrs);
+
+ if (last_sentence > 0)
+ {
+ i = last_sentence;
+ }
+ else
+ {
+ i = last_word;
+ }
+
+ if (i > MIN_LEN_FILENAME)
+ {
+ char basename[MAX_LEN_FILENAME];
+ g_utf8_strncpy (basename, trimmed, i);
+ filename = g_strdup_printf ("%s.txt", basename);
+ }
+ else
+ {
+ /* Translator: This is the filename used for when you dnd text to a directory */
+ filename = g_strdup (_("Dropped Text.txt"));
+ }
+
+ /* Remove any invalid characters */
+ for (current_char = filename;
+ *current_char;
+ current_char = g_utf8_next_char (current_char))
+ {
+ if (G_IS_DIR_SEPARATOR (g_utf8_get_char (current_char)))
+ {
+ *current_char = '-';
}
+ }
- return filename;
+ return filename;
}
void
@@ -404,40 +454,42 @@ nautilus_files_view_handle_text_drop (NautilusFilesView *view,
int x,
int y)
{
- int length;
- char *container_uri;
- GdkPoint pos;
- char *filename;
-
- if (text == NULL) {
- return;
- }
-
- g_return_if_fail (action == GDK_ACTION_COPY);
-
- container_uri = NULL;
- if (target_uri == NULL) {
- container_uri = nautilus_files_view_get_backing_uri (view);
- g_assert (container_uri != NULL);
- }
-
- length = strlen (text);
-
- pos.x = x;
- pos.y = y;
- view_widget_to_file_operation_position (view, &pos);
-
- /* try to get text to use as a filename */
- filename = get_drop_filename (text);
-
- nautilus_files_view_new_file_with_initial_contents (view,
- target_uri != NULL ? target_uri : container_uri,
- filename,
- text,
- length,
- &pos);
- g_free (filename);
- g_free (container_uri);
+ int length;
+ char *container_uri;
+ GdkPoint pos;
+ char *filename;
+
+ if (text == NULL)
+ {
+ return;
+ }
+
+ g_return_if_fail (action == GDK_ACTION_COPY);
+
+ container_uri = NULL;
+ if (target_uri == NULL)
+ {
+ container_uri = nautilus_files_view_get_backing_uri (view);
+ g_assert (container_uri != NULL);
+ }
+
+ length = strlen (text);
+
+ pos.x = x;
+ pos.y = y;
+ view_widget_to_file_operation_position (view, &pos);
+
+ /* try to get text to use as a filename */
+ filename = get_drop_filename (text);
+
+ nautilus_files_view_new_file_with_initial_contents (view,
+ target_uri != NULL ? target_uri : container_uri,
+ filename,
+ text,
+ length,
+ &pos);
+ g_free (filename);
+ g_free (container_uri);
}
void
@@ -450,44 +502,48 @@ nautilus_files_view_handle_raw_drop (NautilusFilesView *view,
int x,
int y)
{
- char *container_uri, *filename;
- GFile *direct_save_full;
- GdkPoint pos;
-
- if (raw_data == NULL) {
- return;
- }
-
- g_return_if_fail (action == GDK_ACTION_COPY);
-
- container_uri = NULL;
- if (target_uri == NULL) {
- container_uri = nautilus_files_view_get_backing_uri (view);
- g_assert (container_uri != NULL);
- }
-
- pos.x = x;
- pos.y = y;
- view_widget_to_file_operation_position (view, &pos);
-
- filename = NULL;
- if (direct_save_uri != NULL) {
- direct_save_full = g_file_new_for_uri (direct_save_uri);
- filename = g_file_get_basename (direct_save_full);
- }
- if (filename == NULL) {
- /* Translator: This is the filename used for when you dnd raw
- * data to a directory, if the source didn't supply a name.
- */
- filename = g_strdup (_("dropped data"));
- }
-
- nautilus_files_view_new_file_with_initial_contents (
- view, target_uri != NULL ? target_uri : container_uri,
- filename, raw_data, length, &pos);
-
- g_free (container_uri);
- g_free (filename);
+ char *container_uri, *filename;
+ GFile *direct_save_full;
+ GdkPoint pos;
+
+ if (raw_data == NULL)
+ {
+ return;
+ }
+
+ g_return_if_fail (action == GDK_ACTION_COPY);
+
+ container_uri = NULL;
+ if (target_uri == NULL)
+ {
+ container_uri = nautilus_files_view_get_backing_uri (view);
+ g_assert (container_uri != NULL);
+ }
+
+ pos.x = x;
+ pos.y = y;
+ view_widget_to_file_operation_position (view, &pos);
+
+ filename = NULL;
+ if (direct_save_uri != NULL)
+ {
+ direct_save_full = g_file_new_for_uri (direct_save_uri);
+ filename = g_file_get_basename (direct_save_full);
+ }
+ if (filename == NULL)
+ {
+ /* Translator: This is the filename used for when you dnd raw
+ * data to a directory, if the source didn't supply a name.
+ */
+ filename = g_strdup (_("dropped data"));
+ }
+
+ nautilus_files_view_new_file_with_initial_contents (
+ view, target_uri != NULL ? target_uri : container_uri,
+ filename, raw_data, length, &pos);
+
+ g_free (container_uri);
+ g_free (filename);
}
void
@@ -496,60 +552,64 @@ nautilus_files_view_drop_proxy_received_uris (NautilusFilesView *view,
const char *target_uri,
GdkDragAction action)
{
- char *container_uri;
-
- container_uri = NULL;
- if (target_uri == NULL) {
- container_uri = nautilus_files_view_get_backing_uri (view);
- g_assert (container_uri != NULL);
+ char *container_uri;
+
+ container_uri = NULL;
+ if (target_uri == NULL)
+ {
+ container_uri = nautilus_files_view_get_backing_uri (view);
+ g_assert (container_uri != NULL);
+ }
+
+ if (action == GDK_ACTION_ASK)
+ {
+ action = nautilus_drag_drop_action_ask
+ (GTK_WIDGET (view),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
+ if (action == 0)
+ {
+ return;
}
+ }
- if (action == GDK_ACTION_ASK) {
- action = nautilus_drag_drop_action_ask
- (GTK_WIDGET (view),
- GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK);
- if (action == 0) {
- return;
- }
- }
-
- nautilus_clipboard_clear_if_colliding_uris (GTK_WIDGET (view),
- source_uri_list,
- nautilus_files_view_get_copied_files_atom (view));
+ nautilus_clipboard_clear_if_colliding_uris (GTK_WIDGET (view),
+ source_uri_list,
+ nautilus_files_view_get_copied_files_atom (view));
- nautilus_files_view_move_copy_items (view, source_uri_list, NULL,
- target_uri != NULL ? target_uri : container_uri,
- action, 0, 0);
+ nautilus_files_view_move_copy_items (view, source_uri_list, NULL,
+ target_uri != NULL ? target_uri : container_uri,
+ action, 0, 0);
- g_free (container_uri);
+ g_free (container_uri);
}
void
nautilus_files_view_handle_hover (NautilusFilesView *view,
const char *target_uri)
{
- NautilusWindowSlot *slot;
- GFile *location;
- GFile *current_location;
- NautilusFile *target_file;
- gboolean target_is_dir;
- gboolean open_folder_on_hover;
-
- slot = nautilus_files_view_get_nautilus_window_slot (view);
-
- location = g_file_new_for_uri (target_uri);
- target_file = nautilus_file_get_existing (location);
- target_is_dir = nautilus_file_get_file_type (target_file) == G_FILE_TYPE_DIRECTORY;
- current_location = nautilus_window_slot_get_location (slot);
- open_folder_on_hover = g_settings_get_boolean (nautilus_preferences,
- NAUTILUS_PREFERENCES_OPEN_FOLDER_ON_DND_HOVER);
-
- if (target_is_dir && open_folder_on_hover &&
- !(current_location != NULL && g_file_equal(location, current_location))) {
- nautilus_application_open_location_full (NAUTILUS_APPLICATION (g_application_get_default ()),
- location, NAUTILUS_WINDOW_OPEN_FLAG_DONT_MAKE_ACTIVE,
- NULL, NULL, slot);
- }
- g_object_unref (location);
- nautilus_file_unref (target_file);
+ NautilusWindowSlot *slot;
+ GFile *location;
+ GFile *current_location;
+ NautilusFile *target_file;
+ gboolean target_is_dir;
+ gboolean open_folder_on_hover;
+
+ slot = nautilus_files_view_get_nautilus_window_slot (view);
+
+ location = g_file_new_for_uri (target_uri);
+ target_file = nautilus_file_get_existing (location);
+ target_is_dir = nautilus_file_get_file_type (target_file) == G_FILE_TYPE_DIRECTORY;
+ current_location = nautilus_window_slot_get_location (slot);
+ open_folder_on_hover = g_settings_get_boolean (nautilus_preferences,
+ NAUTILUS_PREFERENCES_OPEN_FOLDER_ON_DND_HOVER);
+
+ if (target_is_dir && open_folder_on_hover &&
+ !(current_location != NULL && g_file_equal (location, current_location)))
+ {
+ nautilus_application_open_location_full (NAUTILUS_APPLICATION (g_application_get_default ()),
+ location, NAUTILUS_WINDOW_OPEN_FLAG_DONT_MAKE_ACTIVE,
+ NULL, NULL, slot);
+ }
+ g_object_unref (location);
+ nautilus_file_unref (target_file);
}