summaryrefslogtreecommitdiff
path: root/libnautilus-private/nautilus-icon-dnd.c
diff options
context:
space:
mode:
authorJames Willcox <jwillcox@gnome.org>2002-12-19 19:56:38 +0000
committerJames Willcox <jwillcox@src.gnome.org>2002-12-19 19:56:38 +0000
commitc3639de2cc67bffbacea369250b400dd79753830 (patch)
tree414c01e9a67146ef4a54288607da4842506aa5fd /libnautilus-private/nautilus-icon-dnd.c
parent8a3bf5a38c04dddfd74b6e5c5da356289af3fcd8 (diff)
downloadnautilus-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.c30
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 */