Speed up rendering of columns in sheet.
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 1 Mar 2016 05:24:54 +0000 (06:24 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 1 Mar 2016 05:24:54 +0000 (06:24 +0100)
This change causes _pspp_sheet_view_install_mark_rows_col_dirty to be called once
per sheet, instead of once per column when adding/deleting columns.  Hence there
is a significant speed improvement when dealing with a data sheet with a large
number of variables.

Fixes bug #47090

src/ui/gui/pspp-sheet-private.h
src/ui/gui/pspp-sheet-view-column.c
src/ui/gui/pspp-sheet-view.c

index 508e78fb0f09a84fa40bb888bb0f86e2f5001d21..a19c7c5b783bf60bef8916a8616be49a091e86c8 100644 (file)
@@ -280,6 +280,9 @@ struct _PsppSheetViewPrivate
    * driving the scrollable adjustment values */
   guint hscroll_policy : 1;
   guint vscroll_policy : 1;
+
+  /* For optimisation of size allocate requests */
+  guint resized : 1;
  };
 
 #ifdef __GNUC__
index 2cab76b809316a21e5e83b42b8943f9b62b92436..92b0b0e4c5fae116787fa0576b45e468eba49c9f 100644 (file)
@@ -3997,8 +3997,10 @@ _pspp_sheet_view_column_cell_set_dirty (PsppSheetViewColumn *tree_column)
   tree_column->width = 0;
 
   if (tree_column->tree_view &&
+      PSPP_SHEET_VIEW (tree_column->tree_view)->priv->resized &&
       gtk_widget_get_realized (tree_column->tree_view))
     {
+      PSPP_SHEET_VIEW (tree_column->tree_view)->priv->resized = FALSE;
       _pspp_sheet_view_install_mark_rows_col_dirty (PSPP_SHEET_VIEW (tree_column->tree_view));
       gtk_widget_queue_resize (tree_column->tree_view);
     }
index fe705048bb3052479a068fe10df2a075deb95fff..13f05ebf4f1e31ce0f58db41bd7192ea6c0908ae 100644 (file)
@@ -2113,6 +2113,8 @@ pspp_sheet_view_size_allocate (GtkWidget     *widget,
        }
       update_childrens_allocation(tree_view);
     }
+
+  tree_view->priv->resized = TRUE;
 }
 
 /* Grabs the focus and unsets the PSPP_SHEET_VIEW_DRAW_KEYFOCUS flag */