nautilus r14162 - in trunk: . src/file-manager
- From: cneumair svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r14162 - in trunk: . src/file-manager
- Date: Wed, 14 May 2008 21:27:07 +0100 (BST)
Author: cneumair
Date: Wed May 14 20:27:06 2008
New Revision: 14162
URL: http://svn.gnome.org/viewvc/nautilus?rev=14162&view=rev
Log:
2008-05-14 Christian Neumair <cneumair gnome org>
* src/file-manager/fm-actions.h:
* src/file-manager/fm-directory-view.c
(paste_into_clipboard_received_callback), (paste_into),
(action_paste_files_into_callback),
(action_location_paste_files_into_callback),
(clipboard_targets_received), (real_update_location_menu):
* src/file-manager/nautilus-directory-view-ui.xml:
Implement "Paste Into" for location context menu. Always request
clipboard contents in real_update_paste_menu().
Modified:
trunk/ChangeLog
trunk/src/file-manager/fm-actions.h
trunk/src/file-manager/fm-directory-view.c
trunk/src/file-manager/nautilus-directory-view-ui.xml
Modified: trunk/src/file-manager/fm-actions.h
==============================================================================
--- trunk/src/file-manager/fm-actions.h (original)
+++ trunk/src/file-manager/fm-actions.h Wed May 14 20:27:06 2008
@@ -47,6 +47,7 @@
#define FM_ACTION_LOCATION_COPY "LocationCopy"
#define FM_ACTION_PASTE "Paste"
#define FM_ACTION_PASTE_FILES_INTO "Paste Files Into"
+#define FM_ACTION_LOCATION_PASTE_FILES_INTO "LocationPasteFilesInto"
#define FM_ACTION_NEW_LAUNCHER "New Launcher"
#define FM_ACTION_RENAME "Rename"
#define FM_ACTION_DUPLICATE "Duplicate"
Modified: trunk/src/file-manager/fm-directory-view.c
==============================================================================
--- trunk/src/file-manager/fm-directory-view.c (original)
+++ trunk/src/file-manager/fm-directory-view.c Wed May 14 20:27:06 2008
@@ -5766,29 +5766,35 @@
g_object_unref (view);
}
+typedef struct {
+ FMDirectoryView *view;
+ NautilusFile *target;
+} PasteIntoData;
+
static void
paste_into_clipboard_received_callback (GtkClipboard *clipboard,
GtkSelectionData *selection_data,
- gpointer data)
+ gpointer callback_data)
{
- GList *selection;
+ PasteIntoData *data;
FMDirectoryView *view;
char *directory_uri;
- view = FM_DIRECTORY_VIEW (data);
+ data = (PasteIntoData *) callback_data;
- if (view->details->window != NULL) {
- selection = fm_directory_view_get_selection (view);
+ view = FM_DIRECTORY_VIEW (data->view);
- directory_uri = nautilus_file_get_activation_uri (NAUTILUS_FILE (selection->data));
+ if (view->details->window != NULL) {
+ directory_uri = nautilus_file_get_activation_uri (data->target);
paste_clipboard_data (view, selection_data, directory_uri);
g_free (directory_uri);
- nautilus_file_list_free (selection);
}
g_object_unref (view);
+ nautilus_file_unref (data->target);
+ g_free (data);
}
static void
@@ -5807,18 +5813,39 @@
}
static void
+paste_into (FMDirectoryView *view,
+ NautilusFile *target)
+{
+ PasteIntoData *data;
+
+ g_assert (FM_IS_DIRECTORY_VIEW (view));
+ g_assert (NAUTILUS_IS_FILE (target));
+
+ data = g_new (PasteIntoData, 1);
+
+ data->view = g_object_ref (view);
+ data->target = nautilus_file_ref (target);
+
+ gtk_clipboard_request_contents (get_clipboard (view),
+ copied_files_atom,
+ paste_into_clipboard_received_callback,
+ data);
+}
+
+static void
action_paste_files_into_callback (GtkAction *action,
gpointer callback_data)
{
FMDirectoryView *view;
+ GList *selection;
view = FM_DIRECTORY_VIEW (callback_data);
-
- g_object_ref (view);
- gtk_clipboard_request_contents (get_clipboard (view),
- copied_files_atom,
- paste_into_clipboard_received_callback,
- callback_data);
+ selection = fm_directory_view_get_selection (view);
+ if (selection != NULL) {
+ paste_into (view, NAUTILUS_FILE (selection->data));
+ nautilus_file_list_free (selection);
+ }
+
}
static void
@@ -6299,6 +6326,21 @@
}
static void
+action_location_paste_files_into_callback (GtkAction *action,
+ gpointer callback_data)
+{
+ FMDirectoryView *view;
+ NautilusFile *file;
+
+ view = FM_DIRECTORY_VIEW (callback_data);
+
+ file = view->details->location_popup_directory_as_file;
+ g_return_if_fail (file != NULL);
+
+ paste_into (view, file);
+}
+
+static void
action_location_trash_callback (GtkAction *action,
gpointer callback_data)
{
@@ -6574,6 +6616,10 @@
/* label, accelerator */ NULL, "",
/* tooltip */ N_("Prepare this folder to be copied with a Paste command"),
G_CALLBACK (action_location_copy_callback) },
+ /* name, stock id */ { FM_ACTION_LOCATION_PASTE_FILES_INTO, GTK_STOCK_PASTE,
+ /* label, accelerator */ N_("_Paste Into Folder"), "",
+ /* tooltip */ N_("Move or copy files previously selected by a Cut or Copy command into this folder"),
+ G_CALLBACK (action_location_paste_files_into_callback) },
/* name, stock id */ { FM_ACTION_LOCATION_TRASH, NAUTILUS_ICON_TRASH,
/* label, accelerator */ N_("Mo_ve to Trash"), "",
@@ -6804,7 +6850,18 @@
gtk_action_set_sensitive (action,
can_paste && count == 1 &&
can_paste_into_file (NAUTILUS_FILE (selection->data)));
-
+
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_LOCATION_PASTE_FILES_INTO);
+ g_object_set_data (G_OBJECT (action),
+ "can-paste-according-to-clipboard",
+ GINT_TO_POINTER (can_paste));
+ gtk_action_set_sensitive (action,
+ GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action),
+ "can-paste-according-to-clipboard")) &&
+ GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action),
+ "can-paste-according-to-destination")));
+
nautilus_file_list_free (selection);
g_object_unref (view);
@@ -7100,6 +7157,10 @@
gtk_action_set_visible (action, show_format);
}
+/* TODO: we should split out this routine into two functions:
+ * Update on clipboard changes
+ * Update on selection changes
+ */
static void
real_update_paste_menu (FMDirectoryView *view,
GList *selection,
@@ -7127,14 +7188,13 @@
FM_ACTION_PASTE_FILES_INTO);
gtk_action_set_visible (action, can_paste_files_into);
gtk_action_set_sensitive (action, !selection_is_read_only);
- if (!selection_is_read_only || !is_read_only) {
- /* Ask the clipboard */
- g_object_ref (view); /* Need to keep the object alive until we get the reply */
- gtk_clipboard_request_contents (get_clipboard (view),
- gdk_atom_intern ("TARGETS", FALSE),
- clipboard_targets_received,
- view);
- }
+
+ /* Ask the clipboard */
+ g_object_ref (view); /* Need to keep the object alive until we get the reply */
+ gtk_clipboard_request_contents (get_clipboard (view),
+ gdk_atom_intern ("TARGETS", FALSE),
+ clipboard_targets_received,
+ view);
}
static void
@@ -7191,6 +7251,17 @@
FM_ACTION_LOCATION_CUT);
gtk_action_set_sensitive (action, can_delete_file);
+ action = gtk_action_group_get_action (view->details->dir_action_group,
+ FM_ACTION_LOCATION_PASTE_FILES_INTO);
+ g_object_set_data (G_OBJECT (action),
+ "can-paste-according-to-destination",
+ GINT_TO_POINTER (can_paste_into_file (file)));
+ gtk_action_set_sensitive (action,
+ GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action),
+ "can-paste-according-to-clipboard")) &&
+ GPOINTER_TO_INT (g_object_get_data (G_OBJECT (action),
+ "can-paste-according-to-destination")));
+
if (file != NULL &&
nautilus_file_is_in_trash (file)) {
label = _("_Delete from Trash");
Modified: trunk/src/file-manager/nautilus-directory-view-ui.xml
==============================================================================
--- trunk/src/file-manager/nautilus-directory-view-ui.xml (original)
+++ trunk/src/file-manager/nautilus-directory-view-ui.xml Wed May 14 20:27:06 2008
@@ -175,6 +175,7 @@
<placeholder name="Clipboard Actions">
<menuitem name="Cut" action="LocationCut"/>
<menuitem name="Copy" action="LocationCopy"/>
+ <menuitem name="LocationPasteFilesInto" action="LocationPasteFilesInto"/>
</placeholder>
<separator name="Location After Clipboard Separator"/>
<placeholder name="Dangerous File Actions">
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]