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 11 namespace aura { 12 namespace client { 13 14 DefaultCaptureClient::DefaultCaptureClient(Window* root_window) 15 : root_window_(root_window), 16 capture_window_(NULL) { 17 SetCaptureClient(root_window_, this); 18 } 19 20 DefaultCaptureClient::~DefaultCaptureClient() { 21 SetCaptureClient(root_window_, NULL); 22 } 23 24 void 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 44 void DefaultCaptureClient::ReleaseCapture(Window* window) { 45 if (capture_window_ != window) 46 return; 47 SetCapture(NULL); 48 } 49 50 Window* DefaultCaptureClient::GetCaptureWindow() { 51 return capture_window_; 52 } 53 54 Window* DefaultCaptureClient::GetGlobalCaptureWindow() { 55 return capture_window_; 56 } 57 58 } // namespace client 59 } // namespace aura 60