diff options
| author | Kris De Gussem <kris.degussem@gmail.com> | 2012-09-03 06:35:01 +0000 |
|---|---|---|
| committer | Kris <Kris.De.Gussem@hotmail.com> | 2012-09-03 06:35:01 +0000 |
| commit | d4f5006264e2e19a9fe50968a2e422b83785821c (patch) | |
| tree | 934174c6829e8a96dbffa5f6207d462723fbedca /src/xml | |
| parent | Fix for 422644 : Show filename in statusbar on saving (diff) | |
| download | inkscape-d4f5006264e2e19a9fe50968a2e422b83785821c.tar.gz inkscape-d4f5006264e2e19a9fe50968a2e422b83785821c.zip | |
revert rev 11646: build issue with dbus (forgot to adapt some more, dbus was not enabled) and other issues
(bzr r11649)
Diffstat (limited to 'src/xml')
| -rw-r--r-- | src/xml/repr-css.cpp | 24 | ||||
| -rw-r--r-- | src/xml/repr.h | 2 | ||||
| -rw-r--r-- | src/xml/simple-node.cpp | 11 |
3 files changed, 23 insertions, 14 deletions
diff --git a/src/xml/repr-css.cpp b/src/xml/repr-css.cpp index 88f85f8de..594ac83c6 100644 --- a/src/xml/repr-css.cpp +++ b/src/xml/repr-css.cpp @@ -270,9 +270,10 @@ double sp_repr_css_double_property(SPCSSAttr *css, gchar const *name, double def /** * Write a style attribute string from a list of properties stored in an SPCSAttr object. */ -void sp_repr_css_write_string(SPCSSAttr *css, Glib::ustring &str) +gchar *sp_repr_css_write_string(SPCSSAttr *css) { - str.clear(); + Glib::ustring buffer; + for ( List<AttributeRecord const> iter = css->attributeList() ; iter ; ++iter ) { @@ -280,24 +281,26 @@ void sp_repr_css_write_string(SPCSSAttr *css, Glib::ustring &str) continue; } - str.append(g_quark_to_string(iter->key)); - str.push_back(':'); + buffer.append(g_quark_to_string(iter->key)); + buffer.push_back(':'); if (!strcmp(g_quark_to_string(iter->key), "font-family") || !strcmp(g_quark_to_string(iter->key), "-inkscape-font-specification")) { // we only quote font-family/font-specification, as SPStyle does gchar *val_quoted = css2_escape_quote (iter->value); if (val_quoted) { - str.append(val_quoted); + buffer.append(val_quoted); g_free (val_quoted); } } else { - str.append(iter->value); // unquoted + buffer.append(iter->value); // unquoted } if (rest(iter)) { - str.push_back(';'); + buffer.push_back(';'); } } + + return (buffer.empty() ? NULL : g_strdup (buffer.c_str())); } /** @@ -309,8 +312,7 @@ void sp_repr_css_set(Node *repr, SPCSSAttr *css, gchar const *attr) g_assert(css != NULL); g_assert(attr != NULL); - Glib::ustring value; - sp_repr_css_write_string(css, value); + gchar *value = sp_repr_css_write_string(css); /* * If the new value is different from the old value, this will sometimes send a signal via @@ -318,7 +320,9 @@ void sp_repr_css_set(Node *repr, SPCSSAttr *css, gchar const *attr) * SPObject::sp_object_repr_attr_changed and thus updates the object's SPStyle. This update * results in another call to repr->setAttribute(). */ - repr->setAttribute(attr, value.c_str()); + repr->setAttribute(attr, value); + + if (value) g_free (value); } /** diff --git a/src/xml/repr.h b/src/xml/repr.h index debd0f489..86a798e3e 100644 --- a/src/xml/repr.h +++ b/src/xml/repr.h @@ -79,7 +79,7 @@ void sp_repr_css_unset_property(SPCSSAttr *css, gchar const *name); bool sp_repr_css_property_is_unset(SPCSSAttr *css, gchar const *name); double sp_repr_css_double_property(SPCSSAttr *css, gchar const *name, double defval); -void sp_repr_css_write_string(SPCSSAttr *css, Glib::ustring &str); +gchar *sp_repr_css_write_string(SPCSSAttr *css); void sp_repr_css_set(Inkscape::XML::Node *repr, SPCSSAttr *css, gchar const *key); void sp_repr_css_merge(SPCSSAttr *dst, SPCSSAttr *src); void sp_repr_css_attr_add_from_string(SPCSSAttr *css, const gchar *data); diff --git a/src/xml/simple-node.cpp b/src/xml/simple-node.cpp index 3d59647cf..c197d648b 100644 --- a/src/xml/simple-node.cpp +++ b/src/xml/simple-node.cpp @@ -320,7 +320,7 @@ SimpleNode::setAttribute(gchar const *name, gchar const *value, bool const /*is_ Glib::ustring element = g_quark_to_string(_name); //g_warning("setAttribute: %s: %s: %s", element.c_str(), name, value); - Glib::ustring cleaned_value = (value ? value : Glib::ustring()); + gchar* cleaned_value = g_strdup( value ); // Only check elements in SVG name space and don't block setting attribute to NULL. if( element.substr(0,4) == "svg:" && value != NULL) { @@ -338,6 +338,7 @@ SimpleNode::setAttribute(gchar const *name, gchar const *value, bool const /*is_ if( (attr_warn || attr_remove) && value != NULL ) { bool is_useful = sp_attribute_check_attribute( element, id, name, attr_warn ); if( !is_useful && attr_remove ) { + g_free( cleaned_value ); return; // Don't add to tree. } } @@ -345,6 +346,7 @@ SimpleNode::setAttribute(gchar const *name, gchar const *value, bool const /*is_ // Check style properties -- Note: if element is not yet inserted into // tree (and thus has no parent), default values will not be tested. if( !strcmp( name, "style" ) && (flags >= SP_ATTR_CLEAN_STYLE_WARN) ) { + g_free( cleaned_value ); cleaned_value = sp_attribute_clean_style( this, value, flags ); // if( g_strcmp0( value, cleaned_value ) ) { // g_warning( "SimpleNode::setAttribute: %s", id.c_str() ); @@ -370,8 +372,8 @@ SimpleNode::setAttribute(gchar const *name, gchar const *value, bool const /*is_ ptr_shared<char> old_value=( existing ? existing->value : ptr_shared<char>() ); ptr_shared<char> new_value=ptr_shared<char>(); - if (~cleaned_value.empty()) { - new_value = share_string(cleaned_value.c_str()); + if (cleaned_value) { + new_value = share_string(cleaned_value); tracker.set<DebugSetAttribute>(*this, key, new_value); if (!existing) { if (ref) { @@ -399,6 +401,9 @@ SimpleNode::setAttribute(gchar const *name, gchar const *value, bool const /*is_ _observers.notifyAttributeChanged(*this, key, old_value, new_value); //g_warning( "setAttribute notified: %s: %s: %s: %s", name, element.c_str(), old_value, new_value ); } + + g_free( cleaned_value ); + } void SimpleNode::addChild(Node *generic_child, Node *generic_ref) { |
