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.
4
5#include "base/message_loop/message_pump_ozone.h"
6
7#include "base/logging.h"
8#include "base/message_loop/message_loop.h"
9
10namespace base {
11
12MessagePumpOzone::MessagePumpOzone()
13    : MessagePumpLibevent() {
14}
15
16MessagePumpOzone::~MessagePumpOzone() {
17}
18
19void MessagePumpOzone::AddObserver(MessagePumpObserver* /* observer */) {
20  NOTIMPLEMENTED();
21}
22
23void MessagePumpOzone::RemoveObserver(MessagePumpObserver* /* observer */) {
24  NOTIMPLEMENTED();
25}
26
27// static
28MessagePumpOzone* MessagePumpOzone::Current() {
29  MessageLoopForUI* loop = MessageLoopForUI::current();
30  return static_cast<MessagePumpOzone*>(loop->pump_ui());
31}
32
33void MessagePumpOzone::AddDispatcherForRootWindow(
34    MessagePumpDispatcher* dispatcher) {
35  // Only one root window is supported.
36  DCHECK(dispatcher_.size() == 0);
37  dispatcher_.insert(dispatcher_.begin(),dispatcher);
38}
39
40void MessagePumpOzone::RemoveDispatcherForRootWindow(
41      MessagePumpDispatcher* dispatcher) {
42  DCHECK(dispatcher_.size() == 1);
43  dispatcher_.pop_back();
44}
45
46bool MessagePumpOzone::Dispatch(const NativeEvent& dev) {
47  if (dispatcher_.size() > 0)
48    return dispatcher_[0]->Dispatch(dev);
49  else
50    return true;
51}
52
53// This code assumes that the caller tracks the lifetime of the |dispatcher|.
54void MessagePumpOzone::RunWithDispatcher(
55    Delegate* delegate, MessagePumpDispatcher* dispatcher) {
56  dispatcher_.push_back(dispatcher);
57  Run(delegate);
58  dispatcher_.pop_back();
59}
60
61}  // namespace base
62