Better abstraction of the unsaved window status.
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 7 Mar 2009 08:54:16 +0000 (17:54 +0900)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 7 Mar 2009 08:54:16 +0000 (17:54 +0900)
Implementations can now only set unsaved to true.
Only the abstract base class can set it to false,
which it does when the window is saved.

src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-window.c
src/ui/gui/psppire-window.h

index 7565dbb4b7ca223c434e6527701a762b5c14af7c..4543dc72dcdb092c0f7c653f8e263732bbb06d86 100644 (file)
@@ -485,8 +485,6 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
-
-  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -1016,7 +1014,7 @@ resolve_action (GtkBuilder *builder, const gchar *action, const gchar *proxy)
 static void
 set_unsaved (gpointer w)
 {
-  psppire_window_set_unsaved (PSPPIRE_WINDOW (w), TRUE);
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (w));
 }
 
 static void
index 86d87bb92b22a4f7a5086215b8ba7e26eb8e4745..a5cc08aa93b9a711f84cca75894cef2b013b2ee4 100644 (file)
@@ -414,10 +414,10 @@ on_text_changed (GtkTextBuffer *buffer, PsppireSyntaxWindow *window)
 static void
 on_modified_changed (GtkTextBuffer *buffer, PsppireWindow *window)
 {
-  psppire_window_set_unsaved (window, gtk_text_buffer_get_modified (buffer));
+  if (gtk_text_buffer_get_modified (buffer))
+    psppire_window_set_unsaved (window);
 }
 
-
 extern struct source_stream *the_source_stream ;
 
 static void
index 576d3159deceb63bcc5be797607eb2ed8f0b6412..e03bd809ab03a97375c2a93f50f57cd6b4b5df6e 100644 (file)
@@ -97,7 +97,7 @@ psppire_window_set_title (PsppireWindow *window)
                   window->basename ? window->basename : "",
                   mdash, window->description);
 
-  if ( window->unsaved)
+  if (window->unsaved)
     g_string_prepend_c (title, '*');
 
   gtk_window_set_title (GTK_WINDOW (window), title->str);
@@ -496,9 +496,9 @@ psppire_window_set_filename (PsppireWindow *w, const gchar *filename)
 }
 
 void
-psppire_window_set_unsaved (PsppireWindow *w, gboolean unsaved)
+psppire_window_set_unsaved (PsppireWindow *w)
 {
-  w->unsaved = unsaved;
+  w->unsaved = TRUE;
 
   psppire_window_set_title (w);
 }
@@ -593,14 +593,17 @@ psppire_window_load (PsppireWindow *w, const gchar *file)
 
   g_return_val_if_fail (i->load, FALSE);
 
-  ok =  i->load (w, file);
+  ok = i->load (w, file);
 
   if ( ok )
-    add_most_recent (file, the_recent_mgr);
+    {
+      add_most_recent (file, the_recent_mgr);
+      w->unsaved = FALSE;
+    }
   else
     delete_recent (file, the_recent_mgr);
 
-  psppire_window_set_unsaved (w, FALSE);
+  psppire_window_set_title (w);
 
   return ok;
 }
index 71c06538587f9099bb2c908414e6c394273bd66f..c7025b355a3b2fe1f9e556f86fcf64e3071673c0 100644 (file)
@@ -100,7 +100,7 @@ void psppire_window_set_filename (PsppireWindow *w, const gchar *filename);
 
 void psppire_window_minimise_all (void);
 
-void psppire_window_set_unsaved (PsppireWindow *, gboolean );
+void psppire_window_set_unsaved (PsppireWindow *);
 
 gboolean psppire_window_get_unsaved (PsppireWindow *);