X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=gtk-gui.c;h=1a3838e67f59ccdbe10fa612f4c02d949266c09e;hb=8a8ad3f9978c47d9ba10085236e6e6722949b5e2;hp=71762f5354c9b0b84dcb52c72400bc17178f62ce;hpb=f459c2ec22839a4a208ea833bdb1e0b87a6799b4;p=ext%2Fsubsurface.git diff --git a/gtk-gui.c b/gtk-gui.c index 71762f5..1a3838e 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -141,35 +141,53 @@ 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); + mark_divelist_changed(FALSE); } gtk_widget_destroy(dialog); } static void ask_save_changes() { - GtkWidget *dialog; + GtkWidget *dialog, *label, *content; 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); - + content = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + label = gtk_label_new ("You have unsaved changes\nWould you like to save those before exiting the program?"); + gtk_container_add (GTK_CONTAINER (content), label); + gtk_widget_show_all (dialog); + gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_ACCEPT); 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) +static gboolean on_delete(GtkWidget* w, gpointer data) { + /* Make sure to flush any modified dive data */ + update_dive(NULL); + if (unsaved_changes()) ask_save_changes(); + + return FALSE; /* go ahead, kill the program, we're good now */ +} + +static void on_destroy(GtkWidget* w, gpointer data) +{ gtk_main_quit(); } static void quit(GtkWidget *w, gpointer data) { + /* Make sure to flush any modified dive data */ + update_dive(NULL); + + if (unsaved_changes()) + ask_save_changes(); gtk_main_quit(); } @@ -405,6 +423,7 @@ void init_ui(int argc, char **argv) error_info_bar = NULL; win = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_icon_from_file(GTK_WINDOW(win), "icon.svg", NULL); + g_signal_connect(G_OBJECT(win), "delete-event", G_CALLBACK (on_delete), NULL); g_signal_connect(G_OBJECT(win), "destroy", G_CALLBACK(on_destroy), NULL); main_window = win;