diff options
author | Patrick Griffis <tingping@tingping.se> | 2017-06-02 16:43:38 -0400 |
---|---|---|
committer | Patrick Griffis <tingping@tingping.se> | 2017-06-02 17:07:54 -0400 |
commit | d0b6ca30c206e6268264b46ba29a9a7e60d19b54 (patch) | |
tree | dd44ee585356b039abb817207e13be0b91ad9927 | |
parent | dea8012e213f9b465df3e4267fd481f74ca09874 (diff) | |
download | gtk+-wip/tingping/remove-dialog-run.tar.gz |
gtkfilechooserwidget: Start replacing gtk_dialog_run() usagewip/tingping/remove-dialog-run
-rw-r--r-- | gtk/gtkfilechooserwidget.c | 64 |
1 files changed, 47 insertions, 17 deletions
diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index ec51668609..79a4a76b6f 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -744,8 +744,8 @@ error_message_with_parent (GtkWindow *parent, gtk_window_group_add_window (gtk_window_get_group (parent), GTK_WINDOW (dialog)); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + g_signal_connect (dialog, "response", G_CALLBACK(gtk_widget_destroy), NULL); + gtk_widget_show (dialog); } /* Returns a toplevel GtkWindow, or NULL if none */ @@ -1456,14 +1456,45 @@ add_to_shortcuts_cb (GSimpleAction *action, impl); } -static gboolean -confirm_delete (GtkFileChooserWidget *impl, - GFileInfo *info) +struct FileTuple { + GtkFileChooserWidget *widget; + GFile *file; + GFileInfo *info; +}; + +static void +file_tuple_free (gpointer data, GClosure *closure) +{ + struct FileTuple *t = data; + + g_object_unref (t->file); + g_object_unref (t->info); + g_object_unref (t->widget); + g_free (t); +} + +static void +on_confirm_delete (GtkDialog *dialog, guint response_id, struct FileTuple *data) +{ + GError *error = NULL; + + if (response_id == GTK_RESPONSE_ACCEPT) + { + if (!g_file_delete (data->file, NULL, &error)) + error_deleting_file (data->widget, data->file, error); + } + + gtk_widget_destroy (GTK_WIDGET(dialog)); +} + +static void +show_confirm_delete_dialog (GtkFileChooserWidget *impl, + struct FileTuple *data) { GtkWindow *toplevel; GtkWidget *dialog; - gint response; const gchar *name; + GFileInfo *info = data->info; name = g_file_info_get_display_name (info); @@ -1484,11 +1515,9 @@ confirm_delete (GtkFileChooserWidget *impl, if (gtk_window_has_group (toplevel)) gtk_window_group_add_window (gtk_window_get_group (toplevel), GTK_WINDOW (dialog)); - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - gtk_widget_destroy (dialog); - - return (response == GTK_RESPONSE_ACCEPT); + g_signal_connect_data (dialog, "response", G_CALLBACK(on_confirm_delete), + data, file_tuple_free, 0); + gtk_widget_show (dialog); } static void @@ -1500,16 +1529,17 @@ delete_selected_cb (GtkTreeModel *model, GtkFileChooserWidget *impl = data; GFile *file; GFileInfo *info; - GError *error = NULL; + struct FileTuple *file_data; file = _gtk_file_system_model_get_file (GTK_FILE_SYSTEM_MODEL (model), iter); info = _gtk_file_system_model_get_info (GTK_FILE_SYSTEM_MODEL (model), iter); - if (confirm_delete (impl, info)) - { - if (!g_file_delete (file, NULL, &error)) - error_deleting_file (impl, file, error); - } + file_data = g_new (struct FileTuple, 1); + file_data->file = g_object_ref (file); + file_data->info = g_object_ref (info); + file_data->widget = g_object_ref (impl); + + show_confirm_delete_dialog (impl, file_data); } static void |