diff options
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/calendar.c | 27 | ||||
-rw-r--r-- | calendar/gui/main.c | 9 |
2 files changed, 26 insertions, 10 deletions
diff --git a/calendar/gui/calendar.c b/calendar/gui/calendar.c index 339995cb92..dfeb1d6cc8 100644 --- a/calendar/gui/calendar.c +++ b/calendar/gui/calendar.c @@ -12,6 +12,8 @@ * */ +#include <gnome.h> +#include <stdio.h> #include <config.h> #include <unistd.h> #include <sys/stat.h> @@ -396,8 +398,11 @@ void calendar_save (Calendar *cal, char *fname) { VObject *vcal; + FILE *fp; + GtkWidget *dlg; struct stat s; - + int status; + if (fname == NULL) fname = cal->filename; @@ -412,11 +417,23 @@ calendar_save (Calendar *cal, char *fname) g_free (backup_name); } - writeVObjectToFile (fname, vcal); + fp = fopen(fname,"w"); + if (fp) { + writeVObject(fp, vcal); + fclose(fp); + if (strcmp(cal->filename, fname)) { + if (cal->filename) + g_free (cal->filename); + cal->filename = g_strdup (fname); + } + status = stat (fname, &s); + cal->file_time = s.st_mtime; + } else { + dlg = gnome_message_box_new(_("Failed to save calendar!"), + GNOME_MESSAGE_BOX_ERROR, "Ok", NULL); + gtk_widget_show(dlg); + } - stat (fname, &s); - cal->file_time = s.st_mtime; - cleanVObject (vcal); cleanStrTbl (); } diff --git a/calendar/gui/main.c b/calendar/gui/main.c index 3a49dfaa9a..6c4a4b4522 100644 --- a/calendar/gui/main.c +++ b/calendar/gui/main.c @@ -367,15 +367,14 @@ static void save_ok (GtkWidget *widget, GtkFileSelection *fs) { GnomeCalendar *gcal; + gchar *fname; gcal = GNOME_CALENDAR (gtk_object_get_user_data (GTK_OBJECT (fs))); gtk_window_set_wmclass (GTK_WINDOW (gcal), "gnomecal", "gnomecal"); - if (gcal->cal->filename) - g_free (gcal->cal->filename); - - gcal->cal->filename = g_strdup (gtk_file_selection_get_filename (fs)); - calendar_save (gcal->cal, gcal->cal->filename); + fname = g_strdup (gtk_file_selection_get_filename (fs)); + calendar_save (gcal->cal, fname); + g_free(fname); gtk_main_quit (); } |