Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: ui/events/event_source.cc

Issue 210203002: events: Introduce EventRewriter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
OLDNEW
« ui/events/event_source.h ('K') | « ui/events/event_source.h ('k') | ui/events/events.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698