keep the overwrite confirmation around for an entire job, so we don't

2008-03-28  Jens Granseuer  <jensgr@gmx.net>

	* file-transfer-dialog.c: (file_transfer_job_destroy),
	(file_transfer_dialog_overwrite), (file_transfer_job_schedule): keep
	the overwrite confirmation around for an entire job, so we don't reset
	the window position all the time

svn path=/trunk/; revision=8606
This commit is contained in:
Jens Granseuer 2008-03-28 22:03:09 +00:00 committed by Jens Granseuer
parent eb420a2cbb
commit a12ed153f0
2 changed files with 37 additions and 15 deletions

View file

@ -1,3 +1,10 @@
2008-03-28 Jens Granseuer <jensgr@gmx.net>
* file-transfer-dialog.c: (file_transfer_job_destroy),
(file_transfer_dialog_overwrite), (file_transfer_job_schedule): keep
the overwrite confirmation around for an entire job, so we don't reset
the window position all the time
2008-03-27 Jens Granseuer <jensgr@gmx.net> 2008-03-27 Jens Granseuer <jensgr@gmx.net>
* file-transfer-dialog.c: (file_transfer_dialog_set_prop), * file-transfer-dialog.c: (file_transfer_dialog_set_prop),

View file

@ -66,6 +66,7 @@ struct _FileTransferDialogPrivate
typedef struct _FileTransferJob typedef struct _FileTransferJob
{ {
FileTransferDialog *dialog; FileTransferDialog *dialog;
GtkDialog *overwrite_dialog;
GSList *source_uris; GSList *source_uris;
GSList *target_uris; GSList *target_uris;
FileTransferDialogOptions options; FileTransferDialogOptions options;
@ -81,6 +82,7 @@ typedef struct {
goffset current_bytes; goffset current_bytes;
goffset total_bytes; goffset total_bytes;
gint response; gint response;
GtkDialog *overwrite_dialog;
} FileTransferData; } FileTransferData;
static GObjectClass *parent_class; static GObjectClass *parent_class;
@ -436,6 +438,8 @@ file_transfer_job_destroy (FileTransferJob *job)
g_slist_foreach (job->target_uris, (GFunc) g_free, NULL); g_slist_foreach (job->target_uris, (GFunc) g_free, NULL);
g_slist_free (job->source_uris); g_slist_free (job->source_uris);
g_slist_free (job->target_uris); g_slist_free (job->target_uris);
if (job->overwrite_dialog != NULL)
gtk_widget_destroy (GTK_WIDGET (job->overwrite_dialog));
g_free (job); g_free (job);
} }
@ -462,27 +466,35 @@ file_transfer_dialog_overwrite (gpointer user_data)
{ {
FileTransferData *data = user_data; FileTransferData *data = user_data;
GtkDialog *dialog; GtkDialog *dialog;
GtkWidget *button;
dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (data->dialog), dialog = data->overwrite_dialog;
GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
_("File '%s' already exists. Do you want to overwrite it?"),
data->target));
gtk_dialog_add_button (dialog, _("_Skip"), GTK_RESPONSE_NO); if (dialog != NULL) {
gtk_dialog_add_button (dialog, _("Overwrite _All"), GTK_RESPONSE_APPLY); } else {
GtkWidget *button;
button = gtk_button_new_with_label (_("_Overwrite")); dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (data->dialog),
gtk_button_set_image (GTK_BUTTON (button), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
gtk_image_new_from_stock (GTK_STOCK_APPLY, GTK_BUTTONS_NONE,
GTK_ICON_SIZE_BUTTON)); _("File '%s' already exists. Do you want to overwrite it?"),
gtk_dialog_add_action_widget (dialog, button, GTK_RESPONSE_YES); data->target));
gtk_widget_show (button);
gtk_dialog_add_button (dialog, _("_Skip"), GTK_RESPONSE_NO);
gtk_dialog_add_button (dialog, _("Overwrite _All"), GTK_RESPONSE_APPLY);
button = gtk_button_new_with_label (_("_Overwrite"));
gtk_button_set_image (GTK_BUTTON (button),
gtk_image_new_from_stock (GTK_STOCK_APPLY,
GTK_ICON_SIZE_BUTTON));
gtk_dialog_add_action_widget (dialog, button, GTK_RESPONSE_YES);
gtk_widget_show (button);
data->overwrite_dialog = dialog;
}
data->response = gtk_dialog_run (dialog); data->response = gtk_dialog_run (dialog);
gtk_widget_destroy (GTK_WIDGET (dialog)); gtk_widget_hide (GTK_WIDGET (dialog));
return FALSE; return FALSE;
} }
@ -501,6 +513,7 @@ file_transfer_job_schedule (GIOSchedulerJob *io_job,
/* take the first file from the list and copy it */ /* take the first file from the list and copy it */
data.dialog = job->dialog; data.dialog = job->dialog;
data.overwrite_dialog = job->overwrite_dialog;
data.current_file = job->dialog->priv->nth + 1; data.current_file = job->dialog->priv->nth + 1;
data.total_files = job->dialog->priv->total; data.total_files = job->dialog->priv->total;
data.source = job->source_uris->data; data.source = job->source_uris->data;
@ -553,6 +566,8 @@ file_transfer_job_schedule (GIOSchedulerJob *io_job,
} else { } else {
success = TRUE; success = TRUE;
} }
job->overwrite_dialog = data.overwrite_dialog;
} }
g_error_free (error); g_error_free (error);
} }