Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ui/events/event_source.h" | 5 #include "ui/events/event_source.h" |
| 6 | 6 |
| 7 #include <algorithm> | |
| 8 | |
| 7 #include "ui/events/event_processor.h" | 9 #include "ui/events/event_processor.h" |
| 10 #include "ui/events/event_rewriter.h" | |
| 8 | 11 |
| 9 namespace ui { | 12 namespace ui { |
| 10 | 13 |
| 14 void EventSource::AddEventRewriter(EventRewriter* rewriter) { | |
| 15 DCHECK(rewriter); | |
| 16 rewriter_list_.push_back(rewriter); | |
| 17 } | |
| 18 | |
| 19 void EventSource::RemoveEventRewriter(EventRewriter* rewriter) { | |
| 20 EventRewriterList::iterator find = | |
| 21 std::find(rewriter_list_.begin(), rewriter_list_.end(), rewriter); | |
| 22 if (find != rewriter_list_.end()) | |
| 23 rewriter_list_.erase(find); | |
| 24 } | |
| 25 | |
| 11 EventDispatchDetails EventSource::SendEventToProcessor(Event* event) { | 26 EventDispatchDetails EventSource::SendEventToProcessor(Event* event) { |
| 27 Event* rewritten_event = 0; | |
|
sadrul
2014/03/24 21:15:38
We should use a scoped_ptr<> to avoid accidentally
| |
| 28 EventRewriteStatus status = EVENT_REWRITE_CONTINUE; | |
| 29 for (EventRewriterList::const_iterator it = rewriter_list_.begin(), | |
| 30 end = rewriter_list_.end(); | |
| 31 (it != end) && (status == EVENT_REWRITE_CONTINUE); | |
| 32 ++it) { | |
| 33 DCHECK(*it); | |
| 34 status = (*it)->RewriteEvent(*event, &rewritten_event); | |
| 35 while (status == EVENT_REWRITE_DISPATCH_ANOTHER) { | |
|
sadrul
2014/03/24 21:15:38
Can we do this more like:
for (....) {
status =
| |
| 36 DCHECK(rewritten_event); | |
| 37 EventDispatchDetails details = DeliverEventToProcessor(rewritten_event); | |
| 38 if (details.dispatcher_destroyed || details.target_destroyed) | |
| 39 return details; | |
| 40 Event* last_event = rewritten_event; | |
| 41 status = (*it)->NextDispatchEvent(*last_event, &rewritten_event); | |
| 42 delete last_event; | |
| 43 } | |
| 44 } | |
| 45 if (status == EVENT_REWRITE_REWRITTEN) { | |
| 46 DCHECK(rewritten_event); | |
| 47 EventDispatchDetails details = DeliverEventToProcessor(rewritten_event); | |
| 48 delete rewritten_event; | |
| 49 return details; | |
| 50 } | |
| 51 DCHECK(!rewritten_event); | |
| 52 if (status == EVENT_REWRITE_CONTINUE) { | |
| 53 return DeliverEventToProcessor(event); | |
| 54 } | |
| 55 return EventDispatchDetails(); | |
| 56 } | |
| 57 | |
| 58 EventDispatchDetails EventSource::DeliverEventToProcessor(Event* event) { | |
| 12 EventProcessor* processor = GetEventProcessor(); | 59 EventProcessor* processor = GetEventProcessor(); |
| 13 CHECK(processor); | 60 CHECK(processor); |
| 14 return processor->OnEventFromSource(event); | 61 return processor->OnEventFromSource(event); |
| 15 } | 62 } |
| 16 | 63 |
| 17 } // namespace ui | 64 } // namespace ui |
| OLD | NEW |