[nautilus] application: specify cwd
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus] application: specify cwd
- Date: Fri, 16 Oct 2015 15:28:17 +0000 (UTC)
commit af92c2729740ca77b91d2a926d2f358229bb6c54
Author: Carlos Soriano <csoriano gnome org>
Date: Fri Oct 16 17:21:57 2015 +0200
application: specify cwd
We are managing all command line options in the main instance.
That works always correctly except when resolving relative paths,
which are relative the local instance, not the main one.
To fix it, set a "cwd" option in the local instance to ensure the
relative file paths are resolved in the main instance based on the local
instance.
https://bugzilla.gnome.org/show_bug.cgi?id=756688
src/nautilus-application.c | 28 +++++++++++++++++++++++++++-
1 files changed, 27 insertions(+), 1 deletions(-)
---
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 1b37fc3..2187692 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -796,7 +796,15 @@ nautilus_application_handle_file_args (NautilusApplication *self,
if (remaining) {
for (idx = 0; remaining[idx] != NULL; idx++) {
- file = g_file_new_for_commandline_arg (remaining[idx]);
+ gchar *cwd;
+
+ g_variant_dict_lookup (options, "cwd", "s", &cwd);
+ if (cwd == NULL) {
+ file = g_file_new_for_commandline_arg (remaining[idx]);
+ } else {
+ file = g_file_new_for_commandline_arg_and_cwd (remaining[idx], cwd);
+ g_free (cwd);
+ }
g_ptr_array_add (file_array, file);
}
} else if (g_variant_dict_contains (options, "new-window")) {
@@ -1216,6 +1224,23 @@ nautilus_application_window_removed (GtkApplication *app,
}
}
+/* Manage the local instance command line options. This is only necessary to
+ * resolv correctly relative paths, since if the main instance resolv them in
+ * command_line, it will do it with its current cwd, which may not be correct for the
+ * non main GApplication instance */
+static gint
+nautilus_application_handle_local_options (GApplication *app,
+ GVariantDict *options)
+{
+ gchar *cwd;
+
+ cwd = g_get_current_dir ();
+ g_variant_dict_insert (options, "cwd", "s", cwd);
+ g_free (cwd);
+
+ return -1;
+}
+
static void
nautilus_application_class_init (NautilusApplicationClass *class)
{
@@ -1234,6 +1259,7 @@ nautilus_application_class_init (NautilusApplicationClass *class)
application_class->dbus_unregister = nautilus_application_dbus_unregister;
application_class->open = nautilus_application_open;
application_class->command_line = nautilus_application_command_line;
+ application_class->handle_local_options = nautilus_application_handle_local_options;
gtkapp_class = GTK_APPLICATION_CLASS (class);
gtkapp_class->window_added = nautilus_application_window_added;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]