mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-10-02 14:03:39 +00:00
files-view: check if gdk_clipboard_read_value_async operation was cancelled
Nautilus crashes if the user with a cut selection rapidly opens then closes a tab. This is because update_cut_status_callback is called after the files view has already been finalized. GIO guarantees that our callback will always be called even if we cancel the clipboard cancellable in dispose. Check cancellation status in update_cut_status_callback and proceed no further if cancelled. Fixes https://gitlab.gnome.org/GNOME/nautilus/-/issues/3434
This commit is contained in:
parent
09f4546d50
commit
800c690a9c
|
@ -681,12 +681,23 @@ update_cut_status_callback (GObject *source_object,
|
|||
GAsyncResult *res,
|
||||
gpointer user_data)
|
||||
{
|
||||
NautilusFilesView *self = NAUTILUS_FILES_VIEW (user_data);
|
||||
NautilusFilesViewPrivate *priv = nautilus_files_view_get_instance_private (self);
|
||||
NautilusFilesView *self;
|
||||
NautilusFilesViewPrivate *priv;
|
||||
const GValue *value;
|
||||
GList *cut_files = NULL;
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
value = gdk_clipboard_read_value_finish (GDK_CLIPBOARD (source_object), res, &error);
|
||||
|
||||
if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
|
||||
{
|
||||
/* The files view has already been disposed, bailout */
|
||||
return;
|
||||
}
|
||||
|
||||
self = NAUTILUS_FILES_VIEW (user_data);
|
||||
priv = nautilus_files_view_get_instance_private (self);
|
||||
|
||||
value = gdk_clipboard_read_value_finish (GDK_CLIPBOARD (source_object), res, NULL);
|
||||
if (value != NULL &&
|
||||
G_VALUE_HOLDS (value, NAUTILUS_TYPE_CLIPBOARD))
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue