Set the filename on loading a new file
[pspp-builds.git] / src / ui / gui / psppire-data-window.c
index 90e749d318af0bab38a7c7f42450e88fe16b2a10..1afa9e6c70840c4cd7fde949f0ee4b8cdbdd8b16 100644 (file)
@@ -100,19 +100,15 @@ psppire_data_window_get_type (void)
   return psppire_data_window_type;
 }
 
+static GObjectClass *parent_class ;
 
 static void
 psppire_data_window_finalize (GObject *object)
 {
   PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (object);
 
-  GObjectClass *class = G_OBJECT_GET_CLASS (object);
-
-  GObjectClass *parent_class = g_type_class_peek_parent (class);
-
   g_object_unref (de->xml);
 
-
   if (G_OBJECT_CLASS (parent_class)->finalize)
     (*G_OBJECT_CLASS (parent_class)->finalize) (object);
 }
@@ -121,6 +117,7 @@ psppire_data_window_finalize (GObject *object)
 static void
 psppire_data_window_class_init (PsppireDataWindowClass *class)
 {
+  parent_class = g_type_class_peek_parent (class);
 }
 
 
@@ -322,8 +319,9 @@ add_most_recent (const char *file_name)
 #endif
 }
 
-static void
-open_data_file (const gchar *file_name, PsppireDataWindow *de)
+void
+psppire_data_window_load_file (PsppireDataWindow *de,
+                                   const gchar *file_name)
 {
   struct getl_interface *sss;
   struct string filename;
@@ -340,6 +338,10 @@ open_data_file (const gchar *file_name, PsppireDataWindow *de)
     psppire_window_set_filename (PSPPIRE_WINDOW (de), file_name);
     add_most_recent (file_name);
   }
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
+  free (de->file_name);
+  de->file_name = g_strdup (file_name);
 }
 
 
@@ -390,7 +392,7 @@ open_data_dialog (GtkAction *action, PsppireDataWindow *de)
        de->file_name =
          gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
 
-       open_data_file (de->file_name, de);
+       psppire_data_window_load_file (de, de->file_name);
       }
       break;
     default:
@@ -457,6 +459,8 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
+
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -561,7 +565,7 @@ data_save_as_dialog (GtkAction *action, PsppireDataWindow *de)
 static void
 data_save (GtkAction *action, PsppireDataWindow *de)
 {
-  if ( de->file_name)
+  if (de->file_name)
     save_file (de);
   else
     data_save_as_dialog (action, de);
@@ -919,7 +923,7 @@ on_recent_data_select (GtkMenuShell *menushell,   gpointer user_data)
 
   g_free (uri);
 
-  open_data_file (file, de);
+  psppire_data_window_load_file (de, file);
 
   g_free (file);
 }
@@ -1003,7 +1007,11 @@ on_switch_sheet (GtkNotebook *notebook,
 }
 
 
-
+static void
+set_unsaved (gpointer w)
+{
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (w), TRUE);
+}
 
 static void
 psppire_data_window_init (PsppireDataWindow *de)
@@ -1024,6 +1032,17 @@ psppire_data_window_init (PsppireDataWindow *de)
   de->data_editor =
     PSPPIRE_DATA_EDITOR (psppire_data_editor_new (the_var_store, the_data_store));
 
+  g_signal_connect_swapped (the_data_store, "case-changed",
+                   G_CALLBACK (set_unsaved), de);
+
+  g_signal_connect_swapped (the_data_store, "case-inserted",
+                   G_CALLBACK (set_unsaved), de);
+
+  g_signal_connect_swapped (the_data_store, "cases-deleted",
+                   G_CALLBACK (set_unsaved), de);
+
+  dataset_set_callback (the_dataset, set_unsaved, de);
+
   connect_help (de->xml);
 
   g_object_ref (menubar);
@@ -1714,7 +1733,7 @@ GtkWidget*
 psppire_data_window_new (void)
 {
   return GTK_WIDGET (g_object_new (psppire_data_window_get_type (),
-                                  "usage", PSPPIRE_WINDOW_USAGE_DATA,
+                                  "description", _("Data Editor"),
                                   NULL));
 }