[nautilus] Make it possible for Nautilus Scripts to access the other pane.
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus] Make it possible for Nautilus Scripts to access the other pane.
- Date: Thu, 10 Dec 2009 17:16:18 +0000 (UTC)
commit 5d236a20aadd291196e6ead3a2220e9c0258b126
Author: Holger Berndt <berndth gmx de>
Date: Sat Jun 13 16:27:12 2009 +0200
Make it possible for Nautilus Scripts to access the other pane.
This is accomplished by placing additional variables into the
environment of the script, analoguous to the single-pane ones:
- NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS
- NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_URIS
- NAUTILUS_SCRIPT_NEXT_PANE_CURRENT_URI
If there is no second pane in the window, these are set to empty
strings.
libnautilus-private/nautilus-window-info.c | 7 +++
libnautilus-private/nautilus-window-info.h | 2 +
src/file-manager/fm-directory-view.c | 80 +++++++++++++++++++++------
src/nautilus-window.c | 17 ++++++
4 files changed, 88 insertions(+), 18 deletions(-)
---
diff --git a/libnautilus-private/nautilus-window-info.c b/libnautilus-private/nautilus-window-info.c
index 224033b..787e398 100644
--- a/libnautilus-private/nautilus-window-info.c
+++ b/libnautilus-private/nautilus-window-info.c
@@ -285,3 +285,10 @@ nautilus_window_info_get_active_slot (NautilusWindowInfo *window)
return (* NAUTILUS_WINDOW_INFO_GET_IFACE (window)->get_active_slot) (window);
}
+struct FMDirectoryView *
+nautilus_window_info_get_directory_view_of_next_pane (NautilusWindowInfo *window)
+{
+ g_return_val_if_fail (NAUTILUS_IS_WINDOW_INFO (window), NULL);
+
+ return (* NAUTILUS_WINDOW_INFO_GET_IFACE (window)->get_directory_view_of_next_pane) (window);
+}
diff --git a/libnautilus-private/nautilus-window-info.h b/libnautilus-private/nautilus-window-info.h
index cb61673..63a7325 100644
--- a/libnautilus-private/nautilus-window-info.h
+++ b/libnautilus-private/nautilus-window-info.h
@@ -146,6 +146,7 @@ struct _NautilusWindowInfoIface
gboolean (* next_pane_is_writable) (NautilusWindowInfo *window);
void (* copy_move_selection_to_next_pane) (NautilusWindowInfo *window,
gboolean want_copy);
+ struct FMDirectoryView * (* get_directory_view_of_next_pane) (NautilusWindowInfo *window);
};
GType nautilus_window_info_get_type (void);
@@ -175,6 +176,7 @@ GtkUIManager * nautilus_window_info_get_ui_manager
gboolean nautilus_window_info_next_pane_is_writable (NautilusWindowInfo *window);
void nautilus_window_info_copy_move_selection_to_next_pane (NautilusWindowInfo *window,
gboolean want_copy);
+struct FMDirectoryView * nautilus_window_info_get_directory_view_of_next_pane (NautilusWindowInfo *window);
G_END_DECLS
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 408be6c..1192474 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -5013,17 +5013,11 @@ get_file_uris_as_newline_delimited_string (GList *selection)
return get_file_paths_or_uris_as_newline_delimited_string (selection, FALSE);
}
-/*
- * Set up some environment variables that scripts can use
- * to take advantage of the current Nautilus state.
- */
+/* returns newly allocated strings for setting the environment variables */
static void
-set_script_environment_variables (FMDirectoryView *view, GList *selected_files)
+get_strings_for_environment_variables (FMDirectoryView *view, GList *selected_files,
+ char **file_paths, char **uris, char **uri)
{
- char *file_paths;
- char *uris;
- char *uri;
- char *geometry_string;
char *directory_uri;
/* We need to check that the directory uri starts with "file:" since
@@ -5033,24 +5027,43 @@ set_script_environment_variables (FMDirectoryView *view, GList *selected_files)
if (eel_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 (selected_files);
} else {
- file_paths = g_strdup ("");
+ *file_paths = g_strdup ("");
}
g_free (directory_uri);
+
+ *uris = get_file_uris_as_newline_delimited_string (selected_files);
+
+ *uri = nautilus_directory_get_uri (view->details->model);
+ if (eel_uri_is_desktop (*uri)) {
+ g_free (*uri);
+ *uri = nautilus_get_desktop_directory_uri ();
+ }
+}
+
+/*
+ * Set up some environment variables that scripts can use
+ * to take advantage of the current Nautilus state.
+ */
+static void
+set_script_environment_variables (FMDirectoryView *view, GList *selected_files)
+{
+ char *file_paths;
+ char *uris;
+ char *uri;
+ char *geometry_string;
+ FMDirectoryView *next_view;
+
+ get_strings_for_environment_variables (view, selected_files,
+ &file_paths, &uris, &uri);
g_setenv ("NAUTILUS_SCRIPT_SELECTED_FILE_PATHS", file_paths, TRUE);
g_free (file_paths);
- uris = get_file_uris_as_newline_delimited_string (selected_files);
g_setenv ("NAUTILUS_SCRIPT_SELECTED_URIS", uris, TRUE);
g_free (uris);
- uri = nautilus_directory_get_uri (view->details->model);
- if (eel_uri_is_desktop (uri)) {
- g_free (uri);
- uri = nautilus_get_desktop_directory_uri ();
- }
g_setenv ("NAUTILUS_SCRIPT_CURRENT_URI", uri, TRUE);
g_free (uri);
@@ -5058,6 +5071,31 @@ set_script_environment_variables (FMDirectoryView *view, GList *selected_files)
(GTK_WINDOW (fm_directory_view_get_containing_window (view)));
g_setenv ("NAUTILUS_SCRIPT_WINDOW_GEOMETRY", geometry_string, TRUE);
g_free (geometry_string);
+
+ /* next pane */
+ next_view = nautilus_window_info_get_directory_view_of_next_pane (fm_directory_view_get_nautilus_window (view));
+ if (next_view) {
+ GList *next_pane_selected_files;
+ next_pane_selected_files = fm_directory_view_get_selection (next_view);
+
+ get_strings_for_environment_variables (next_view, next_pane_selected_files,
+ &file_paths, &uris, &uri);
+ nautilus_file_list_free (next_pane_selected_files);
+ }
+ else {
+ file_paths = g_strdup("");
+ uris = g_strdup("");
+ uri = g_strdup("");
+ }
+
+ g_setenv ("NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS", file_paths, TRUE);
+ g_free (file_paths);
+
+ g_setenv ("NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_URIS", uris, TRUE);
+ g_free (uris);
+
+ g_setenv ("NAUTILUS_SCRIPT_NEXT_PANE_CURRENT_URI", uri, TRUE);
+ g_free (uri);
}
/* Unset all the special script environment variables. */
@@ -5068,6 +5106,9 @@ unset_script_environment_variables (void)
g_unsetenv ("NAUTILUS_SCRIPT_SELECTED_URIS");
g_unsetenv ("NAUTILUS_SCRIPT_CURRENT_URI");
g_unsetenv ("NAUTILUS_SCRIPT_WINDOW_GEOMETRY");
+ g_unsetenv ("NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS");
+ g_unsetenv ("NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_URIS");
+ g_unsetenv ("NAUTILUS_SCRIPT_NEXT_PANE_CURRENT_URI");
}
static void
@@ -5658,7 +5699,10 @@ action_open_scripts_folder_callback (GtkAction *action,
"NAUTILUS_SCRIPT_SELECTED_FILE_PATHS: newline-delimited paths for selected files (only if local)\n\n"
"NAUTILUS_SCRIPT_SELECTED_URIS: newline-delimited URIs for selected files\n\n"
"NAUTILUS_SCRIPT_CURRENT_URI: URI for current location\n\n"
- "NAUTILUS_SCRIPT_WINDOW_GEOMETRY: position and size of current window"),
+ "NAUTILUS_SCRIPT_WINDOW_GEOMETRY: position and size of current window\n\n"
+ "NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS: newline-delimited paths for selected files in the inactive pane of a split-view window (only if local)\n\n"
+ "NAUTILUS_SCRIPT_NEXT_PANE_SELECTED_URIS: newline-delimited URIs for selected files in the inactive pane of a split-view window\n\n"
+ "NAUTILUS_SCRIPT_NEXT_PANE_CURRENT_URI: URI for current location in the inactive pane of a split-view window"),
fm_directory_view_get_containing_window (view));
}
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 7bc6fa4..4407e6f 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -1906,6 +1906,22 @@ nautilus_window_get_active_slot (NautilusWindow *window)
return window->details->active_pane->active_slot;
}
+static FMDirectoryView *
+nautilus_window_get_directory_view_of_next_pane (NautilusWindow *window)
+{
+ NautilusWindowPane *next_pane;
+ g_assert (NAUTILUS_IS_WINDOW (window));
+
+ next_pane = nautilus_window_get_next_pane (window);
+
+ if (next_pane && FM_IS_DIRECTORY_VIEW (next_pane->active_slot->content_view)) {
+ return FM_DIRECTORY_VIEW (next_pane->active_slot->content_view);
+ }
+ else {
+ return NULL;
+ }
+}
+
GList *
nautilus_window_get_slots (NautilusWindow *window)
{
@@ -1944,6 +1960,7 @@ nautilus_window_info_iface_init (NautilusWindowInfoIface *iface)
iface->get_hidden_files_mode = nautilus_window_get_hidden_files_mode;
iface->set_hidden_files_mode = nautilus_window_set_hidden_files_mode;
iface->get_active_slot = nautilus_window_get_active_slot;
+ iface->get_directory_view_of_next_pane = nautilus_window_get_directory_view_of_next_pane;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]