diff options
author | Christian Neumair <cneumair@gnome.org> | 2009-09-24 12:19:18 +0200 |
---|---|---|
committer | Christian Neumair <cneumair@gnome.org> | 2009-09-24 12:19:18 +0200 |
commit | e15707648d6d92abe455107718a1e0a440c7fe1f (patch) | |
tree | a8d8cdd86763c79a5dfe6c89041e047ed62a253c | |
parent | 069494e971bba9bfad5cd6997ecf9138677a9bc0 (diff) | |
download | nautilus-e15707648d6d92abe455107718a1e0a440c7fe1f.tar.gz |
Correctly position icons for text, netscape URI and URI list drops
When dropping text, a netscape URI or a URI list to the desktop, remember
the position where the drop happened and position the created icon accordingly.
Fixes #350022.
-rw-r--r-- | src/file-manager/fm-directory-view.c | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c index 0c72ef2c2..55003cbf7 100644 --- a/src/file-manager/fm-directory-view.c +++ b/src/file-manager/fm-directory-view.c @@ -382,6 +382,11 @@ static void action_location_properties_callback (GtkAction *action, static void unschedule_pop_up_location_context_menu (FMDirectoryView *view); +static inline void fm_directory_view_widget_to_file_operation_position (FMDirectoryView *view, + GdkPoint *position); +static void fm_directory_view_widget_to_file_operation_position_xy (FMDirectoryView *view, + int *x, int *y); + EEL_CLASS_BOILERPLATE (FMDirectoryView, fm_directory_view, GTK_TYPE_SCROLLED_WINDOW) EEL_IMPLEMENT_MUST_OVERRIDE_SIGNAL (fm_directory_view, add_file) @@ -4030,16 +4035,18 @@ static void fm_directory_view_new_file_with_initial_contents (FMDirectoryView *directory_view, const char *parent_uri, const char *filename, - const char *initial_contents) + const char *initial_contents, + GdkPoint *pos) { - GdkPoint *pos; NewFolderData *data; g_assert (parent_uri != NULL); data = setup_new_folder_data (directory_view); - pos = context_menu_to_file_operation_position (directory_view); + if (pos == NULL) { + pos = context_menu_to_file_operation_position (directory_view); + } nautilus_file_operations_new_file (GTK_WIDGET (directory_view), pos, parent_uri, filename, @@ -4067,6 +4074,7 @@ fm_directory_view_new_file (FMDirectoryView *directory_view, fm_directory_view_new_file_with_initial_contents (directory_view, parent_uri != NULL ? parent_uri : container_uri, NULL, + NULL, NULL); g_free (container_uri); return; @@ -10001,6 +10009,28 @@ handle_netscape_url_drop_timeout (gpointer user_data) return FALSE; } +static inline void +fm_directory_view_widget_to_file_operation_position (FMDirectoryView *view, + GdkPoint *position) +{ + EEL_CALL_METHOD (FM_DIRECTORY_VIEW_CLASS, view, + widget_to_file_operation_position, + (view, position)); +} + +static void +fm_directory_view_widget_to_file_operation_position_xy (FMDirectoryView *view, + int *x, int *y) +{ + GdkPoint position; + + position.x = *x; + position.y = *y; + fm_directory_view_widget_to_file_operation_position (view, &position); + *x = position.x; + *y = position.y; +} + void fm_directory_view_handle_netscape_url_drop (FMDirectoryView *view, const char *encoded_url, @@ -10082,6 +10112,8 @@ fm_directory_view_handle_netscape_url_drop (FMDirectoryView *view, return; } + fm_directory_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) && @@ -10224,6 +10256,8 @@ fm_directory_view_handle_uri_list_drop (FMDirectoryView *view, points = NULL; } + fm_directory_view_widget_to_file_operation_position_xy (view, &x, &y); + fm_directory_view_move_copy_items (real_uri_list, points, target_uri != NULL ? target_uri : container_uri, action, x, y, view); @@ -10245,6 +10279,7 @@ fm_directory_view_handle_text_drop (FMDirectoryView *view, int y) { char *container_uri; + GdkPoint pos; if (text == NULL) { return; @@ -10258,11 +10293,15 @@ fm_directory_view_handle_text_drop (FMDirectoryView *view, g_assert (container_uri != NULL); } + pos.x = x; + pos.y = y; + fm_directory_view_widget_to_file_operation_position (view, &pos); + fm_directory_view_new_file_with_initial_contents ( view, target_uri != NULL ? target_uri : container_uri, /* Translator: This is the filename used for when you dnd text to a directory */ _("dropped text.txt"), - text); + text, &pos); g_free (container_uri); } |