summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: ba1fe07)
raw | patch | inline | side by side (parent: ba1fe07)
author | knutux <knutux@users.sourceforge.net> | |
Tue, 21 Mar 2006 07:22:28 +0000 (07:22 +0000) | ||
committer | knutux <knutux@users.sourceforge.net> | |
Tue, 21 Mar 2006 07:22:28 +0000 (07:22 +0000) |
- Fixed crash if unmask/unclip is used on unmasked object
- Restoring mask/clippath object even if it is still referenced
- Adding restored mask objects to selected item list
- Restoring mask/clippath object even if it is still referenced
- Adding restored mask objects to selected item list
src/selection-chemistry.cpp | patch | blob | history |
index 91686d277f6c7751fef4629f500893d91b58bce4..ba0d89850fd4bc475d80e014cb04ccac6477de26 100644 (file)
} else {
uri_ref = item->mask_ref;
}
-
- if (NULL != uri_ref && referenced_objects.end() == referenced_objects.find(uri_ref->getObject())) {
+
+ // collect distinct mask object
+ if (NULL != uri_ref && NULL != uri_ref->getObject() && referenced_objects.end() == referenced_objects.find(uri_ref->getObject())) {
referenced_objects.insert(uri_ref->getObject());
}
}
SP_OBJECT_REPR(i->data)->setAttribute(attributeName, "none");
}
+ // restore mask objects into a document
for ( std::set<SPObject*>::iterator it = referenced_objects.begin() ; it != referenced_objects.end() ; ++it) {
SPObject *obj = (*it);
+ GSList *items_to_move = NULL;
+ for (SPObject *child = sp_object_first_child(obj) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
+ Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate();
+ items_to_move = g_slist_prepend (items_to_move, copy);
+ }
+
if (!obj->isReferenced()) {
- GSList *items_to_move = NULL;
- for (SPObject *child = sp_object_first_child(obj) ; child != NULL; child = SP_OBJECT_NEXT(child) ) {
- Inkscape::XML::Node *copy = SP_OBJECT_REPR(child)->duplicate();
- items_to_move = g_slist_prepend (items_to_move, copy);
- }
-
+ // delete from defs if no other object references this mask
obj->deleteObject(false);
+ }
- for (GSList *i = items_to_move; NULL != i; i = i->next) {
- desktop->currentLayer()->appendChildRepr((Inkscape::XML::Node *)i->data);
- }
-
- g_slist_free (items_to_move);
+ for (GSList *i = items_to_move; NULL != i; i = i->next) {
+ desktop->currentLayer()->appendChildRepr((Inkscape::XML::Node *)i->data);
+ selection->add((Inkscape::XML::Node *)i->data);
}
+
+ g_slist_free (items_to_move);
}
sp_document_done (document);