summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexandru Pandelea <alexandru.pandelea@gmail.com>2016-09-02 13:02:47 +0300
committerAlexandru Pandelea <alexandru.pandelea@gmail.com>2016-09-02 22:05:55 +0300
commit5815ba1c8a7002603efa06ed9c226c1809cfc3d3 (patch)
tree1494907a27f2e0a42cbfde6bd762b9e2f926f051 /src
parent437f573cf5441587457996863c8eb2a33a682b28 (diff)
downloadnautilus-5815ba1c8a7002603efa06ed9c226c1809cfc3d3.tar.gz
mime-actions: Fix shift+control+down seg fault on a folder
Using this shortcut on one or more folders causes segmentation fault. In order to solve this, if there is a directory that needs to be activated, the NEW_WINDOW flag is set, so that the initial window will be closed and a new one will be created. After a new window is created, the CLOSE_BEHIND flag is disabled,so that the window will not be closed. The flags NEW_TAB is also set there(unless we want all directories opened in new windows), in order for new tabs to open in the newly created window. https://bugzilla.gnome.org/show_bug.cgi?id=755711
Diffstat (limited to 'src')
-rw-r--r--src/nautilus-mime-actions.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index 893070d69..3f7033baa 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -1644,6 +1644,7 @@ activate_files (ActivateParameters *parameters)
gint num_unhandled;
gint num_files;
gboolean open_files;
+ gboolean closed_window;
screen = gtk_widget_get_screen (GTK_WIDGET (parameters->parent_window));
@@ -1791,14 +1792,30 @@ activate_files (ActivateParameters *parameters)
{
if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0)
{
- flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
- flags |= NAUTILUS_WINDOW_OPEN_FLAG_DONT_MAKE_ACTIVE;
+ /* if CLOSE_BEHIND is set and we have a directory to be activated, we
+ * will first have to open a new window and after that we can open the
+ * rest of files in tabs */
+ if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND) != 0)
+ {
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW;
+ }
+ else
+ {
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
+ }
}
else
{
flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW;
}
}
+ else
+ {
+ /* if we want to close the window and activate a single directory, then we will need
+ * the NEW_WINDOW flag set */
+ if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND) != 0)
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW;
+ }
if (parameters->slot != NULL &&
(!parameters->user_confirmation ||
@@ -1817,6 +1834,7 @@ activate_files (ActivateParameters *parameters)
open_in_view_files = g_list_reverse (open_in_view_files);
}
+ closed_window = FALSE;
for (l = open_in_view_files; l != NULL; l = l->next)
{
@@ -1833,6 +1851,23 @@ activate_files (ActivateParameters *parameters)
* to make splicit the window we want to use for activating the files */
nautilus_application_open_location_full (NAUTILUS_APPLICATION (g_application_get_default ()),
f, flags, NULL, NULL, parameters->slot);
+
+ /* close only the window from which the action was launched and then open
+ * tabs/windows (depending on parameters->flags) */
+ if (!closed_window && (flags & NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND) != 0)
+ {
+ flags &= (~NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND);
+
+ /* if NEW_WINDOW is set, we want all files in new windows, not in tabs */
+ if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0)
+ {
+ flags &= (~NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
+ flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
+ }
+
+ closed_window = TRUE;
+ }
+
g_object_unref (f);
g_free (uri);
}