Implemented an additional confirmation dialog

This commit is contained in:
Pierre Pronchery 2013-11-07 01:52:07 +01:00
parent df3825f368
commit 85f69039c3
2 changed files with 42 additions and 1 deletions

View File

@ -16,6 +16,7 @@ static char const _license[] =
"along with this program. If not, see <http://www.gnu.org/licenses/>.\n";
#include <stdarg.h>
#include <stdio.h>
#include <libintl.h>
#include <gtk/gtk.h>
@ -429,13 +430,52 @@ static gboolean _about_on_closex(gpointer data)
/* presenter_close */
int presenter_close(Presenter * presenter)
{
/* FIXME check for unsaved changes */
int res;
/* FIXME really check for unsaved changes */
res = presenter_confirm(presenter, _("There are unsaved changes.\n"
"Discard or save them?"),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_DISCARD, GTK_RESPONSE_REJECT,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL);
if(res == GTK_RESPONSE_CANCEL || res == GTK_RESPONSE_DELETE_EVENT)
return 1;
else if(res == GTK_RESPONSE_ACCEPT && presenter_save(presenter) != TRUE)
return 1;
gtk_widget_hide(presenter->window);
gtk_main_quit();
return 0;
}
/* presenter_confirm */
int presenter_confirm(Presenter * presenter, char const * message, ...)
{
GtkWidget * dialog;
va_list ap;
char const * action;
int res;
dialog = gtk_message_dialog_new(GTK_WINDOW(presenter->window),
GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
#if GTK_CHECK_VERSION(2, 6, 0)
"%s", _("Question"));
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
#endif
"%s", message);
va_start(ap, message);
while((action = va_arg(ap, char const *)) != NULL)
gtk_dialog_add_button(GTK_DIALOG(dialog),
action, va_arg(ap, int));
va_end(ap);
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
res = gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
return res;
}
/* presenter_error */
int presenter_error(Presenter * presenter, char const * message, int ret)
{

View File

@ -32,6 +32,7 @@ void presenter_delete(Presenter * presenter);
int presenter_set_monitor(Presenter * presenter, int monitor);
/* useful */
int presenter_confirm(Presenter * presenter, char const * message, ...);
int presenter_error(Presenter * presenter, char const * message, int ret);
int presenter_close(Presenter * presenter);