[gnumeric] Sheet styles: fix style confusion caused by auto-colours.



commit 2c75417ec814c2abb73ee49aa741df08fe134a22
Author: Morten Welinder <terra gnome org>
Date:   Tue Jun 9 09:09:34 2009 -0400

    Sheet styles: fix style confusion caused by auto-colours.
---
 ChangeLog         |    3 +++
 src/sheet-style.c |   18 ++++++++++++++++++
 2 files changed, 21 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 159e5fa..e6bbfa7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2009-06-09  Morten Welinder  <terra gnome org>
 
+	* src/sheet-style.c (sheet_style_find): Keep style hash entries
+	unique.  Fixes #585178.
+
 	* src/mstyle.c (gnm_style_dup): Copy pango_attrs_zoom too.
 
 2009-06-09 Andreas J. Guelzow <aguelzow pyrshep ca>
diff --git a/src/sheet-style.c b/src/sheet-style.c
index a1c0049..a372c6b 100644
--- a/src/sheet-style.c
+++ b/src/sheet-style.c
@@ -81,6 +81,23 @@ sheet_style_find (Sheet const *sheet, GnmStyle *s)
 	}
 
 	s = gnm_style_link_sheet (s, (Sheet *)sheet);
+
+	/* Retry the lookup in case "s" changed.  See #585178.  */
+	res = g_hash_table_lookup (sheet->style_data->style_hash, s);
+	if (res != NULL) {
+		gnm_style_link (res);
+		/*
+		 * We are abandoning the linking here.  We cannot use
+		 * gnm_style_unlink as that would call sheet_style_unlink
+		 * and thus remove "res" from the hash.
+		 */
+		s->link_count = 0;
+		s->linked_sheet = NULL;
+		gnm_style_unref (s);
+
+		return res;
+	}
+
 	g_hash_table_insert (sheet->style_data->style_hash, s, s);
 	return s;
 }
@@ -2732,6 +2749,7 @@ cell_tile_optimize (CellTile **tile, int level, CellTileOptimize *data,
 			    range_width (&rng), range_height (&rng),
 			    tile_type_str[(*tile)->type],
 			    tile_type_str[type]);
+
 	res = cell_tile_style_new (NULL, type);
 	switch (type) {
 	case TILE_SIMPLE:



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