1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/message_loop/message_pump_ozone.h"
7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h"
12 MessagePumpOzone::MessagePumpOzone()
13 : MessagePumpLibevent() {
16 MessagePumpOzone::~MessagePumpOzone() {
19 void MessagePumpOzone::AddObserver(MessagePumpObserver* observer) {
20 observers_.AddObserver(observer);
23 void MessagePumpOzone::RemoveObserver(MessagePumpObserver* observer) {
24 observers_.RemoveObserver(observer);
27 void MessagePumpOzone::WillProcessEvent(const NativeEvent& event) {
28 FOR_EACH_OBSERVER(MessagePumpObserver,
30 WillProcessEvent(event));
33 void MessagePumpOzone::DidProcessEvent(const NativeEvent& event) {
34 FOR_EACH_OBSERVER(MessagePumpObserver,
36 DidProcessEvent(event));
40 MessagePumpOzone* MessagePumpOzone::Current() {
41 MessageLoopForUI* loop = MessageLoopForUI::current();
42 return static_cast<MessagePumpOzone*>(loop->pump_ui());
45 void MessagePumpOzone::AddDispatcherForRootWindow(
46 MessagePumpDispatcher* dispatcher) {
47 // Only one root window is supported.
48 DCHECK_EQ(dispatcher_.size(), 0);
49 dispatcher_.insert(dispatcher_.begin(), dispatcher);
52 void MessagePumpOzone::RemoveDispatcherForRootWindow(
53 MessagePumpDispatcher* dispatcher) {
54 DCHECK_EQ(dispatcher_.size(), 1);
55 dispatcher_.pop_back();
58 uint32_t MessagePumpOzone::Dispatch(const NativeEvent& dev) {
59 uint32_t result = POST_DISPATCH_NONE;
60 WillProcessEvent(dev);
61 if (!dispatcher_.empty()) {
62 result = dispatcher_[0]->Dispatch(dev);
68 // This code assumes that the caller tracks the lifetime of the |dispatcher|.
69 void MessagePumpOzone::RunWithDispatcher(
70 Delegate* delegate, MessagePumpDispatcher* dispatcher) {
71 dispatcher_.push_back(dispatcher);
73 dispatcher_.pop_back();