[gnumeric] Managed dependents: allow resetting sheet
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Managed dependents: allow resetting sheet
- Date: Sun, 1 Jan 2012 20:31:48 +0000 (UTC)
commit dce31edfde7a2fdd27d2c3c3b61551e78752e357
Author: Morten Welinder <terra gnome org>
Date: Sun Jan 1 15:28:25 2012 -0500
Managed dependents: allow resetting sheet
ChangeLog | 5 +++++
src/dependent.c | 24 ++++++++++++++++++++++++
src/dependent.h | 1 +
3 files changed, 30 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 884a1fd..9796f34 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-01 Morten Welinder <terra gnome org>
+
+ * src/dependent.c (dependent_managed_set_sheet): New function for
+ this mildly complicated operation.
+
2011-12-31 Morten Welinder <terra gnome org>
* src/wbc-gtk.c (wbc_gtk_create_status_area): Beat the auto
diff --git a/src/dependent.c b/src/dependent.c
index 6cabd51..abbcbde 100644
--- a/src/dependent.c
+++ b/src/dependent.c
@@ -1253,11 +1253,35 @@ dependent_managed_init (GnmDependent *dep, Sheet *sheet)
void
dependent_managed_set_expr (GnmDependent *dep, GnmExprTop const *texpr)
{
+ g_return_if_fail (dep != NULL);
+ g_return_if_fail (dependent_type (dep) == DEPENDENT_MANAGED);
+
dependent_set_expr (dep, texpr);
if (texpr && dep->sheet)
dependent_link (dep);
}
+void
+dependent_managed_set_sheet (GnmDependent *dep, Sheet *sheet)
+{
+ GnmExprTop const *texpr;
+
+ g_return_if_fail (dep != NULL);
+ g_return_if_fail (dependent_type (dep) == DEPENDENT_MANAGED);
+
+ if (dep->sheet == sheet)
+ return;
+
+ texpr = dep->texpr;
+ if (texpr) gnm_expr_top_ref (texpr);
+ dependent_set_expr (dep, NULL);
+ /* We're now unlinked from everything. */
+ if (dep->sheet) g_object_unref (dep->sheet);
+ dep->sheet = sheet ? g_object_ref (sheet) : NULL;
+ dependent_managed_set_expr (dep, texpr);
+ if (texpr) gnm_expr_top_unref (texpr);
+}
+
static void
managed_dep_eval (G_GNUC_UNUSED GnmDependent *dep)
{
diff --git a/src/dependent.h b/src/dependent.h
index 78da677..54e7288 100644
--- a/src/dependent.h
+++ b/src/dependent.h
@@ -116,6 +116,7 @@ void gnm_dep_container_resize (GnmDepContainer *deps, int rows);
void dependent_managed_init (GnmDependent *dep, Sheet *sheet);
void dependent_managed_set_expr (GnmDependent *dep, GnmExprTop const *texpr);
+void dependent_managed_set_sheet (GnmDependent *dep, Sheet *sheet);
#define DEPENDENT_CONTAINER_FOREACH_DEPENDENT(dc, dep, code) \
do { \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]