summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/object-set.cpp14
-rw-r--r--src/object-set.h1
2 files changed, 11 insertions, 4 deletions
diff --git a/src/object-set.cpp b/src/object-set.cpp
index 8fcb4215e..55da22bdf 100644
--- a/src/object-set.cpp
+++ b/src/object-set.cpp
@@ -104,14 +104,18 @@ void ObjectSet::_removeDescendantsFromSet(SPObject *object) {
}
}
-void ObjectSet::_remove(SPObject *object) {
+void ObjectSet::_disconnect(SPObject *object) {
_releaseConnections[object].disconnect();
_releaseConnections.erase(object);
- _container.get<hashed>().erase(object);
_remove3DBoxesRecursively(object);
_releaseSignals(object);
}
+void ObjectSet::_remove(SPObject *object) {
+ _disconnect(object);
+ _container.get<hashed>().erase(object);
+}
+
void ObjectSet::_add(SPObject *object) {
_releaseConnections[object] = object->connectRelease(sigc::hide_return(sigc::mem_fun(*this, &ObjectSet::remove)));
_container.push_back(object);
@@ -120,8 +124,10 @@ void ObjectSet::_add(SPObject *object) {
}
void ObjectSet::_clear() {
- for (auto object: _container) {
- _remove(object);
+ MultiIndexContainer::iterator it = _container.begin();
+ while (it != _container.end()){
+ _disconnect(*it);
+ it = _container.erase(it);
}
}
diff --git a/src/object-set.h b/src/object-set.h
index c5e190136..a8061593a 100644
--- a/src/object-set.h
+++ b/src/object-set.h
@@ -476,6 +476,7 @@ protected:
private:
BoolOpErrors pathBoolOp(bool_op bop, const bool skip_undo, const unsigned int verb = SP_VERB_NONE, const Glib::ustring description = "");
+ void _disconnect(SPObject* object);
};