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