Package: gtkterm Version: 0.99.5-1 Priority: wishlist Tags: patch
--- gtkterm-0.99.5/src/fichier.c 2005-09-22 23:49:23.000000000 +0400 +++ gtkterm-0.99.5.mod/src/fichier.c 2009-08-21 16:26:00.000000000 +0400 @@ -32,6 +32,7 @@ #include <string.h> #include "gettext.h" +#include "i18n.h" #include "config.h" #include "widgets.h" #include "serie.h" @@ -282,9 +283,36 @@ fwrite(data, size, 1, Fic); } +void really_save_file(GtkDialog *dialog, gint id, gpointer data) +{ + char *file_name = (char *)data; + + if (id != GTK_RESPONSE_ACCEPT) + return; + + Fic = fopen(file_name, "w"); + + if (Fic == NULL) + { + g_free(str); + str = g_strdup_printf(_("Cannot open file %s : %s\n"), file_name, strerror_utf8(errno)); + show_message(str, MSG_ERR); + } + else + { + fic_defaut = g_strdup(file_name); + + write_buffer_with_func(write_file); + + fclose(Fic); + } +} + gint Sauve_fichier(GtkFileSelection *FS) { gchar *NomFichier; + GtkWidget *dialog, *label; + struct stat st; NomFichier = g_strdup(gtk_file_selection_get_filename(FS)); if ((!NomFichier || (strcmp(NomFichier, ""))) == 0) @@ -294,20 +322,32 @@ show_message(str, MSG_ERR); return FALSE; } - Fic = fopen(NomFichier, "w"); - if(Fic == NULL) + + if (stat (NomFichier, &st) != 0) { - g_free(str); - str = g_strdup_printf(_("Cannot open file %s : %s\n"), NomFichier, strerror_utf8(errno)); - show_message(str, MSG_ERR); + really_save_file (NULL, GTK_RESPONSE_ACCEPT, (gpointer) NomFichier); + + return FALSE; } - else - { - fic_defaut = g_strdup(NomFichier); - write_buffer_with_func(write_file); + /* File already exists */ + dialog = gtk_dialog_new_with_buttons (_("Warning !"), + NULL, GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_CANCEL, GTK_RESPONSE_NONE, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); + + g_free(str); + str = g_strdup_printf (_("\nFile \"%s\" already exists.\n" + "Do you want to overwrite it ?\n"), NomFichier); + label = gtk_label_new (str); + g_signal_connect (GTK_OBJECT (dialog), "response", + G_CALLBACK (really_save_file), (gpointer) NomFichier); + g_signal_connect_swapped (GTK_OBJECT(dialog), "response", + G_CALLBACK (gtk_widget_destroy), GTK_WIDGET (dialog)); + + gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); + + gtk_widget_show_all (dialog); - fclose(Fic); - } return FALSE; }