diff --git a/src/nautilus-file-conflict-dialog.c b/src/nautilus-file-conflict-dialog.c index 44eea2b1ceda2d6b05e1fb37aad0bfee4169306d..100a0c8103d2bda0f1de83e509d5721d60e36cb0 100644 --- a/src/nautilus-file-conflict-dialog.c +++ b/src/nautilus-file-conflict-dialog.c @@ -35,11 +35,13 @@ struct _NautilusFileConflictDialog { - GtkDialog parent_instance; + AdwWindow parent_instance; gchar *conflict_name; gchar *suggested_name; + ConflictResponse response; + /* UI objects */ GtkWidget *primary_label; GtkWidget *secondary_label; @@ -56,7 +58,7 @@ struct _NautilusFileConflictDialog GtkWidget *src_icon; }; -G_DEFINE_TYPE (NautilusFileConflictDialog, nautilus_file_conflict_dialog, GTK_TYPE_DIALOG); +G_DEFINE_TYPE (NautilusFileConflictDialog, nautilus_file_conflict_dialog, ADW_TYPE_WINDOW); void nautilus_file_conflict_dialog_set_text (NautilusFileConflictDialog *fcd, @@ -125,6 +127,34 @@ nautilus_file_conflict_dialog_disable_apply_to_all (NautilusFileConflictDialog * gtk_widget_set_visible (fcd->checkbox, FALSE); } +static void +cancel_button_cb (NautilusFileConflictDialog *dialog) +{ + dialog->response = CONFLICT_RESPONSE_CANCEL; + gtk_window_close (GTK_WINDOW (dialog)); +} + +static void +rename_button_cb (NautilusFileConflictDialog *dialog) +{ + dialog->response = CONFLICT_RESPONSE_RENAME; + gtk_window_close (GTK_WINDOW (dialog)); +} + +static void +replace_button_cb (NautilusFileConflictDialog *dialog) +{ + dialog->response = CONFLICT_RESPONSE_REPLACE; + gtk_window_close (GTK_WINDOW (dialog)); +} + +static void +skip_button_cb (NautilusFileConflictDialog *dialog) +{ + dialog->response = CONFLICT_RESPONSE_SKIP; + gtk_window_close (GTK_WINDOW (dialog)); +} + static void entry_text_changed_cb (GtkEditable *entry, NautilusFileConflictDialog *dialog) @@ -166,7 +196,7 @@ on_expanded_notify (GtkExpander *w, { gtk_widget_set_visible (dialog->replace_button, FALSE); gtk_widget_set_visible (dialog->rename_button, TRUE); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), CONFLICT_RESPONSE_RENAME); + gtk_window_set_default_widget (GTK_WINDOW (dialog), dialog->rename_button); gtk_widget_set_sensitive (dialog->checkbox, FALSE); @@ -191,7 +221,7 @@ on_expanded_notify (GtkExpander *w, { gtk_widget_set_visible (dialog->rename_button, FALSE); gtk_widget_set_visible (dialog->replace_button, TRUE); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), CONFLICT_RESPONSE_REPLACE); + gtk_window_set_default_widget (GTK_WINDOW (dialog), dialog->replace_button); gtk_widget_set_sensitive (dialog->checkbox, TRUE); } @@ -220,6 +250,8 @@ static void nautilus_file_conflict_dialog_init (NautilusFileConflictDialog *fcd) { gtk_widget_init_template (GTK_WIDGET (fcd)); + /* Treat closing window as cancel action */ + fcd->response = CONFLICT_RESPONSE_CANCEL; } static void @@ -252,6 +284,10 @@ nautilus_file_conflict_dialog_class_init (NautilusFileConflictDialogClass *klass gtk_widget_class_bind_template_child (widget_class, NautilusFileConflictDialog, skip_button); gtk_widget_class_bind_template_child (widget_class, NautilusFileConflictDialog, dest_icon); gtk_widget_class_bind_template_child (widget_class, NautilusFileConflictDialog, src_icon); + gtk_widget_class_bind_template_callback (widget_class, cancel_button_cb); + gtk_widget_class_bind_template_callback (widget_class, rename_button_cb); + gtk_widget_class_bind_template_callback (widget_class, replace_button_cb); + gtk_widget_class_bind_template_callback (widget_class, skip_button_cb); gtk_widget_class_bind_template_callback (widget_class, entry_text_changed_cb); gtk_widget_class_bind_template_callback (widget_class, on_expanded_notify); gtk_widget_class_bind_template_callback (widget_class, checkbox_toggled_cb); @@ -291,6 +327,12 @@ nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog) return g_strdup (gtk_editable_get_text (GTK_EDITABLE (dialog->entry))); } +ConflictResponse +nautilus_file_conflict_dialog_get_response (NautilusFileConflictDialog *dialog) +{ + return dialog->response; +} + gboolean nautilus_file_conflict_dialog_get_apply_to_all (NautilusFileConflictDialog *dialog) { @@ -302,6 +344,5 @@ nautilus_file_conflict_dialog_new (GtkWindow *parent) { return NAUTILUS_FILE_CONFLICT_DIALOG (g_object_new (NAUTILUS_TYPE_FILE_CONFLICT_DIALOG, "transient-for", parent, - "use-header-bar", TRUE, NULL)); } diff --git a/src/nautilus-file-conflict-dialog.h b/src/nautilus-file-conflict-dialog.h index 70f81d0b387c50398cd51e7f28027fde8ca9dee2..55dfa9e44d7fed9df8ca88d5b1cb3860334cc249 100644 --- a/src/nautilus-file-conflict-dialog.h +++ b/src/nautilus-file-conflict-dialog.h @@ -25,12 +25,21 @@ #include #include #include +#include G_BEGIN_DECLS +typedef enum +{ + CONFLICT_RESPONSE_CANCEL, + CONFLICT_RESPONSE_SKIP, + CONFLICT_RESPONSE_REPLACE, + CONFLICT_RESPONSE_RENAME, +} ConflictResponse; + #define NAUTILUS_TYPE_FILE_CONFLICT_DIALOG (nautilus_file_conflict_dialog_get_type ()) -G_DECLARE_FINAL_TYPE (NautilusFileConflictDialog, nautilus_file_conflict_dialog, NAUTILUS, FILE_CONFLICT_DIALOG, GtkDialog) +G_DECLARE_FINAL_TYPE (NautilusFileConflictDialog, nautilus_file_conflict_dialog, NAUTILUS, FILE_CONFLICT_DIALOG, AdwWindow) NautilusFileConflictDialog* nautilus_file_conflict_dialog_new (GtkWindow *parent); @@ -59,4 +68,6 @@ void nautilus_file_conflict_dialog_delay_buttons_activation (NautilusFileConflic char* nautilus_file_conflict_dialog_get_new_name (NautilusFileConflictDialog *dialog); gboolean nautilus_file_conflict_dialog_get_apply_to_all (NautilusFileConflictDialog *dialog); +ConflictResponse nautilus_file_conflict_dialog_get_response (NautilusFileConflictDialog *dialog); + G_END_DECLS diff --git a/src/nautilus-file-operations.c b/src/nautilus-file-operations.c index 9c969ce0fadbe509b7000f634897e08c82182bc7..7d364ab6ce9dff50670daa2083dbccc267195f4c 100644 --- a/src/nautilus-file-operations.c +++ b/src/nautilus-file-operations.c @@ -53,6 +53,7 @@ #include "nautilus-error-reporting.h" #include "nautilus-operations-ui-manager.h" #include "nautilus-file-changes-queue.h" +#include "nautilus-file-conflict-dialog.h" #include "nautilus-file-private.h" #include "nautilus-tag-manager.h" #include "nautilus-trash-monitor.h" @@ -5675,8 +5676,7 @@ retry: response = handle_copy_move_conflict (job, src, dest, dest_dir); - if (response->id == GTK_RESPONSE_CANCEL || - response->id == GTK_RESPONSE_DELETE_EVENT) + if (response->id == CONFLICT_RESPONSE_CANCEL) { file_conflict_response_free (response); abort_job (job); @@ -6425,8 +6425,7 @@ retry: response = handle_copy_move_conflict (job, src, dest, dest_dir); - if (response->id == GTK_RESPONSE_CANCEL || - response->id == GTK_RESPONSE_DELETE_EVENT) + if (response->id == CONFLICT_RESPONSE_CANCEL) { file_conflict_response_free (response); abort_job (job); diff --git a/src/nautilus-operations-ui-manager.c b/src/nautilus-operations-ui-manager.c index 76e0f62f15a3cefdb96195138c1063b87e6de13a..8c6fedf03005cbb433182bc24933db765140a696 100644 --- a/src/nautilus-operations-ui-manager.c +++ b/src/nautilus-operations-ui-manager.c @@ -426,11 +426,11 @@ copy_move_conflict_on_file_list_ready (GList *files, } static void -on_conflict_dialog_response (GtkDialog *dialog, - gint response_id, - gpointer user_data) +on_conflict_dialog_closing (GtkWindow *dialog, + gpointer user_data) { FileConflictDialogData *data = user_data; + ConflictResponse response; if (data->handle != NULL) { @@ -449,19 +449,20 @@ on_conflict_dialog_response (GtkDialog *dialog, nautilus_file_monitor_remove (data->destination, data); } - if (response_id == CONFLICT_RESPONSE_RENAME) + response = nautilus_file_conflict_dialog_get_response (data->dialog); + + if (response == CONFLICT_RESPONSE_RENAME) { data->response->new_name = nautilus_file_conflict_dialog_get_new_name (data->dialog); } - else if (response_id != GTK_RESPONSE_CANCEL && - response_id != GTK_RESPONSE_NONE) + else if (response != CONFLICT_RESPONSE_CANCEL) { data->response->apply_to_all = nautilus_file_conflict_dialog_get_apply_to_all (data->dialog); } - data->response->id = response_id; + data->response->id = response; gtk_window_destroy (GTK_WINDOW (data->dialog)); @@ -499,7 +500,7 @@ run_file_conflict_dialog (gpointer user_data) data->on_file_list_ready, data); - g_signal_connect (data->dialog, "response", G_CALLBACK (on_conflict_dialog_response), data); + g_signal_connect (data->dialog, "close-request", G_CALLBACK (on_conflict_dialog_closing), data); gtk_window_present (GTK_WINDOW (data->dialog)); g_list_free (files); diff --git a/src/nautilus-operations-ui-manager.h b/src/nautilus-operations-ui-manager.h index 3bd4512d09b97bb0dc3b2bd73bb81d9810ed0f52..d115ff7163873da255a5f19ae9385cf590fda20e 100644 --- a/src/nautilus-operations-ui-manager.h +++ b/src/nautilus-operations-ui-manager.h @@ -20,13 +20,6 @@ FileConflictResponse * copy_move_conflict_ask_user_action (GtkWindow *parent_win GFile *dest_dir, gchar *suggestion); -enum -{ - CONFLICT_RESPONSE_SKIP = 1, - CONFLICT_RESPONSE_REPLACE = 2, - CONFLICT_RESPONSE_RENAME = 3, -}; - void handle_unsupported_compressed_file (GtkWindow *parent_window, GFile *compressed_file); diff --git a/src/resources/ui/nautilus-file-conflict-dialog.ui b/src/resources/ui/nautilus-file-conflict-dialog.ui index 8993fb6596d5d3253bdc2433454ac0f1b83c261d..e721491c93180feda05ed8241062afd4b05fab4e 100644 --- a/src/resources/ui/nautilus-file-conflict-dialog.ui +++ b/src/resources/ui/nautilus-file-conflict-dialog.ui @@ -1,106 +1,151 @@ -