[gnumeric] global names: fix dependency problem.



commit ac07a967048f8a4914b805ef0a751cc3f5a2fb83
Author: Morten Welinder <terra gnome org>
Date:   Sat May 2 21:43:50 2009 -0400

    global names: fix dependency problem.
---
 src/expr-name.c |   25 +++++++++++++++++++++----
 1 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/expr-name.c b/src/expr-name.c
index 98f1595..e412e3b 100644
--- a/src/expr-name.c
+++ b/src/expr-name.c
@@ -319,12 +319,29 @@ static void
 expr_name_handle_references (GnmNamedExpr *nexpr, gboolean add)
 {
 	GSList *sheets, *ptr;
-	Sheet *base_sheet = nexpr->pos.sheet;
 
 	sheets = gnm_expr_top_referenced_sheets (nexpr->texpr);
-	if (g_slist_find (sheets, NULL) &&
-	    !g_slist_find (sheets, base_sheet))
-		sheets = g_slist_prepend (sheets, base_sheet);
+	if (g_slist_find (sheets, NULL)) {
+		/* The value has a sheet-less references.  */
+		Sheet *base_sheet = nexpr->pos.sheet;
+		if (base_sheet) {
+			if (!g_slist_find (sheets, base_sheet))
+				sheets = g_slist_prepend (sheets, base_sheet);
+		} else {
+			/*
+			 * A global name.  Might reference any sheet in the
+			 * workbook it is defined.  FIXME: What if we add
+			 * sheets later?
+			 */
+			GSList *l, *wb_sheets = workbook_sheets (nexpr->pos.wb);
+			for (l = wb_sheets; l; l = l->next) {
+				Sheet *sheet = l->data;
+				if (!g_slist_find (sheets, sheet))
+					sheets = g_slist_prepend (sheets, sheet);
+			}
+			g_slist_free (wb_sheets);
+		}
+	}
 
 	for (ptr = sheets ; ptr != NULL ; ptr = ptr->next) {
 		Sheet *sheet = ptr->data;



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