From: Ben Pfaff <blp@cs.stanford.edu>
Date: Fri, 10 Jan 2020 05:53:54 +0000 (+0000)
Subject: psppire-output-window: Avoid calling gdk_window_begin_draw_frame twice.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5144f3be8f6220bc40613322e1e213e3093acadd;p=pspp

psppire-output-window: Avoid calling gdk_window_begin_draw_frame twice.

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.
---

diff --git a/src/ui/gui/psppire-output-view.c b/src/ui/gui/psppire-output-view.c
index b90c7d7637..b7d2c2074c 100644
--- a/src/ui/gui/psppire-output-view.c
+++ b/src/ui/gui/psppire-output-view.c
@@ -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;