X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-window.c;h=6945914a5e294aec189f3ff521b923c1483b3826;hb=12fc15c56844de1492c4ee31cbb12a54b37cfc2e;hp=45cd66c1308299e57c84e128b856fa2826afabd3;hpb=57f8d4d2612512761fbdd49f1dbd0dc313a8d257;p=pspp-builds.git diff --git a/src/ui/gui/psppire-window.c b/src/ui/gui/psppire-window.c index 45cd66c1..6945914a 100644 --- a/src/ui/gui/psppire-window.c +++ b/src/ui/gui/psppire-window.c @@ -16,6 +16,8 @@ #include +#include +#include #include #include #include @@ -345,6 +347,22 @@ insert_existing_items (PsppireWindow *window) psppire_window_register_foreach (psppire_window_register_new (), insert_item, window); } + +static gboolean +on_delete (GtkWidget *w, GdkEvent *event, gpointer user_data) +{ + PsppireWindow *dw = PSPPIRE_WINDOW (user_data); + + PsppireWindowRegister *reg = psppire_window_register_new (); + + + if ( 1 == psppire_window_register_n_items (reg)) + gtk_main_quit (); + + return FALSE; +} + + static void psppire_window_init (PsppireWindow *window) { @@ -367,6 +385,64 @@ psppire_window_init (PsppireWindow *window) window); window->unsaved = FALSE; + + g_signal_connect (window, "delete-event", G_CALLBACK (on_delete), window); + + g_object_set (window, "icon-name", "psppicon", NULL); +} + + +/* If the buffer's modified flag is set, + ask the user if the buffer should be saved. + Return TRUE if is should. +*/ +gboolean +psppire_window_query_save (PsppireWindow *se) +{ + gint response; + GtkWidget *dialog; + + const gchar *description; + const gchar *filename = psppire_window_get_filename (se); + + if ( ! psppire_window_get_unsaved (se)) + return FALSE; + + g_object_get (se, "description", &description, NULL); + + g_return_val_if_fail (filename != NULL, FALSE); + + dialog = + gtk_message_dialog_new (GTK_WINDOW (se), + GTK_DIALOG_MODAL, + GTK_MESSAGE_QUESTION, + GTK_BUTTONS_NONE, + _("Save contents of %s to \"%s\"?"), + description, + filename); + + gtk_dialog_add_button (GTK_DIALOG (dialog), + GTK_STOCK_YES, + GTK_RESPONSE_ACCEPT); + + gtk_dialog_add_button (GTK_DIALOG (dialog), + GTK_STOCK_NO, + GTK_RESPONSE_REJECT); + + gtk_dialog_add_button (GTK_DIALOG (dialog), + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + gtk_widget_destroy (dialog); + + if ( response == GTK_RESPONSE_ACCEPT ) + { + return TRUE; + } + + return FALSE; } @@ -393,6 +469,13 @@ psppire_window_set_unsaved (PsppireWindow *w, gboolean unsaved) psppire_window_set_title (w); } +gboolean +psppire_window_get_unsaved (PsppireWindow *w) +{ + return w->unsaved; +} + +