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/views/widget/native_widget_aura_window_observer.h" 6 7 #include "ui/aura/client/activation_client.h" 8 #include "ui/aura/root_window.h" 9 #include "ui/aura/window.h" 10 11 namespace views { 12 13 NativeWidgetAuraWindowObserver::NativeWidgetAuraWindowObserver( 14 gfx::NativeView native_view, 15 internal::NativeWidgetDelegate* delegate) 16 : native_view_(native_view), 17 delegate_(delegate) { 18 native_view_->GetRootWindow()->AddObserver(this); 19 native_view_->AddObserver(this); 20 aura::client::GetActivationClient(native_view_->GetRootWindow())-> 21 AddObserver(this); 22 } 23 24 NativeWidgetAuraWindowObserver::~NativeWidgetAuraWindowObserver() { 25 CleanUpObservers(); 26 } 27 28 void NativeWidgetAuraWindowObserver::OnWindowActivated( 29 aura::Window* gained_active, 30 aura::Window* lost_active) { 31 if (!gained_active || gained_active->transient_parent() != native_view_) 32 delegate_->EnableInactiveRendering(); 33 } 34 35 void NativeWidgetAuraWindowObserver::OnWindowRemovingFromRootWindow( 36 aura::Window* window) { 37 if (window != native_view_) 38 return; 39 CleanUpObservers(); 40 } 41 42 void NativeWidgetAuraWindowObserver::CleanUpObservers() { 43 if (!native_view_) 44 return; 45 native_view_->GetRootWindow()->RemoveObserver(this); 46 native_view_->RemoveObserver(this); 47 aura::client::GetActivationClient(native_view_->GetRootWindow())-> 48 RemoveObserver(this); 49 native_view_ = NULL; 50 } 51 52 } // namespace views 53