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