diff options
author | Dave Camp <dave@ximian.com> | 2002-07-25 20:59:17 +0000 |
---|---|---|
committer | Dave Camp <campd@src.gnome.org> | 2002-07-25 20:59:17 +0000 |
commit | 8fed4ca3ef5611d56720fecaec5fdd7d3bf47174 (patch) | |
tree | 356a6a849934e3c0b5250f552e702082cdc67eda /src | |
parent | c53f887dd2c5530c2b25d8e40dd1ff9d7fc7f419 (diff) | |
download | nautilus-8fed4ca3ef5611d56720fecaec5fdd7d3bf47174.tar.gz |
New functions. (create_tree): Create a NautilusTreeViewDragDest.
2002-07-25 Dave Camp <dave@ximian.com>
* components/tree/nautilus-tree-view.c: (get_root_uri_callback),
(get_file_for_path_callback), (move_copy_items_callback): New
functions.
(create_tree): Create a NautilusTreeViewDragDest.
(nautilus_tree_view_dispose): Unref the DragDest object.
(nautilus_tree_view_class_init): initialize dispose.
* libnautilus-private/Makefile.am: Build
nautilus-tree-view-drag-dest.[ch].
* libnautilus-tree-view-drag-dest.c:
* libnautilus-tree-view-drag-dest.h: New files.
* libnautilus-private/nautilus-dnd.c:
(nautilus_drag_selection_includes_special_link): Moved here
from nautilus-icon-dnd.c.
* libnautilus-private/nautilus-dnd.h: Prototype for
nautilus_drag_selection_includes_special_link.
* libnautilus-private/nautilus-file.c:
(nautilus_file_get_drop_target_uri): Moved here from
fm-directory-view.
* libnautilus-private/nautilus-file.h:
* libnautilus-private/nautilus-icon-dnd.c:
(nautilus_icon_container_receive_dropped_icons): Call
nautilus_drag_selection_includes_special_link().
* libnautilus-private/nautilus-marshal.list: New marshallers.
* src/file-manager/fm-icon-view.c:
(get_icon_drop_target_uri_callback): Use
nautilus_file_get_drop_target_uri().
* src/file-manager/fm-list-view.c: (get_root_uri_callback),
(get_file_for_path_callback), (move_copy_items_callback): New
functions.
(create_and_set_up_tree_view): Create a NautilusViewDragDest
object.
(fm_list_view_dispose): Unref the DragDest object.
Diffstat (limited to 'src')
-rw-r--r-- | src/file-manager/fm-icon-view.c | 24 | ||||
-rw-r--r-- | src/file-manager/fm-list-view.c | 88 |
2 files changed, 83 insertions, 29 deletions
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c index a00761c30..2c1ec0c66 100644 --- a/src/file-manager/fm-icon-view.c +++ b/src/file-manager/fm-icon-view.c @@ -1933,27 +1933,11 @@ get_icon_drop_target_uri_callback (NautilusIconContainer *container, NautilusFile *file, FMIconView *icon_view) { - char *uri, *target_uri; - - g_assert (NAUTILUS_IS_ICON_CONTAINER (container)); - g_assert (NAUTILUS_IS_FILE (file)); - g_assert (FM_IS_ICON_VIEW (icon_view)); - - uri = nautilus_file_get_uri (file); - - /* Check for Nautilus link */ - if (nautilus_file_is_nautilus_link (file)) { - /* FIXME bugzilla.gnome.org 43020: This does sync. I/O and works only locally. */ - if (!eel_vfs_has_capability (uri, EEL_VFS_CAPABILITY_IS_REMOTE_AND_SLOW)) { - target_uri = nautilus_link_local_get_link_uri (uri); - if (target_uri != NULL) { - g_free (uri); - uri = target_uri; - } - } - } + g_return_val_if_fail (NAUTILUS_IS_ICON_CONTAINER (container), NULL); + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + g_return_val_if_fail (FM_IS_ICON_VIEW (icon_view), NULL); - return uri; + return nautilus_file_get_drop_target_uri (file); } /* Preferences changed callbacks */ diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c index 26aa4f37a..cd257e155 100644 --- a/src/file-manager/fm-list-view.c +++ b/src/file-manager/fm-list-view.c @@ -38,10 +38,14 @@ #include <gtk/gtktreeview.h> #include <libgnome/gnome-i18n.h> #include <libgnome/gnome-macros.h> +#include <libgnomevfs/gnome-vfs-utils.h> #include <libnautilus-private/nautilus-directory-background.h> #include <libnautilus-private/nautilus-dnd.h> +#include <libnautilus-private/nautilus-file-dnd.h> #include <libnautilus-private/nautilus-global-preferences.h> +#include <libnautilus-private/nautilus-icon-dnd.h> #include <libnautilus-private/nautilus-metadata.h> +#include <libnautilus-private/nautilus-tree-view-drag-dest.h> struct FMListViewDetails { GtkTreeView *tree_view; @@ -56,12 +60,8 @@ struct FMListViewDetails { GtkCellRendererText *date_modified_cell; NautilusZoomLevel zoom_level; -}; -static GtkTargetEntry drag_types [] = { - { NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE, 0, NAUTILUS_ICON_DND_GNOME_ICON_LIST }, - { NAUTILUS_ICON_DND_URI_LIST_TYPE, 0, NAUTILUS_ICON_DND_URI_LIST }, - { NAUTILUS_ICON_DND_URL_TYPE, 0, NAUTILUS_ICON_DND_URL } + NautilusTreeViewDragDest *drag_dest; }; /* @@ -287,6 +287,60 @@ cell_renderer_edited (GtkCellRendererText *cell, nautilus_file_unref (file); } +static char * +get_root_uri_callback (NautilusTreeViewDragDest *dest, + gpointer user_data) +{ + FMListView *view; + + view = FM_LIST_VIEW (user_data); + + return fm_directory_view_get_uri (FM_DIRECTORY_VIEW (view)); +} + +static NautilusFile * +get_file_for_path_callback (NautilusTreeViewDragDest *dest, + GtkTreePath *path, + gpointer user_data) +{ + FMListView *view; + GtkTreeIter iter; + NautilusFile *file; + + view = FM_LIST_VIEW (user_data); + + file = NULL; + + if (gtk_tree_model_get_iter (GTK_TREE_MODEL (view->details->model), + &iter, path)) { + gtk_tree_model_get (GTK_TREE_MODEL (view->details->model), + &iter, + FM_LIST_MODEL_FILE_COLUMN, + &file, + -1); + } + + return file; +} + +static void +move_copy_items_callback (NautilusTreeViewDragDest *dest, + const GList *item_uris, + const char *target_uri, + guint action, + int x, + int y, + gpointer user_data) + +{ + fm_directory_view_move_copy_items (item_uris, + NULL, + target_uri, + action, + x, y, + FM_DIRECTORY_VIEW (user_data)); +} + static void create_and_set_up_tree_view (FMListView *view) { @@ -294,6 +348,21 @@ create_and_set_up_tree_view (FMListView *view) GtkTreeViewColumn *column; view->details->tree_view = GTK_TREE_VIEW (gtk_tree_view_new ()); + view->details->drag_dest = + nautilus_tree_view_drag_dest_new (view->details->tree_view); + + g_signal_connect_object (view->details->drag_dest, + "get_root_uri", + G_CALLBACK (get_root_uri_callback), + view, 0); + g_signal_connect_object (view->details->drag_dest, + "get_file_for_path", + G_CALLBACK (get_file_for_path_callback), + view, 0); + g_signal_connect_object (view->details->drag_dest, + "move_copy_items", + G_CALLBACK (move_copy_items_callback), + view, 0); g_signal_connect_object (gtk_tree_view_get_selection (view->details->tree_view), "changed", @@ -317,10 +386,6 @@ create_and_set_up_tree_view (FMListView *view) gtk_tree_selection_set_mode (gtk_tree_view_get_selection (view->details->tree_view), GTK_SELECTION_MULTIPLE); gtk_tree_view_set_rules_hint (view->details->tree_view, TRUE); - gtk_tree_view_enable_model_drag_source (view->details->tree_view, 0, - drag_types, G_N_ELEMENTS (drag_types), - GDK_ACTION_MOVE | GDK_ACTION_COPY | GDK_ACTION_LINK); - /* Create the file name column */ cell = gtk_cell_renderer_pixbuf_new (); view->details->pixbuf_cell = (GtkCellRendererPixbuf *)cell; @@ -821,6 +886,11 @@ fm_list_view_dispose (GObject *object) list_view->details->model = NULL; } + if (list_view->details->drag_dest) { + g_object_unref (list_view->details->drag_dest); + list_view->details->drag_dest = NULL; + } + G_OBJECT_CLASS (parent_class)->dispose (object); } |