default_capture_client.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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  root_window_->gesture_recognizer()->TransferEventsTo(capture_window_, window);
26
27  Window* old_capture_window = capture_window_;
28  capture_window_ = window;
29
30  if (capture_window_)
31    root_window_->SetNativeCapture();
32  else
33    root_window_->ReleaseNativeCapture();
34
35  root_window_->UpdateCapture(old_capture_window, capture_window_);
36}
37
38void DefaultCaptureClient::ReleaseCapture(Window* window) {
39  if (capture_window_ != window)
40    return;
41  SetCapture(NULL);
42}
43
44Window* DefaultCaptureClient::GetCaptureWindow() {
45  return capture_window_;
46}
47
48}  // namespace client
49}  // namespace aura
50