summaryrefslogtreecommitdiffstats
path: root/src/object-set.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/object-set.cpp')
-rw-r--r--src/object-set.cpp14
1 files changed, 10 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);
}
}