diff options
author | James Willcox <jwillcox@gnome.org> | 2002-12-19 19:56:38 +0000 |
---|---|---|
committer | James Willcox <jwillcox@src.gnome.org> | 2002-12-19 19:56:38 +0000 |
commit | c3639de2cc67bffbacea369250b400dd79753830 (patch) | |
tree | 414c01e9a67146ef4a54288607da4842506aa5fd /libnautilus-private/nautilus-icon-dnd.c | |
parent | 8a3bf5a38c04dddfd74b6e5c5da356289af3fcd8 (diff) | |
download | nautilus-c3639de2cc67bffbacea369250b400dd79753830.tar.gz |
Make the desktop icon view store the screen number with the icon
2002-12-19 James Willcox <jwillcox@gnome.org>
* libnautilus-private/nautilus-directory-notify.h:
* libnautilus-private/nautilus-directory.c:
(nautilus_directory_schedule_position_set):
* libnautilus-private/nautilus-file-changes-queue.c:
(nautilus_file_changes_queue_schedule_position_set),
(nautilus_file_changes_consume_changes):
* libnautilus-private/nautilus-file-changes-queue.h:
* libnautilus-private/nautilus-file-operations.c:
(icon_position_iterator_new), (apply_one_position),
(nautilus_file_operations_copy_move):
* libnautilus-private/nautilus-icon-dnd.c: (handle_local_move),
(handle_nonlocal_move):
* libnautilus-private/nautilus-metadata.h:
* src/file-manager/fm-desktop-icon-view.c:
(fm_desktop_icon_view_init):
* src/file-manager/fm-directory-view.c: (new_folder_done),
(file_changed_callback):
* src/file-manager/fm-icon-view.c: (should_show_file_on_screen),
(fm_icon_view_remove_file), (fm_icon_view_add_file),
(fm_icon_view_file_changed), (fm_icon_view_filter_by_screen),
(fm_icon_view_instance_init):
* src/file-manager/fm-icon-view.h:
Make the desktop icon view store the screen number with the icon
positions. Now, a given icon appears on one screen only, and you
can drag them between screens, etc.
Diffstat (limited to 'libnautilus-private/nautilus-icon-dnd.c')
-rw-r--r-- | libnautilus-private/nautilus-icon-dnd.c | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/libnautilus-private/nautilus-icon-dnd.c b/libnautilus-private/nautilus-icon-dnd.c index dbcef85dd..f91ca8706 100644 --- a/libnautilus-private/nautilus-icon-dnd.c +++ b/libnautilus-private/nautilus-icon-dnd.c @@ -33,6 +33,7 @@ #include "nautilus-file-dnd.h" #include "nautilus-icon-private.h" #include "nautilus-link.h" +#include "nautilus-metadata.h" #include <eel/eel-background.h> #include <eel/eel-gdk-pixbuf-extensions.h> #include <eel/eel-glib-extensions.h> @@ -758,6 +759,9 @@ handle_local_move (NautilusIconContainer *container, GList *moved_icons, *p; NautilusDragSelectionItem *item; NautilusIcon *icon; + NautilusFile *file; + char *screen_string; + GdkScreen *screen; if (container->details->auto_layout) { if (!confirm_switch_to_manual_layout (container)) { @@ -766,6 +770,7 @@ handle_local_move (NautilusIconContainer *container, nautilus_icon_container_freeze_icon_positions (container); } + /* Move and select the icons. */ moved_icons = NULL; for (p = container->details->dnd_info->drag_info.selection_list; p != NULL; p = p->next) { @@ -774,6 +779,29 @@ handle_local_move (NautilusIconContainer *container, icon = nautilus_icon_container_get_icon_by_uri (container, item->uri); + if (icon == NULL) { + /* probably dragged from another screen. Add it to + * this screen + */ + + file = nautilus_file_get (item->uri); + + screen = gtk_widget_get_screen (GTK_WIDGET (container)); + screen_string = g_strdup_printf ("%d", + gdk_screen_get_number (screen)); + nautilus_file_set_metadata (file, + NAUTILUS_METADATA_KEY_SCREEN, + NULL, screen_string); + + g_free (screen_string); + + nautilus_icon_container_add (container, + NAUTILUS_ICON_CONTAINER_ICON_DATA (file)); + + icon = nautilus_icon_container_get_icon_by_uri + (container, item->uri); + } + if (item->got_icon_position) { nautilus_icon_container_move_icon (container, icon, @@ -804,7 +832,7 @@ handle_nonlocal_move (NautilusIconContainer *container, if (container->details->dnd_info->drag_info.selection_list == NULL) { return; } - + source_uris = NULL; for (p = container->details->dnd_info->drag_info.selection_list; p != NULL; p = p->next) { /* do a shallow copy of all the uri strings of the copied files */ |