From: John Darrington Date: Tue, 1 Mar 2016 05:24:54 +0000 (+0100) Subject: Speed up rendering of columns in sheet. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=81f50c24cae1f7b007c38b763c06ccc766333c81 Speed up rendering of columns in sheet. 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 --- diff --git a/src/ui/gui/pspp-sheet-private.h b/src/ui/gui/pspp-sheet-private.h index 508e78fb0f..a19c7c5b78 100644 --- a/src/ui/gui/pspp-sheet-private.h +++ b/src/ui/gui/pspp-sheet-private.h @@ -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__ diff --git a/src/ui/gui/pspp-sheet-view-column.c b/src/ui/gui/pspp-sheet-view-column.c index 2cab76b809..92b0b0e4c5 100644 --- a/src/ui/gui/pspp-sheet-view-column.c +++ b/src/ui/gui/pspp-sheet-view-column.c @@ -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); } diff --git a/src/ui/gui/pspp-sheet-view.c b/src/ui/gui/pspp-sheet-view.c index fe705048bb..13f05ebf4f 100644 --- a/src/ui/gui/pspp-sheet-view.c +++ b/src/ui/gui/pspp-sheet-view.c @@ -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 */