mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-17 23:01:59 +00:00
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
This commit is contained in:
parent
437f573cf5
commit
5815ba1c8a
|
@ -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));
|
||||
|
||||
|
@ -1790,15 +1791,31 @@ activate_files (ActivateParameters *parameters)
|
|||
if (count > 1)
|
||||
{
|
||||
if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0)
|
||||
{
|
||||
/* 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;
|
||||
flags |= NAUTILUS_WINDOW_OPEN_FLAG_DONT_MAKE_ACTIVE;
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue