diff --git a/gnucash/gnome/gnc-budget-view.c b/gnucash/gnome/gnc-budget-view.c index 1d464cf1b8..6ff9e8b988 100644 --- a/gnucash/gnome/gnc-budget-view.c +++ b/gnucash/gnome/gnc-budget-view.c @@ -322,6 +322,26 @@ gbv_totals_scrollbar_value_changed_cb (GtkAdjustment *adj, GncBudgetView* budget gtk_adjustment_set_value (priv->hadj, gtk_adjustment_get_value (adj)); } +static gboolean +gbv_totals_tree_view_redraw_idle (GtkTreeView *view) +{ + gtk_widget_queue_draw (GTK_WIDGET(view)); + return FALSE; +} + +static void +gbv_tree_view_model_row_changed_cb (GtkTreeModel *tree_model, GtkTreePath *path, + GtkTreeIter *iter, gpointer user_data) +{ + GncBudgetView *budget_view = user_data; + GncBudgetViewPrivate *priv = GNC_BUDGET_VIEW_GET_PRIVATE(budget_view); + + // The model row-changed signal can be emmitted multiple times so we + // use an idle_add to do a redraw of the totals tree view once + g_idle_remove_by_data (priv->totals_tree_view); + g_idle_add ((GSourceFunc)gbv_totals_tree_view_redraw_idle, priv->totals_tree_view); +} + /**************************** * GncPluginPage Functions * ***************************/ @@ -470,6 +490,10 @@ gbv_create_widget (GncBudgetView *budget_view) gnc_tree_view_account_restore_filter (GNC_TREE_VIEW_ACCOUNT(priv->tree_view), priv->fd, gnc_state_get_current(), gnc_tree_view_get_state_section (GNC_TREE_VIEW(priv->tree_view))); + // use the model row-changed signal to do a redraw on the totals tree view + g_signal_connect (G_OBJECT(gtk_tree_view_get_model (GTK_TREE_VIEW(tree_view))), "row-changed", + G_CALLBACK(gbv_tree_view_model_row_changed_cb), budget_view); + gnc_budget_view_refresh (budget_view); }