Merge "master" into "psppsheet" to obtain bug fixes from "master".
authorBen Pfaff <blp@cs.stanford.edu>
Wed, 11 Jul 2012 04:48:01 +0000 (21:48 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Wed, 11 Jul 2012 04:48:01 +0000 (21:48 -0700)
src/output/cairo.c
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-window-base.c

index 6229311aa75003988fdc2ae39bcec48a253c370a..a98df2e6c18bc1d59a4cb4033879fec09b905242 100644 (file)
@@ -204,6 +204,8 @@ parse_color (struct output_driver *d, struct string_map *options,
        }
     }
 
+  free (string);
+
   /* Convert 16 bit ints to float */
   *dred = red / (double) 0xFFFF;
   *dgreen = green / (double) 0xFFFF;
index 204c8f1c849d68abed8cd4e6dee7d0c89fd4d278..ad967b3256c7578860236c8eed1e79cf9d2bbf1f 100644 (file)
@@ -78,6 +78,7 @@ static void psppire_data_window_init          (PsppireDataWindow      *data_edit
 static void psppire_data_window_iface_init (PsppireWindowIface *iface);
 
 static void psppire_data_window_dispose (GObject *object);
+static void psppire_data_window_finalize (GObject *object);
 static void psppire_data_window_set_property (GObject         *object,
                                               guint            prop_id,
                                               const GValue    *value,
@@ -145,6 +146,7 @@ psppire_data_window_class_init (PsppireDataWindowClass *class)
   parent_class = g_type_class_peek_parent (class);
 
   object_class->dispose = psppire_data_window_dispose;
+  object_class->finalize = psppire_data_window_finalize;
   object_class->set_property = psppire_data_window_set_property;
   object_class->get_property = psppire_data_window_get_property;
 
@@ -1088,6 +1090,27 @@ psppire_data_window_dispose (GObject *object)
     G_OBJECT_CLASS (parent_class)->dispose (object);
 }
 
+static void
+psppire_data_window_finalize (GObject *object)
+{
+  PsppireDataWindow *dw = PSPPIRE_DATA_WINDOW (object);
+
+  if (dw->dataset)
+    {
+      struct dataset *dataset = dw->dataset;
+      struct session *session = dataset_session (dataset);
+
+      dw->dataset = NULL;
+
+      dataset_set_callbacks (dataset, NULL, NULL);
+      session_set_active_dataset (session, NULL);
+      dataset_destroy (dataset);
+    }
+
+  if (G_OBJECT_CLASS (parent_class)->finalize)
+    G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
 static void
 psppire_data_window_set_property (GObject         *object,
                                   guint            prop_id,
index 29c0fd7a5851e6119b12b52ad3c6d227b72ab63d..a9f73535dfd460b534f05bcf7cacb0063526f4cb 100644 (file)
@@ -46,10 +46,7 @@ G_DEFINE_ABSTRACT_TYPE (PsppireWindowBase, psppire_window_base, GTK_TYPE_WINDOW)
 static const char *
 get_window_id (GtkWidget *wb)
 {
-  const gchar *name = NULL;
-      
-  g_object_get (wb, "name", &name, NULL);
-
+  const gchar *name = gtk_widget_get_name (wb);
   if (NULL == name || 0 == strcmp ("", name))
     name = G_OBJECT_TYPE_NAME (wb);