Code

change uint to more portable unsigned int
[inkscape.git] / src / style.cpp
index afaded2a11456304bf3b1196c9e470ed328abdf5..e0a1dcc7d2bdaad8a62f85d9c88e61c3baae2c5c 100644 (file)
@@ -389,6 +389,8 @@ sp_style_new()
     sp_style_clear(style);
 
     style->cloned = false;
+    style->hreffed = false;
+    style->listening = false;
 
     return style;
 }
@@ -2000,6 +2002,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)
@@ -2007,6 +2010,7 @@ sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent)
                                      G_CALLBACK(sp_style_paint_server_release), style);
                     g_signal_connect(G_OBJECT(paint->value.paint.server), "modified",
                                      G_CALLBACK(sp_style_paint_server_modified), style);
+                    style->listening = true;
                 }
             }
             break;
@@ -2854,12 +2858,14 @@ 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",
                                      G_CALLBACK(sp_style_paint_server_release), style);
                     g_signal_connect(G_OBJECT(paint->value.paint.server), "modified",
                                      G_CALLBACK(sp_style_paint_server_modified), style);
+                    style->listening = true;
                 }
             } else {
                 paint->value.paint.server = NULL;
@@ -3396,12 +3402,14 @@ 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);
+            style->hreffed = false;
         }
-        if (style->object || style->cloned) {
+        if (style->listening) {
             g_signal_handlers_disconnect_matched(G_OBJECT(paint->value.paint.server),
                                                  G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, style);
+            style->listening = false;
         }
         paint->value.paint.server = NULL;
         paint->value.paint.uri = NULL;