// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "services/window_manager/view_event_dispatcher.h"

#include "mojo/services/view_manager/cpp/view.h"
#include "services/window_manager/view_target.h"

namespace window_manager {

ViewEventDispatcher::ViewEventDispatcher()
    : event_dispatch_target_(nullptr),
      old_dispatch_target_(nullptr) {
}

ViewEventDispatcher::~ViewEventDispatcher() {}

void ViewEventDispatcher::SetRootViewTarget(ViewTarget* root_view_target) {
  root_view_target_ = root_view_target;
}

ui::EventTarget* ViewEventDispatcher::GetRootTarget() {
  return root_view_target_;
}

void ViewEventDispatcher::OnEventProcessingStarted(ui::Event* event) {
}

bool ViewEventDispatcher::CanDispatchToTarget(ui::EventTarget* target) {
  return event_dispatch_target_ == target;
}

ui::EventDispatchDetails ViewEventDispatcher::PreDispatchEvent(
    ui::EventTarget* target,
    ui::Event* event) {
  // TODO(erg): PreDispatch in aura::WindowEventDispatcher does many, many
  // things. It, and the functions split off for different event types, are
  // most of the file.
  old_dispatch_target_ = event_dispatch_target_;
  event_dispatch_target_ = static_cast<ViewTarget*>(target);
  return ui::EventDispatchDetails();
}

ui::EventDispatchDetails ViewEventDispatcher::PostDispatchEvent(
    ui::EventTarget* target,
    const ui::Event& event) {
  // TODO(erg): Not at all as long as PreDispatchEvent, but still missing core
  // details.
  event_dispatch_target_ = old_dispatch_target_;
  old_dispatch_target_ = nullptr;
  return ui::EventDispatchDetails();
}

}  // namespace window_manager
