| Index: ui/events/event_target_iterator.h
|
| diff --git a/ui/events/event_target_iterator.h b/ui/events/event_target_iterator.h
|
| index 28b4a30202a3fa2e29d1f32520188f2ac5bb06cb..990264a830484fbcb33d975dc15462169224fe4a 100644
|
| --- a/ui/events/event_target_iterator.h
|
| +++ b/ui/events/event_target_iterator.h
|
| @@ -28,9 +28,9 @@ class EventTargetIteratorImpl : public EventTargetIterator {
|
| : begin_(children.rbegin()),
|
| end_(children.rend()) {
|
| }
|
| - virtual ~EventTargetIteratorImpl() {}
|
| + ~EventTargetIteratorImpl() override {}
|
|
|
| - virtual EventTarget* GetNextTarget() override {
|
| + EventTarget* GetNextTarget() override {
|
| if (begin_ == end_)
|
| return NULL;
|
| EventTarget* target = *(begin_);
|
| @@ -43,6 +43,32 @@ class EventTargetIteratorImpl : public EventTargetIterator {
|
| typename std::vector<T*>::const_reverse_iterator end_;
|
| };
|
|
|
| +// Provides a version which keeps a copy of the data (for when it has to be
|
| +// derived instead of pointed at).
|
| +template<typename T>
|
| +class CopyingEventTargetIteratorImpl : public EventTargetIterator {
|
| + public:
|
| + explicit CopyingEventTargetIteratorImpl(const std::vector<T*>& children)
|
| + : children_(children),
|
| + begin_(children_.rbegin()),
|
| + end_(children_.rend()) {
|
| + }
|
| + ~CopyingEventTargetIteratorImpl() override {}
|
| +
|
| + EventTarget* GetNextTarget() override {
|
| + if (begin_ == end_)
|
| + return NULL;
|
| + EventTarget* target = *(begin_);
|
| + ++begin_;
|
| + return target;
|
| + }
|
| +
|
| + private:
|
| + typename std::vector<T*> children_;
|
| + typename std::vector<T*>::const_reverse_iterator begin_;
|
| + typename std::vector<T*>::const_reverse_iterator end_;
|
| +};
|
| +
|
| } // namespace ui
|
|
|
| #endif // UI_EVENTS_EVENT_TARGET_ITERATOR_H_
|
|
|