--- wesnoth-1.8.6/src/gui/widgets/tree_view_node.cpp~ 2011-07-21 23:05:56.594879049 +0200 +++ wesnoth-1.8.6/src/gui/widgets/tree_view_node.cpp 2011-07-21 23:28:07.540358742 +0200 @@ -238,6 +238,17 @@ void ttree_view_node::clear() struct ttree_view_node_implementation { + template + static W* find_at_aux(It begin, It end, + const tpoint& coordinate, const bool must_be_active) { + for (It it = begin; it != end; ++it) { + if(W* widget = it->find_at(coordinate, must_be_active)) { + return widget; + } + } + return NULL; + } + template static W* find_at( typename tconst_duplicator::type& @@ -255,13 +266,9 @@ struct ttree_view_node_implementation } typedef typename tconst_duplicator::type thack; - foreach(thack& node, tree_view_node.children_) { - if(W* widget = node.find_at(coordinate, must_be_active)) { - return widget; - } - } - - return NULL; + return find_at_aux(tree_view_node.children_.begin(), + tree_view_node.children_.end(), + coordinate, must_be_active); } }; @@ -313,7 +320,9 @@ tpoint ttree_view_node::get_current_size return size; } - foreach(const ttree_view_node& node, children_) { + for (boost::ptr_vector::const_iterator it + = children_.begin (); it != children_.end (); ++it) { + const ttree_view_node& node = *it; if(node.grid_.get_visible() == twidget::INVISIBLE) { continue; @@ -344,7 +353,9 @@ tpoint ttree_view_node::get_unfolded_siz size.x += (get_indention_level() - 1) * tree_view().indention_step_size_; } - foreach(const ttree_view_node& node, children_) { + for (boost::ptr_vector::const_iterator it + = children_.begin (); it != children_.end (); ++it) { + const ttree_view_node& node = *it; if(node.grid_.get_visible() == twidget::INVISIBLE) { continue; @@ -378,7 +389,9 @@ tpoint ttree_view_node::calculate_best_s DBG_GUI_L << LOG_HEADER << " own grid best size " << best_size << ".\n"; - foreach(const ttree_view_node& node, children_) { + for (boost::ptr_vector::const_iterator it + = children_.begin (); it != children_.end (); ++it) { + const ttree_view_node& node = *it; if(node.grid_.get_visible() == twidget::INVISIBLE) { continue;