From: buliabyak Date: Fri, 3 Feb 2006 03:01:53 +0000 (+0000) Subject: further fix: remember is paintservers were hreffed in a flag, fixes undo crash X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=6529eb258b97e0493e6a4a56a8915d410e95fa5f;p=inkscape.git further fix: remember is paintservers were hreffed in a flag, fixes undo crash --- diff --git a/src/style.cpp b/src/style.cpp index afaded2a1..9dd950361 100644 --- a/src/style.cpp +++ b/src/style.cpp @@ -389,6 +389,7 @@ sp_style_new() sp_style_clear(style); style->cloned = false; + style->hreffed = false; return style; } @@ -2000,6 +2001,7 @@ sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent) paint->value.paint.uri = parent->value.paint.uri; if (paint->value.paint.server) { if (style->object && !style->cloned) { // href paintserver for style of non-clones only + style->hreffed = true; sp_object_href(SP_OBJECT(paint->value.paint.server), style); } if (style->object || style->cloned) { // connect to signals for style of real objects or clones (this excludes temp styles) @@ -2854,6 +2856,7 @@ sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocume paint->value.paint.server = SP_PAINT_SERVER(ps); if (style->object && !style->cloned) { sp_object_href(SP_OBJECT(paint->value.paint.server), style); + style->hreffed = true; } if (style->object || style->cloned) { g_signal_connect(G_OBJECT(paint->value.paint.server), "release", @@ -3396,7 +3399,7 @@ sp_style_paint_clear(SPStyle *style, SPIPaint *paint, unsigned hunref, unsigned unset) { if (hunref && (paint->type == SP_PAINT_TYPE_PAINTSERVER) && paint->value.paint.server) { - if (style->object && !style->cloned) { + if (style->hreffed) { sp_object_hunref(SP_OBJECT(paint->value.paint.server), style); } if (style->object || style->cloned) { diff --git a/src/style.h b/src/style.h index 1233b7958..ba1900bde 100644 --- a/src/style.h +++ b/src/style.h @@ -321,6 +321,8 @@ struct SPStyle { /// style belongs to a cloned object, must not href anything bool cloned; + /// style has hreffed its paintservers, needs to release + bool hreffed; }; SPStyle *sp_style_new();