psppire-output-window: Avoid calling gdk_window_begin_draw_frame twice.
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 10 Jan 2020 05:53:54 +0000 (05:53 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 10 Jan 2020 05:53:54 +0000 (05:53 +0000)
gdk_window_begin_draw_frame() and gdk_window_end_draw_frame() have to
be paired and not recursive, but this code didn't honor that.

Thanks to Harry Thijssen and John Darrington for pointing out the
issue.

src/ui/gui/psppire-output-view.c

index b90c7d76373efa4eeb3b7832f468074928464987..b7d2c2074c48beffa135b057412e8d331772861e 100644 (file)
@@ -224,13 +224,14 @@ rerender (struct psppire_output_view *view)
   if (!view->n_items || ! gdkw)
     return;
 
+  if (view->xr == NULL)
+    create_xr (view);
+
   GdkWindow *win = gtk_layout_get_bin_window (view->output);
   cairo_region_t *region = gdk_window_get_visible_region (win);
   GdkDrawingContext *ctx =  gdk_window_begin_draw_frame (win, region);
   cairo_t *cr = gdk_drawing_context_get_cairo_context (ctx);
 
-  if (view->xr == NULL)
-    create_xr (view);
   view->y = 0;
   view->max_width = 0;
   for (item = view->items; item < &view->items[view->n_items]; item++)
@@ -343,13 +344,13 @@ psppire_output_view_put (struct psppire_output_view *view,
     {
       view_item->drawing_area = drawing_area = gtk_drawing_area_new ();
 
+      if (view->xr == NULL)
+        create_xr (view);
+
       cairo_region_t *region = gdk_window_get_visible_region (win);
       GdkDrawingContext *ctx = gdk_window_begin_draw_frame (win, region);
       cairo_t *cr = gdk_drawing_context_get_cairo_context (ctx);
 
-      if (view->xr == NULL)
-        create_xr (view);
-
       if (view->y > 0)
         view->y += view->font_height / 2;