[gnumeric] Conditional styles: fix update of triggered ranges.



commit 10070a44b3bc7ead749b96244c7ee4d82749245f
Author: Morten Welinder <terra gnome org>
Date:   Sat Dec 19 12:05:41 2020 -0500

    Conditional styles: fix update of triggered ranges.

 ChangeLog              |  9 +++++++++
 src/sheet-conditions.c |  8 +++++---
 src/sheet.c            | 23 +++++++++++++++++++++++
 src/sheet.h            |  1 +
 4 files changed, 38 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 15d8e4f41..cf644122e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2020-12-19  Morten Welinder  <terra gnome org>
+
+       * src/sheet.c (sheet_range_unrender): New function.
+
+       * src/sheet-conditions.c (csgd_changed): Force rerendering of
+       cells.
+       (collect_group_deps_rr): Improve the deduced dependency range for
+       semi-absolute references.
+
 2020-12-18  Morten Welinder  <terra gnome org>
 
        * src/sheet-conditions.c (update_group): Fix eval pos -- it's
diff --git a/src/sheet-conditions.c b/src/sheet-conditions.c
index 9dddd0986..efae6a63b 100644
--- a/src/sheet-conditions.c
+++ b/src/sheet-conditions.c
@@ -517,8 +517,10 @@ everything:
 
        // Ignore wrapping for now.
        rr2 = *rr;
-       rr2.b.col += W - 1;
-       rr2.b.row += H - 1;
+       if (rr->b.col_relative)
+               rr2.b.col += W - 1;
+       if (rr->b.row_relative)
+               rr2.b.row += H - 1;
 
        state->deps = gnm_expr_list_prepend
                (state->deps,
@@ -691,9 +693,9 @@ csgd_changed (GnmDependent *dep)
 
        for (ri = 0; ri < g->ranges->len; ri++) {
                GnmRange *r = &g_array_index (g->ranges, GnmRange, ri);
+               sheet_range_unrender (sheet, r);
                // FIXME:
                // sheet_range_calc_spans ???
-               // or other unrender
                sheet_queue_redraw_range (sheet, r);
        }
 
diff --git a/src/sheet.c b/src/sheet.c
index a0701b744..1b3ebf56a 100644
--- a/src/sheet.c
+++ b/src/sheet.c
@@ -369,6 +369,29 @@ cb_clear_rendered_cells (G_GNUC_UNUSED gpointer ignored, GnmCell *cell)
        }
 }
 
+/**
+ * sheet_range_unrender:
+ * @sheet: sheet to change
+ * @r: (nullable): range to unrender
+ *
+ * Unrenders all cells in the given range.  If @r is %NULL, the all cells
+ * in the sheet are unrendered.
+ */
+void
+sheet_range_unrender (Sheet *sheet, GnmRange const *r)
+{
+       GPtrArray *cells = sheet_cells (sheet, r);
+       unsigned ui;
+
+       for (ui = 0; ui < cells->len; ui++) {
+               GnmCell *cell = g_ptr_array_index (cells, ui);
+               gnm_cell_unrender (cell);
+       }
+
+       g_ptr_array_unref (cells);
+}
+
+
 static void
 sheet_scale_changed (Sheet *sheet, gboolean cols_rescaled, gboolean rows_rescaled)
 {
diff --git a/src/sheet.h b/src/sheet.h
index 00693245f..19e913491 100644
--- a/src/sheet.h
+++ b/src/sheet.h
@@ -184,6 +184,7 @@ GPtrArray  *sheet_cell_positions (Sheet *sheet, gboolean comments);
 GPtrArray  *sheet_cells          (Sheet *sheet, const GnmRange *r);
 
 void        sheet_recompute_spans_for_col     (Sheet *sheet, int col);
+void        sheet_range_unrender (Sheet *sheet, GnmRange const *r);
 
 gboolean    sheet_is_region_empty            (Sheet *sheet, GnmRange const *r);
 gboolean    sheet_is_cell_empty                      (Sheet *sheet, int col, int row);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]