[nautilus/wip/csoriano/destktop-split2: 27/54] files-view: use inheritance for scripts vars
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/csoriano/destktop-split2: 27/54] files-view: use inheritance for scripts vars
- Date: Wed, 30 Mar 2016 14:05:04 +0000 (UTC)
commit af042fb83dd87c8137ab3beb7cea38b239ca0e27
Author: Carlos Soriano <csoriano gnome org>
Date: Fri Mar 18 16:58:31 2016 +0100
files-view: use inheritance for scripts vars
When a script is present we set some environment variables to allow
the scripts to work with them.
For example, we set a environment variable for selected items.
However, some views have special links, like the desktop. Therefore we
need special treatment for those.
Use inheritance instead of doing special casing in the parent class
for this case.
src/nautilus-desktop-canvas-view.c | 56 ++++++++++++++++++++++++++++++++++++
src/nautilus-files-view.c | 43 +++++++++++++--------------
src/nautilus-files-view.h | 6 ++++
3 files changed, 83 insertions(+), 22 deletions(-)
---
diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c
index 3fabf20..4e3e3fd 100644
--- a/src/nautilus-desktop-canvas-view.c
+++ b/src/nautilus-desktop-canvas-view.c
@@ -71,6 +71,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);
@@ -297,6 +300,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));
@@ -623,6 +628,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 2a964bd..8a22489 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 5ac6583..18abac3 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -269,6 +269,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 */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]