psppire-output-view: Fix memory leaks.
[pspp] / src / ui / gui / psppire-output-view.c
index 77fa537dce3a9004d8d859f245e116ff51cd5532..3bf124469ea577cf712995163d4756ad064499aa 100644 (file)
@@ -117,6 +117,13 @@ expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
   return TRUE;
 }
 
+static void
+free_rendering (gpointer rendering_)
+{
+  struct xr_rendering *rendering = rendering_;
+  xr_rendering_destroy (rendering);
+}
+
 void
 psppire_output_view_put (struct psppire_output_view *view,
                          const struct output_item *item)
@@ -209,7 +216,7 @@ psppire_output_view_put (struct psppire_output_view *view,
 
   drawing_area = gtk_drawing_area_new ();
 
-  g_object_set_data (G_OBJECT (drawing_area), "rendering", r);
+  g_object_set_data_full (G_OBJECT (drawing_area), "rendering", r, free_rendering);
   g_signal_connect (drawing_area, "realize",
                     G_CALLBACK (on_dwgarea_realize), view);
   g_signal_connect (drawing_area, "expose_event",
@@ -606,6 +613,8 @@ psppire_output_view_destroy (struct psppire_output_view *view)
   if (view->print_settings != NULL)
     g_object_unref (view->print_settings);
 
+  xr_driver_destroy (view->xr);
+
   free (view);
 }
 \f