summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nautilus-desktop-canvas-view.c56
-rw-r--r--src/nautilus-files-view.c43
-rw-r--r--src/nautilus-files-view.h6
3 files changed, 83 insertions, 22 deletions
diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c
index 1d2e90329..aaf96945b 100644
--- a/src/nautilus-desktop-canvas-view.c
+++ b/src/nautilus-desktop-canvas-view.c
@@ -70,6 +70,9 @@ static char* real_get_backing_uri (NautilusFiles
static void real_check_empty_states (NautilusFilesView *view);
static gboolean real_special_link_in_selection (NautilusFilesView *view,
GList *selection);
+static char * real_get_file_paths_or_uris_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection,
+ gboolean get_paths);
static void nautilus_desktop_canvas_view_update_canvas_container_fonts (NautilusDesktopCanvasView *view);
static void font_changed_callback (gpointer callback_data);
@@ -296,6 +299,8 @@ nautilus_desktop_canvas_view_class_init (NautilusDesktopCanvasViewClass *class)
vclass->end_loading = nautilus_desktop_canvas_view_end_loading;
vclass->get_backing_uri = real_get_backing_uri;
vclass->check_empty_states = real_check_empty_states;
+ vclass->get_file_paths_or_uris_as_newline_delimited_string = real_get_file_paths_or_uris_as_newline_delimited_string;
+
vclass->special_link_in_selection = real_special_link_in_selection;
g_type_class_add_private (class, sizeof (NautilusDesktopCanvasViewDetails));
@@ -622,6 +627,57 @@ real_get_backing_uri (NautilusFilesView *view)
return uri;
}
+static char *
+real_get_file_paths_or_uris_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection,
+ gboolean get_paths)
+{
+ char *path;
+ char *uri;
+ char *result;
+ NautilusDesktopLink *link;
+ GString *expanding_string;
+ GList *node;
+ GFile *location;
+
+ expanding_string = g_string_new ("");
+ for (node = selection; node != NULL; node = node->next) {
+ uri = NULL;
+ if (NAUTILUS_IS_DESKTOP_ICON_FILE (node->data)) {
+ link = nautilus_desktop_icon_file_get_link (NAUTILUS_DESKTOP_ICON_FILE (node->data));
+ if (link != NULL) {
+ location = nautilus_desktop_link_get_activation_location (link);
+ uri = g_file_get_uri (location);
+ g_object_unref (location);
+ g_object_unref (G_OBJECT (link));
+ }
+ } else {
+ uri = nautilus_file_get_uri (NAUTILUS_FILE (node->data));
+ }
+ if (uri == NULL) {
+ continue;
+ }
+
+ if (get_paths) {
+ path = g_filename_from_uri (uri, NULL, NULL);
+ if (path != NULL) {
+ g_string_append (expanding_string, path);
+ g_free (path);
+ g_string_append (expanding_string, "\n");
+ }
+ } else {
+ g_string_append (expanding_string, uri);
+ g_string_append (expanding_string, "\n");
+ }
+ g_free (uri);
+ }
+
+ result = expanding_string->str;
+ g_string_free (expanding_string, FALSE);
+
+ return result;
+}
+
static void
real_update_context_menus (NautilusFilesView *view)
{
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index 2a964bdc0..8a224891b 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -4441,32 +4441,28 @@ get_file_names_as_parameter_array (GList *selection,
return parameters;
}
+static char*
+nautilus_files_view_get_file_paths_or_uris_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection,
+ gboolean get_paths)
+{
+ return NAUTILUS_FILES_VIEW_CLASS (G_OBJECT_GET_CLASS (view))->get_file_paths_or_uris_as_newline_delimited_string (view, selection, get_paths);
+}
+
static char *
-get_file_paths_or_uris_as_newline_delimited_string (GList *selection,
- gboolean get_paths)
+real_get_file_paths_or_uris_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection,
+ gboolean get_paths)
{
char *path;
char *uri;
char *result;
- NautilusDesktopLink *link;
GString *expanding_string;
GList *node;
- GFile *location;
expanding_string = g_string_new ("");
for (node = selection; node != NULL; node = node->next) {
- uri = NULL;
- if (NAUTILUS_IS_DESKTOP_ICON_FILE (node->data)) {
- link = nautilus_desktop_icon_file_get_link (NAUTILUS_DESKTOP_ICON_FILE (node->data));
- if (link != NULL) {
- location = nautilus_desktop_link_get_activation_location (link);
- uri = g_file_get_uri (location);
- g_object_unref (location);
- g_object_unref (G_OBJECT (link));
- }
- } else {
- uri = nautilus_file_get_uri (NAUTILUS_FILE (node->data));
- }
+ uri = nautilus_file_get_uri (NAUTILUS_FILE (node->data));
if (uri == NULL) {
continue;
}
@@ -4492,15 +4488,17 @@ get_file_paths_or_uris_as_newline_delimited_string (GList *selection,
}
static char *
-get_file_paths_as_newline_delimited_string (GList *selection)
+get_file_paths_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection)
{
- return get_file_paths_or_uris_as_newline_delimited_string (selection, TRUE);
+ return nautilus_files_view_get_file_paths_or_uris_as_newline_delimited_string (view, selection, TRUE);
}
static char *
-get_file_uris_as_newline_delimited_string (GList *selection)
+get_file_uris_as_newline_delimited_string (NautilusFilesView *view,
+ GList *selection)
{
- return get_file_paths_or_uris_as_newline_delimited_string (selection, FALSE);
+ return nautilus_files_view_get_file_paths_or_uris_as_newline_delimited_string (view, selection, FALSE);
}
/* returns newly allocated strings for setting the environment variables */
@@ -4520,13 +4518,13 @@ get_strings_for_environment_variables (NautilusFilesView *view,
if (g_str_has_prefix (directory_uri, "file:") ||
eel_uri_is_desktop (directory_uri) ||
eel_uri_is_trash (directory_uri)) {
- *file_paths = get_file_paths_as_newline_delimited_string (selected_files);
+ *file_paths = get_file_paths_as_newline_delimited_string (view, selected_files);
} else {
*file_paths = g_strdup ("");
}
g_free (directory_uri);
- *uris = get_file_uris_as_newline_delimited_string (selected_files);
+ *uris = get_file_uris_as_newline_delimited_string (view, selected_files);
*uri = nautilus_directory_get_uri (view->details->model);
if (eel_uri_is_desktop (*uri)) {
@@ -7979,6 +7977,7 @@ nautilus_files_view_class_init (NautilusFilesViewClass *klass)
klass->update_actions_state = real_update_actions_state;
klass->check_empty_states = real_check_empty_states;
klass->special_link_in_selection = real_special_link_in_selection;
+ klass->get_file_paths_or_uris_as_newline_delimited_string = real_get_file_paths_or_uris_as_newline_delimited_string;
copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index ccd05830f..b979f6126 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -268,6 +268,12 @@ struct NautilusFilesViewClass {
* home and other special links. */
gboolean (* special_link_in_selection) (NautilusFilesView *view,
GList *selection);
+ /* Use this when the scripts environment vars are being set, for selected files, etc.,
+ * if the subclassed view has some special links that need conversion to
+ * normal uris */
+ char * (* get_file_paths_or_uris_as_newline_delimited_string) (NautilusFilesView *view,
+ GList *selection,
+ gboolean get_paths);
};
/* GObject support */