// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/views/widget/native_widget_aura_window_observer.h"

#include "ui/aura/client/activation_client.h"
#include "ui/aura/root_window.h"
#include "ui/aura/window.h"

namespace views {

NativeWidgetAuraWindowObserver::NativeWidgetAuraWindowObserver(
    gfx::NativeView native_view,
    internal::NativeWidgetDelegate* delegate)
    : native_view_(native_view),
      delegate_(delegate) {
  native_view_->GetRootWindow()->AddObserver(this);
  native_view_->AddObserver(this);
  aura::client::GetActivationClient(native_view_->GetRootWindow())->
      AddObserver(this);
}

NativeWidgetAuraWindowObserver::~NativeWidgetAuraWindowObserver() {
  CleanUpObservers();
}

void NativeWidgetAuraWindowObserver::OnWindowActivated(
    aura::Window* gained_active,
    aura::Window* lost_active) {
  if (!gained_active || gained_active->transient_parent() != native_view_)
    delegate_->EnableInactiveRendering();
}

void NativeWidgetAuraWindowObserver::OnWindowRemovingFromRootWindow(
    aura::Window* window) {
  if (window != native_view_)
    return;
  CleanUpObservers();
}

void NativeWidgetAuraWindowObserver::CleanUpObservers() {
  if (!native_view_)
    return;
  native_view_->GetRootWindow()->RemoveObserver(this);
  native_view_->RemoveObserver(this);
  aura::client::GetActivationClient(native_view_->GetRootWindow())->
      RemoveObserver(this);
  native_view_ = NULL;
}

}  // namespace views