Commit ed23b17a authored by Matt Jakeman's avatar Matt Jakeman Committed by António Fernandes
Browse files

file-operations: Remove blocking dialog for emptying trash

Stop using the blocking dialog function `gtk_dialog_run`
when the user is prompted to empty the trash during unmount.

Part of #1992
parent 8af45e55
......@@ -3011,11 +3011,9 @@ has_trash_files (GMount *mount)
return res;
}
static gint
prompt_empty_trash (GtkWindow *parent_window)
static GtkWidget *
create_empty_trash_prompt (GtkWindow *parent_window)
{
gint result;
GtkWidget *dialog;
dialog = gtk_message_dialog_new (parent_window, GTK_DIALOG_MODAL,
......@@ -3035,9 +3033,7 @@ prompt_empty_trash (GtkWindow *parent_window)
gtk_window_set_title (GTK_WINDOW (dialog), "");
atk_object_set_role (gtk_widget_get_accessible (dialog), ATK_ROLE_ALERT);
result = gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return result;
return dialog;
}
static void
......@@ -3048,6 +3044,42 @@ empty_trash_for_unmount_done (gboolean success,
do_unmount (data);
}
static void
empty_trash_prompt_cb (GtkDialog *dialog,
gint response_id,
gpointer user_data)
{
UnmountData *data = user_data;
if (response_id == GTK_RESPONSE_ACCEPT)
{
GTask *task;
EmptyTrashJob *job;
job = op_job_new (EmptyTrashJob, data->parent_window, NULL);
job->should_confirm = FALSE;
job->trash_dirs = get_trash_dirs_for_mount (data->mount);
job->done_callback = empty_trash_for_unmount_done;
job->done_callback_data = data;
task = g_task_new (NULL, NULL, empty_trash_task_done, job);
g_task_set_task_data (task, job, NULL);
g_task_run_in_thread (task, empty_trash_thread_func);
g_object_unref (task);
}
else if (response_id == GTK_RESPONSE_CANCEL)
{
if (data->callback)
{
data->callback (data->callback_data);
}
unmount_data_free (data);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
}
void
nautilus_file_operations_unmount_mount_full (GtkWindow *parent_window,
GMount *mount,
......@@ -3058,7 +3090,6 @@ nautilus_file_operations_unmount_mount_full (GtkWindow *parent_win
gpointer callback_data)
{
UnmountData *data;
int response;
data = g_new0 (UnmountData, 1);
data->callback = callback;
......@@ -3078,35 +3109,12 @@ nautilus_file_operations_unmount_mount_full (GtkWindow *parent_win
if (check_trash && has_trash_files (mount))
{
response = prompt_empty_trash (parent_window);
if (response == GTK_RESPONSE_ACCEPT)
{
GTask *task;
EmptyTrashJob *job;
job = op_job_new (EmptyTrashJob, parent_window, NULL);
job->should_confirm = FALSE;
job->trash_dirs = get_trash_dirs_for_mount (mount);
job->done_callback = empty_trash_for_unmount_done;
job->done_callback_data = data;
task = g_task_new (NULL, NULL, empty_trash_task_done, job);
g_task_set_task_data (task, job, NULL);
g_task_run_in_thread (task, empty_trash_thread_func);
g_object_unref (task);
return;
}
else if (response == GTK_RESPONSE_CANCEL)
{
if (callback)
{
callback (callback_data);
}
GtkWidget *dialog;
dialog = create_empty_trash_prompt (parent_window);
unmount_data_free (data);
return;
}
g_signal_connect (dialog, "response", G_CALLBACK (empty_trash_prompt_cb), data);
gtk_widget_show_all (dialog);
return;
}
do_unmount (data);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment