15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/default_capture_client.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/aura/window.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "ui/aura/window_tree_host.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace client {
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)DefaultCaptureClient::DefaultCaptureClient(Window* root_window)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : root_window_(root_window),
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      capture_window_(NULL) {
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetCaptureClient(root_window_, this);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)DefaultCaptureClient::~DefaultCaptureClient() {
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SetCaptureClient(root_window_, NULL);
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DefaultCaptureClient::SetCapture(Window* window) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (capture_window_ == window)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (window) {
288bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    ui::GestureRecognizer::Get()->TransferEventsTo(
298bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        capture_window_, window);
308bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Window* old_capture_window = capture_window_;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  capture_window_ = window;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CaptureDelegate* capture_delegate = root_window_->GetHost()->dispatcher();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (capture_window_)
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    capture_delegate->SetNativeCapture();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    capture_delegate->ReleaseNativeCapture();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
418bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  capture_delegate->UpdateCapture(old_capture_window, capture_window_);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void DefaultCaptureClient::ReleaseCapture(Window* window) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (capture_window_ != window)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetCapture(NULL);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Window* DefaultCaptureClient::GetCaptureWindow() {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return capture_window_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Window* DefaultCaptureClient::GetGlobalCaptureWindow() {
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return capture_window_;
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace client
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
60