[gnumeric] ssdiff: fix checks for validations also.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] ssdiff: fix checks for validations also.
- Date: Fri, 17 Mar 2017 16:40:31 +0000 (UTC)
commit be1811aacd928b7438579e25222739a47ca3426a
Author: Morten Welinder <terra gnome org>
Date: Fri Mar 17 12:40:01 2017 -0400
ssdiff: fix checks for validations also.
ChangeLog | 2 ++
NEWS | 2 +-
src/hlink.c | 3 +++
src/mstyle.c | 16 +++++++++++-----
src/validation.c | 37 ++++++++++++++++++++++++++++++++++++-
src/validation.h | 5 ++++-
6 files changed, 57 insertions(+), 8 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index d5c6cde..f3371aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
2017-03-17 Morten Welinder <terra gnome org>
+ * src/validation.c (gnm_validation_equal): New function.
+
* src/mstyle.c (gnm_style_find_differences): New function.
* src/ssdiff.c (xml_style_changed): Use
diff --git a/NEWS b/NEWS
index dc494f2..9fd9032 100644
--- a/NEWS
+++ b/NEWS
@@ -16,7 +16,7 @@ Morten:
* Hyperlinks improvements. [#706671]
* Plug leaks.
* Fix issues with sheet-local names.
- * ssdiff improvements with hyperlinks.
+ * ssdiff improvements with hyperlinks and validations.
--------------------------------------------------------------------------
Gnumeric 1.12.33
diff --git a/src/hlink.c b/src/hlink.c
index 1d512a0..6d6bdee 100644
--- a/src/hlink.c
+++ b/src/hlink.c
@@ -241,6 +241,9 @@ gnm_hlink_equal (GnmHLink const *a, GnmHLink const *b, gboolean relax_sheet)
g_return_val_if_fail (GNM_IS_HLINK (a), NULL);
g_return_val_if_fail (GNM_IS_HLINK (b), NULL);
+ if (a == b)
+ return TRUE;
+
if (!relax_sheet && a->sheet != b->sheet)
return FALSE;
diff --git a/src/mstyle.c b/src/mstyle.c
index 1ca5455..2b93442 100644
--- a/src/mstyle.c
+++ b/src/mstyle.c
@@ -540,6 +540,14 @@ gnm_style_find_conflicts (GnmStyle *accum, GnmStyle const *overlay,
return conflicts;
}
+#define RELAX_CHECK(op_,field_,checker_) do { \
+ if (diffs & (1u << (op_)) && \
+ elem_is_set (a, (op_)) && \
+ elem_is_set (b, (op_)) && \
+ (checker_) (a->field_, b->field_, relax_sheet)) \
+ diffs &= ~(1u << (op_)); \
+ } while (0)
+
/**
* gnm_style_find_differences:
* @a: A #GnmStyle
@@ -566,11 +574,8 @@ gnm_style_find_differences (GnmStyle const *a, GnmStyle const *b,
}
if (relax_sheet) {
- if (a->hlink && b->hlink &&
- gnm_hlink_equal (a->hlink, b->hlink, relax_sheet))
- diffs &= ~(1u << MSTYLE_HLINK);
-
- // FIXME: Validations
+ RELAX_CHECK (MSTYLE_HLINK, hlink, gnm_hlink_equal);
+ RELAX_CHECK (MSTYLE_VALIDATION, validation, gnm_validation_equal);
// FIXME: Conditions
}
@@ -578,6 +583,7 @@ gnm_style_find_differences (GnmStyle const *a, GnmStyle const *b,
return diffs;
}
+#undef RELAX_CHECK
static inline void
gnm_style_clear_pango (GnmStyle *style)
diff --git a/src/validation.c b/src/validation.c
index c091636..2a1d285 100644
--- a/src/validation.c
+++ b/src/validation.c
@@ -326,6 +326,41 @@ gnm_validation_dup (GnmValidation *v)
return dst;
}
+gboolean
+gnm_validation_equal (GnmValidation const *a, GnmValidation const *b,
+ gboolean relax_sheet)
+{
+ int i;
+
+ g_return_val_if_fail (a != NULL, FALSE);
+ g_return_val_if_fail (b != NULL, FALSE);
+
+ if (a == b)
+ return TRUE;
+
+ if (!relax_sheet &&
+ gnm_validation_get_sheet (a) != gnm_validation_get_sheet (b))
+ return FALSE;
+
+ if (!(g_strcmp0 (a->title ? a->title->str : NULL,
+ b->title ? b->title->str : NULL) == 0 &&
+ g_strcmp0 (a->msg ? a->msg->str : NULL,
+ b->msg ? b->msg->str : NULL) == 0 &&
+ a->style == b->style &&
+ a->type == b->type &&
+ a->op == b->op &&
+ a->allow_blank == b->allow_blank &&
+ a->use_dropdown == b->use_dropdown))
+ return FALSE;
+
+ for (i = 0; i < 2; i++)
+ if (!gnm_expr_top_equal (a->deps[i].texpr, b->deps[i].texpr))
+ return FALSE;
+
+ return TRUE;
+}
+
+
void
gnm_validation_ref (GnmValidation const *v)
{
@@ -379,7 +414,7 @@ gnm_validation_get_type (void)
* Returns: (transfer none): the sheet.
**/
Sheet *
-gnm_validation_get_sheet (GnmValidation *v)
+gnm_validation_get_sheet (GnmValidation const *v)
{
g_return_val_if_fail (v != NULL, NULL);
return v->deps[0].sheet;
diff --git a/src/validation.h b/src/validation.h
index 9de7180..4ca58f5 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -75,6 +75,9 @@ GnmValidation *gnm_validation_new (ValidationStyle style,
gboolean allow_blank,
gboolean use_dropdown);
GnmValidation *gnm_validation_dup (GnmValidation *v);
+gboolean gnm_validation_equal (GnmValidation const *a,
+ GnmValidation const *b,
+ gboolean relax_sheet);
void gnm_validation_ref (GnmValidation const *v);
void gnm_validation_unref (GnmValidation const *v);
@@ -83,7 +86,7 @@ void gnm_validation_set_expr (GnmValidation *v,
GnmExprTop const *texpr, unsigned indx);
GError *gnm_validation_is_ok (GnmValidation const *v);
-Sheet *gnm_validation_get_sheet (GnmValidation *v);
+Sheet *gnm_validation_get_sheet (GnmValidation const *v);
void gnm_validation_set_sheet (GnmValidation *v, Sheet *sheet);
ValidationStatus gnm_validation_eval (WorkbookControl *wbc,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]