summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2008-04-03 13:27:48 +0200
committerCosimo Cecchi <cosimoc@gnome.org>2010-04-26 16:54:25 +0200
commitdc21af1dc03759661fea147a8b98a8772749b29e (patch)
treec29a305ac85fa2d1190f2f63c06af2640c159a98
parentbf607e6e3045dff76128894e87cd42affb68a44c (diff)
downloadnautilus-dc21af1dc03759661fea147a8b98a8772749b29e.tar.gz
Implement responses from the dialog back to the file operation.
Add some API to get the response type from the conflict dialog back to the file operations code. Start using that API during the operations accordingly.
-rw-r--r--libnautilus-private/nautilus-file-conflict-dialog.c31
-rw-r--r--libnautilus-private/nautilus-file-conflict-dialog.h13
-rw-r--r--libnautilus-private/nautilus-file-operations.c61
3 files changed, 74 insertions, 31 deletions
diff --git a/libnautilus-private/nautilus-file-conflict-dialog.c b/libnautilus-private/nautilus-file-conflict-dialog.c
index cd7e7eb9d..49f9f0ec7 100644
--- a/libnautilus-private/nautilus-file-conflict-dialog.c
+++ b/libnautilus-private/nautilus-file-conflict-dialog.c
@@ -88,9 +88,7 @@ build_dialog_appearance (NautilusFileConflictDialog *fcd)
char *label_text;
char *size, *date, *type;
GdkPixbuf *pixbuf;
- GtkWidget *image;
- GtkWidget *label;
- GtkWidget *rename_button;
+ GtkWidget *image, *label, *button;
NautilusFile *src, *dest, *dest_dir;
dialog = GTK_DIALOG (fcd);
@@ -227,15 +225,15 @@ build_dialog_appearance (NautilusFileConflictDialog *fcd)
gtk_dialog_add_buttons (dialog,
GTK_STOCK_CANCEL,
GTK_RESPONSE_CANCEL,
- _("S_kip"),
+ _("_Skip"),
CONFLICT_RESPONSE_SKIP,
NULL);
- rename_button = gtk_dialog_add_button (dialog,
- _("Re_name"),
- CONFLICT_RESPONSE_RENAME);
- gtk_widget_set_sensitive (rename_button,
+ button = gtk_dialog_add_button (dialog,
+ _("Re_name"),
+ CONFLICT_RESPONSE_RENAME);
+ gtk_widget_set_sensitive (button,
FALSE);
- details->rename_button = rename_button;
+ details->rename_button = button;
gtk_dialog_add_button (dialog,
_("_Replace"),
CONFLICT_RESPONSE_REPLACE);
@@ -348,6 +346,7 @@ nautilus_file_conflict_dialog_init (NautilusFileConflictDialog *fcd)
gtk_box_pack_start (GTK_BOX (vbox),
widget, FALSE, FALSE, 0);
gtk_widget_show (widget);
+ details->checkbox = widget;
g_signal_connect (widget, "toggled",
G_CALLBACK (checkbox_toggled_cb),
dialog);
@@ -380,6 +379,20 @@ nautilus_file_conflict_dialog_class_init (NautilusFileConflictDialogClass *klass
g_type_class_add_private (klass, sizeof (NautilusFileConflictDialogDetails));
}
+char *
+nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog)
+{
+ return g_strdup (gtk_entry_get_text
+ (GTK_ENTRY (dialog->details->entry)));
+}
+
+gboolean
+nautilus_file_conflict_dialog_get_apply_to_all (NautilusFileConflictDialog *dialog)
+{
+ return gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON (dialog->details->checkbox));
+}
+
GtkWidget *
nautilus_file_conflict_dialog_new (GtkWindow *parent,
GFile *source,
diff --git a/libnautilus-private/nautilus-file-conflict-dialog.h b/libnautilus-private/nautilus-file-conflict-dialog.h
index d181a0e29..452f742a7 100644
--- a/libnautilus-private/nautilus-file-conflict-dialog.h
+++ b/libnautilus-private/nautilus-file-conflict-dialog.h
@@ -55,16 +55,15 @@ enum
CONFLICT_RESPONSE_SKIP = 1,
CONFLICT_RESPONSE_REPLACE = 2,
CONFLICT_RESPONSE_RENAME = 3,
- CONFLICT_RESPONSE_SKIP_ALL = 4,
- CONFLICT_RESPONSE_REPLACE_ALL = 5
};
GType nautilus_file_conflict_dialog_get_type (void) G_GNUC_CONST;
-GtkWidget* nautilus_file_conflict_dialog_new (GtkWindow *parent,
- GFile *source,
- GFile *destination,
- GFile *dest_dir);
-char* nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog);
+GtkWidget* nautilus_file_conflict_dialog_new (GtkWindow *parent,
+ GFile *source,
+ GFile *destination,
+ GFile *dest_dir);
+char* nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog);
+gboolean nautilus_file_conflict_dialog_get_apply_to_all (NautilusFileConflictDialog *dialog);
#endif /* NAUTILUS_FILE_CONFLICT_DIALOG_H */
diff --git a/libnautilus-private/nautilus-file-operations.c b/libnautilus-private/nautilus-file-operations.c
index 0796e905d..67d1ff26e 100644
--- a/libnautilus-private/nautilus-file-operations.c
+++ b/libnautilus-private/nautilus-file-operations.c
@@ -3831,42 +3831,68 @@ is_trusted_desktop_file (GFile *file,
}
typedef struct {
+ int response;
+ char *new_name;
+ gboolean apply_to_all;
+} ConflictResponseData;
+
+typedef struct {
GFile *src;
GFile *dest;
GFile *dest_dir;
GtkWindow *parent;
-} MyData;
+ ConflictResponseData *resp_data;
+} ConflictDialogData;
static gboolean
do_run_my_dialog (gpointer _data)
{
- MyData *data = _data;
+ ConflictDialogData *data = _data;
GtkWidget *dialog;
+ int response;
dialog = nautilus_file_conflict_dialog_new (data->parent,
data->src,
data->dest,
data->dest_dir);
- gtk_dialog_run (GTK_DIALOG (dialog));
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
+
+ if (response == CONFLICT_RESPONSE_RENAME) {
+ data->resp_data->new_name =
+ nautilus_file_conflict_dialog_get_new_name (NAUTILUS_FILE_CONFLICT_DIALOG (dialog));
+ } else if (response != GTK_RESPONSE_CANCEL ||
+ response != GTK_RESPONSE_NONE) {
+ data->resp_data->apply_to_all =
+ nautilus_file_conflict_dialog_get_apply_to_all
+ (NAUTILUS_FILE_CONFLICT_DIALOG (dialog));
+ }
+
+ data->resp_data->response = response;
+
+ gtk_widget_destroy (dialog);
return FALSE;
}
-static void
-run_my_dialog (CommonJob *job,
- GFile *src,
- GFile *dest,
- GFile *dest_dir)
+static ConflictResponseData *
+run_conflict_dialog (CommonJob *job,
+ GFile *src,
+ GFile *dest,
+ GFile *dest_dir)
{
- MyData *data;
-
+ ConflictDialogData *data;
+ ConflictResponseData *resp_data;
+
g_timer_stop (job->time);
- data = g_new0 (MyData, 1);
+ data = g_slice_new0 (ConflictDialogData);
data->parent = job->parent_window;
data->src = src;
data->dest = dest;
data->dest_dir = dest_dir;
+
+ resp_data = g_slice_new0 (ConflictResponseData);
+ data->resp_data = resp_data;
nautilus_progress_info_pause (job->progress);
g_io_scheduler_job_send_to_mainloop (job->io_job,
@@ -3874,10 +3900,12 @@ run_my_dialog (CommonJob *job,
data,
NULL);
nautilus_progress_info_resume (job->progress);
-
- g_free (data);
-
+
+ g_slice_free (ConflictDialogData, data);
+
g_timer_continue (job->time);
+
+ return resp_data;
}
/* Debuting files is non-NULL only for toplevel items */
@@ -4091,6 +4119,7 @@ copy_move_file (CopyMoveJob *copy_job,
if (!overwrite &&
IS_IO_ERROR (error, EXISTS)) {
gboolean is_merge;
+ ConflictResponseData *response;
if (unique_names) {
g_object_unref (dest);
@@ -4099,7 +4128,9 @@ copy_move_file (CopyMoveJob *copy_job,
goto retry;
}
- run_my_dialog (job, src, dest, dest_dir);
+ response = run_conflict_dialog (job, src, dest, dest_dir);
+ g_print ("my response was: id %d, new name %s, apply all %d\n",
+ response->response, response->new_name, (int) response->apply_to_all);
is_merge = FALSE;
#if 0
if (is_dir (dest)) {