summaryrefslogtreecommitdiffstats
path: root/src/sp-switch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-switch.cpp')
-rw-r--r--src/sp-switch.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/sp-switch.cpp b/src/sp-switch.cpp
index 66cec3637..cfc0e7d8b 100644
--- a/src/sp-switch.cpp
+++ b/src/sp-switch.cpp
@@ -41,21 +41,22 @@ SPObject *SPSwitch::_evaluateFirst() {
return first;
}
-GSList *SPSwitch::_childList(bool add_ref, SPObject::Action action) {
+std::vector<SPObject*> SPSwitch::_childList(bool add_ref, SPObject::Action action) {
if ( action != SPObject::ActionGeneral ) {
return this->childList(add_ref, action);
}
SPObject *child = _evaluateFirst();
+ std::vector<SPObject*> x;
if (NULL == child)
- return NULL;
+ return x;
if (add_ref) {
//g_object_ref (G_OBJECT (child));
sp_object_ref(child);
}
-
- return g_slist_prepend (NULL, child);
+ x.push_back(child);
+ return x;
}
const char *SPSwitch::displayName() const {
@@ -95,10 +96,9 @@ void SPSwitch::_reevaluate(bool /*add_to_drawing*/) {
_releaseLastItem(_cached_item);
- for ( GSList *l = _childList(false, SPObject::ActionShow);
- NULL != l ; l = g_slist_remove (l, l->data))
- {
- SPObject *o = SP_OBJECT (l->data);
+ std::vector<SPObject*> item_list = _childList(false, SPObject::ActionShow);
+ for ( std::vector<SPObject*>::const_reverse_iterator iter=item_list.rbegin();iter!=item_list.rend();iter++) {
+ SPObject *o = *iter;
if ( !SP_IS_ITEM (o) ) {
continue;
}
@@ -130,10 +130,10 @@ void SPSwitch::_releaseLastItem(SPObject *obj)
void SPSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem *ai, unsigned int key, unsigned int flags) {
SPObject *evaluated_child = this->_evaluateFirst();
- GSList *l = this->_childList(false, SPObject::ActionShow);
+ std::vector<SPObject*> l = this->_childList(false, SPObject::ActionShow);
- while (l) {
- SPObject *o = SP_OBJECT (l->data);
+ for ( std::vector<SPObject*>::const_reverse_iterator iter=l.rbegin();iter!=l.rend();iter++) {
+ SPObject *o = *iter;
if (SP_IS_ITEM (o)) {
SPItem * child = SP_ITEM(o);
@@ -144,8 +144,6 @@ void SPSwitch::_showChildren (Inkscape::Drawing &drawing, Inkscape::DrawingItem
ai->appendChild(ac);
}
}
-
- l = g_slist_remove (l, o);
}
}