X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=gtk-gui.c;h=a34ac4fb283190bd8771b672c2c183074dfde060;hb=7a8fe91690f31d9b4af6e041574c55028d928bc1;hp=f60df9bf161d8565bc3c8416a29c84550e2a188d;hpb=0bf2cfa66d489a43090fcca0e220260a74cc9f20;p=ext%2Fsubsurface.git diff --git a/gtk-gui.c b/gtk-gui.c index f60df9b..a34ac4f 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -31,11 +31,6 @@ struct units output_units; #define GCONF_NAME(x) "/apps/subsurface/" #x -void on_destroy(GtkWidget* w, gpointer data) -{ - gtk_main_quit(); -} - static GtkWidget *dive_profile; void repaint_dive(void) @@ -146,10 +141,36 @@ static void file_save(GtkWidget *w, gpointer data) filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); save_dives(filename); g_free(filename); + mark_divelist_changed(TRUE); + } + gtk_widget_destroy(dialog); +} + +static void ask_save_changes() +{ + GtkWidget *dialog; + dialog = gtk_dialog_new_with_buttons("Save Changes?", + GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + NULL); + + if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { + file_save(NULL,NULL); } gtk_widget_destroy(dialog); } +void on_destroy(GtkWidget* w, gpointer data) +{ + /* Make sure to flush any modified dive data */ + update_dive(NULL); + + if (unsaved_changes()) + ask_save_changes(); + gtk_main_quit(); +} + static void quit(GtkWidget *w, gpointer data) { gtk_main_quit();