diff options
author | Pavel Cisler <pavel@eazel.com> | 2000-09-12 09:25:48 +0000 |
---|---|---|
committer | Pavel Cisler <pce@src.gnome.org> | 2000-09-12 09:25:48 +0000 |
commit | e8d3b4590332148edfdee58cf9fddba80c4f4e11 (patch) | |
tree | 0739158f06888252a169c3eed040e9170a715758 /libnautilus-private/nautilus-file-changes-queue.c | |
parent | 9b9e79d172ff3f80d854eefff8fec63e78898c61 (diff) | |
download | nautilus-e8d3b4590332148edfdee58cf9fddba80c4f4e11.tar.gz |
Work in progress on saving drop locations during a copy/move operation.
2000-09-11 Pavel Cisler <pavel@eazel.com>
* libnautilus-extensions/nautilus-directory-notify.h:
* libnautilus-extensions/nautilus-directory.c:
* libnautilus-extensions/nautilus-file-changes-queue.c:
* libnautilus-extensions/nautilus-file-changes-queue.h:
* libnautilus-extensions/nautilus-file-operations.c:
(icon_position_iterator_new), (icon_position_iterator_free),
(create_xfer_dialog), (handle_xfer_vfs_error),
(apply_one_position), (sync_xfer_callback),
(nautilus_file_operations_copy_move),
(nautilus_file_changes_queue_schedule_position_setting),
(position_setting_list_free),
(nautilus_directory_set_icon_position),
(nautilus_directory_schedule_metadata_copy),
(nautilus_directory_schedule_metadata_move),
(nautilus_file_changes_consume_changes),
(nautilus_directory_schedule_position_setting):
Work in progress on saving drop locations during a copy/move operation.
Add a new NautilusFileChangesQueue element type to handle scheduling
of the position saving operation. Hook it up to a call that saves the
icon position into the metadata.
Add icon position handling to the synchronous copy engine callback.
* libnautilus-extensions/nautilus-icon-container.h:
* libnautilus-extensions/nautilus-icon-dnd.c:
(handle_nonlocal_move):
Pass relative icon positions (FIXME 626).
* src/file-manager/fm-directory-view.c:
(fm_directory_view_move_copy_items):
* src/file-manager/fm-directory-view.h:
* src/file-manager/fm-icon-view.c: (icon_view_move_copy_items):
Add drop location to relative icon positions to get correct icon drop
placement.
* libnautilus-extensions/nautilus-file-operations.c:
(get_link_name), (get_duplicate_name), (handle_xfer_duplicate):
Rework a bit, fix a leak (FIXME 2556).
* libnautilus-extensions/nautilus-file-operations.c:
(nautilus_file_operations_copy_move),
Fix a leak.
* libnautilus-extensions/nautilus-file-operations.c:
(create_xfer_dialog):
Fix a bug in dialog result handling code.
* libnautilus-extensions/nautilus-drag.h:
Some minor tweaks
Diffstat (limited to 'libnautilus-private/nautilus-file-changes-queue.c')
-rw-r--r-- | libnautilus-private/nautilus-file-changes-queue.c | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/libnautilus-private/nautilus-file-changes-queue.c b/libnautilus-private/nautilus-file-changes-queue.c index 5bc14f284..9d921f28b 100644 --- a/libnautilus-private/nautilus-file-changes-queue.c +++ b/libnautilus-private/nautilus-file-changes-queue.c @@ -23,10 +23,10 @@ */ #include <config.h> -#include "nautilus-file-changes-queue.h" -#include "nautilus-glib-extensions.h" #include "nautilus-directory-notify.h" +#include "nautilus-file-changes-queue.h" +#include "nautilus-glib-extensions.h" #ifdef G_THREADS_ENABLED #define MUTEX_LOCK(a) if ((a) != NULL) g_mutex_lock (a) @@ -43,13 +43,15 @@ typedef enum { CHANGE_FILE_MOVED, CHANGE_METADATA_COPY, CHANGE_METADATA_MOVE, - CHANGE_METADATA_REMOVE + CHANGE_METADATA_REMOVE, + CHANGE_POSITION_SETTING } NautilusFileChangeKind; typedef struct { NautilusFileChangeKind kind; char *from_uri; char *to_uri; + GdkPoint point; } NautilusFileChange; typedef struct { @@ -224,6 +226,22 @@ nautilus_file_changes_queue_schedule_metadata_remove (const char *uri) nautilus_file_changes_queue_add_common (queue, new_item); } +void +nautilus_file_changes_queue_schedule_position_setting (const char *uri, + GdkPoint point) +{ + NautilusFileChange *new_item; + NautilusFileChangesQueue *queue; + + queue = nautilus_file_changes_queue_get (); + + new_item = g_new (NautilusFileChange, 1); + new_item->kind = CHANGE_POSITION_SETTING; + new_item->from_uri = g_strdup (uri); + new_item->point = point; + nautilus_file_changes_queue_add_common (queue, new_item); +} + static NautilusFileChange * nautilus_file_changes_queue_get_change (NautilusFileChangesQueue *queue) { @@ -273,6 +291,20 @@ pairs_list_free (GList *pairs) nautilus_g_list_free_deep (pairs); } +static void +position_setting_list_free (GList *list) +{ + GList *p; + NautilusFileChangesQueuePositionSetting *item; + + for (p = list; p != NULL; p = p->next) { + item = p->data; + g_free (item->uri); + } + /* delete the list and the now empty structs */ + nautilus_g_list_free_deep (list); +} + /* go through changes in the change queue, send ones with the same kind * in a list to the different nautilus_directory_notify calls */ @@ -282,11 +314,13 @@ nautilus_file_changes_consume_changes (gboolean consume_all) NautilusFileChange *change; GList *additions, *deletions, *moves; GList *metadata_copy_requests, *metadata_move_requests, *metadata_remove_requests; + GList *position_setting_requests; URIPair *pair; + NautilusFileChangesQueuePositionSetting *position_setting; int kind; int chunk_count; NautilusFileChangesQueue *queue; - + additions = NULL; deletions = NULL; @@ -294,6 +328,7 @@ nautilus_file_changes_consume_changes (gboolean consume_all) metadata_copy_requests = NULL; metadata_move_requests = NULL; metadata_remove_requests = NULL; + position_setting_requests = NULL; kind = CHANGE_FILE_INITIAL; queue = nautilus_file_changes_queue_get(); @@ -321,7 +356,8 @@ nautilus_file_changes_consume_changes (gboolean consume_all) g_assert ((deletions != NULL) + (moves != NULL) + (additions != NULL) + (metadata_copy_requests != NULL) + (metadata_move_requests != NULL) - + (metadata_remove_requests != NULL) <= 1); + + (metadata_remove_requests != NULL) + + (position_setting_requests != NULL) <= 1); if (deletions != NULL) { nautilus_directory_notify_files_removed (deletions); @@ -350,9 +386,14 @@ nautilus_file_changes_consume_changes (gboolean consume_all) } if (metadata_remove_requests != NULL) { nautilus_directory_schedule_metadata_remove (metadata_remove_requests); - pairs_list_free (metadata_remove_requests); + nautilus_g_list_free_deep (metadata_remove_requests); metadata_remove_requests = NULL; } + if (position_setting_requests != NULL) { + nautilus_directory_schedule_position_setting (position_setting_requests); + position_setting_list_free (position_setting_requests); + position_setting_requests = NULL; + } } if (change == NULL) { @@ -398,6 +439,14 @@ nautilus_file_changes_consume_changes (gboolean consume_all) change->from_uri); break; + case CHANGE_POSITION_SETTING: + position_setting = g_new (NautilusFileChangesQueuePositionSetting, 1); + position_setting->uri = change->from_uri; + position_setting->point = change->point; + position_setting_requests = g_list_append (position_setting_requests, + position_setting); + break; + default: g_assert_not_reached (); break; |