From 068de05bfe604be436b772c7f94e7c058463a371 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 3 Sep 2006 14:18:24 +0000 Subject: [PATCH] Added confirmation dialog while closing window --- src/editor.c | 27 ++++++++++++++++++++------- src/editor.h | 1 - 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/editor.c b/src/editor.c index 90cd167..fca1dc9 100644 --- a/src/editor.c +++ b/src/editor.c @@ -89,7 +89,6 @@ Editor * editor_new(void) if((editor = malloc(sizeof(*editor))) == NULL) return NULL; editor->filename = NULL; - editor->saved = 1; /* widgets */ editor->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(editor->window), 512, 384); @@ -528,13 +527,26 @@ void editor_delete(Editor * editor) /* useful */ gboolean editor_close(Editor * editor) { - if(editor->saved) + GtkWidget * dialog; + int ret; + + if(gtk_text_buffer_get_modified(gtk_text_view_get_buffer(GTK_TEXT_VIEW( + editor->view))) == FALSE) { gtk_main_quit(); return FALSE; } - /* FIXME dialog for confirmation */ - return TRUE; + dialog = gtk_message_dialog_new(GTK_WINDOW(editor->window), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, "%s", + "Changes are not saved." + " Are you sure you want to close?"); + ret = gtk_dialog_run(dialog); + gtk_widget_destroy(dialog); + if(ret == GTK_RESPONSE_NO) + return TRUE; + gtk_main_quit(); + return FALSE; } @@ -569,15 +581,16 @@ void editor_open_dialog(Editor * editor) { GtkWidget * dialog; int ret; - char * filename; + char * filename = NULL; dialog = gtk_file_chooser_dialog_new("Open file...", GTK_WINDOW(editor->window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, 1, GTK_STOCK_OPEN, 0, NULL); - if((ret = gtk_dialog_run(GTK_DIALOG(dialog))) == 0) + if((ret = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_ACCEPT) filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER( dialog)); gtk_widget_destroy(dialog); - editor_open(editor, filename); + if(filename != NULL) + editor_open(editor, filename); } diff --git a/src/editor.h b/src/editor.h index 8bcb5b2..b90e33d 100644 --- a/src/editor.h +++ b/src/editor.h @@ -12,7 +12,6 @@ typedef struct _Editor { char * filename; - int saved; /* widgets */ GtkWidget * window; GtkWidget * view;