1// Copyright (c) 2012 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 "ui/aura/client/default_capture_client.h"
6
7#include "ui/aura/window.h"
8#include "ui/aura/window_event_dispatcher.h"
9#include "ui/aura/window_tree_host.h"
10
11namespace aura {
12namespace client {
13
14DefaultCaptureClient::DefaultCaptureClient(Window* root_window)
15    : root_window_(root_window),
16      capture_window_(NULL) {
17  SetCaptureClient(root_window_, this);
18}
19
20DefaultCaptureClient::~DefaultCaptureClient() {
21  SetCaptureClient(root_window_, NULL);
22}
23
24void DefaultCaptureClient::SetCapture(Window* window) {
25  if (capture_window_ == window)
26    return;
27  if (window) {
28    ui::GestureRecognizer::Get()->TransferEventsTo(
29        capture_window_, window);
30  }
31
32  Window* old_capture_window = capture_window_;
33  capture_window_ = window;
34
35  CaptureDelegate* capture_delegate = root_window_->GetHost()->dispatcher();
36  if (capture_window_)
37    capture_delegate->SetNativeCapture();
38  else
39    capture_delegate->ReleaseNativeCapture();
40
41  capture_delegate->UpdateCapture(old_capture_window, capture_window_);
42}
43
44void DefaultCaptureClient::ReleaseCapture(Window* window) {
45  if (capture_window_ != window)
46    return;
47  SetCapture(NULL);
48}
49
50Window* DefaultCaptureClient::GetCaptureWindow() {
51  return capture_window_;
52}
53
54Window* DefaultCaptureClient::GetGlobalCaptureWindow() {
55  return capture_window_;
56}
57
58}  // namespace client
59}  // namespace aura
60