gtk3 - adapted draw routine to gtk_cairo_should_draw_window. gtk-criticals with undef...
[pspp] / src / ui / gui / pspp-sheet-view.c
index 7c80ec0c0284938e0d356d283a01e43e395b780e..d13d995efd3547c5a2825120894a9a630a691dfc 100644 (file)
@@ -3856,9 +3856,9 @@ pspp_sheet_view_draw_vertical_grid_lines (PsppSheetView    *tree_view,
  * KEEP IN SYNC WITH pspp_sheet_view_create_row_drag_icon()!
  * FIXME: It's not...
  */
-static gboolean
-pspp_sheet_view_bin_expose (GtkWidget      *widget,
-                           cairo_t *cr)
+static void
+pspp_sheet_view_draw_bin (GtkWidget      *widget,
+                         cairo_t *cr)
 {
   PsppSheetView *tree_view = PSPP_SHEET_VIEW (widget);
   GtkTreePath *path;
@@ -3894,6 +3894,9 @@ pspp_sheet_view_bin_expose (GtkWidget      *widget,
   GtkAllocation allocation;
   gtk_widget_get_allocation (widget, &allocation);
 
+  GdkRectangle exposed_rect;
+  gdk_cairo_get_clip_rectangle (cr, &exposed_rect);
+  
   Zarea.x =      0;
   Zarea.y =      0;
   Zarea.height = allocation.height;
@@ -3911,13 +3914,13 @@ pspp_sheet_view_bin_expose (GtkWidget      *widget,
   if (tree_view->priv->row_count == 0)
     {
       draw_empty_focus (tree_view);
-      return TRUE;
+      return;
     }
 
 #if GTK3_TRANSITION
   /* clip event->area to the visible area */
   if (Zarea.height < 0.5)
-    return TRUE;
+    return;
 #endif
 
   validate_visible_area (tree_view);
@@ -3948,7 +3951,7 @@ pspp_sheet_view_bin_expose (GtkWidget      *widget,
     }
 
   if (node < 0)
-    return TRUE;
+    return;
 
   /* find the path for the node */
   path = _pspp_sheet_view_find_path ((PsppSheetView *)widget, node);
@@ -4131,11 +4134,14 @@ pspp_sheet_view_bin_expose (GtkWidget      *widget,
 
 #if GTK3_TRANSITION
          if (gdk_region_rect_in (event->region, &background_area) == GDK_OVERLAP_RECTANGLE_OUT)
+#else
+         if (!gdk_rectangle_intersect (&background_area, &exposed_rect, NULL))
+#endif
            {
              cell_offset += column->width;
              continue;
            }
-#endif
+
 
          pspp_sheet_view_column_cell_set_cell_data (column,
                                                      tree_view->priv->model,
@@ -4435,7 +4441,7 @@ pspp_sheet_view_bin_expose (GtkWidget      *widget,
               done = TRUE;
 
               /* Sanity Check! */
-              TREE_VIEW_INTERNAL_ASSERT (has_next, FALSE);
+              TREE_VIEW_INTERNAL_ASSERT_VOID (has_next);
             }
           else
             goto done;
@@ -4471,7 +4477,7 @@ done:
   if (drag_dest_path)
     gtk_tree_path_free (drag_dest_path);
 
-  return FALSE;
+  return;
 }
 
 
@@ -4483,12 +4489,11 @@ pspp_sheet_view_draw (GtkWidget      *widget,
   
   if (gtk_cairo_should_draw_window (cr, tree_view->priv->bin_window))
     {
-      gboolean retval;
       GList *tmp_list;
 
       cairo_save (cr);
       gtk_cairo_transform_to_window(cr,widget,tree_view->priv->bin_window);
-      retval = pspp_sheet_view_bin_expose (widget, cr);
+      pspp_sheet_view_draw_bin (widget, cr);
       cairo_restore (cr);
 
       /* We can't just chain up to Container::expose as it will try to send the
@@ -4503,10 +4508,8 @@ pspp_sheet_view_draw (GtkWidget      *widget,
 
          gtk_container_propagate_draw (GTK_CONTAINER (tree_view), child->widget, cr);
        }
-
-      return retval;
     }
-  else if (gtk_cairo_should_draw_window (cr, tree_view->priv->header_window))
+  if (gtk_cairo_should_draw_window (cr, tree_view->priv->header_window))
     {
       gint n_visible_columns;
       GList *list;
@@ -4541,16 +4544,13 @@ pspp_sheet_view_draw (GtkWidget      *widget,
                                                0,
                                                TREE_VIEW_HEADER_HEIGHT (tree_view));
       cairo_restore (cr);
-
-      return TRUE;
     }
-  else if (gtk_cairo_should_draw_window (cr, tree_view->priv->drag_window))
+  if (tree_view->priv->drag_window &&
+      gtk_cairo_should_draw_window (cr, tree_view->priv->drag_window))
     {
       gtk_container_propagate_draw (GTK_CONTAINER (tree_view),
                                    tree_view->priv->drag_column->button,
                                    cr);
-     
-      return TRUE;
     }
 
   return FALSE;