| Index: ui/wm/core/shadow_controller.cc
|
| diff --git a/ui/wm/core/shadow_controller.cc b/ui/wm/core/shadow_controller.cc
|
| index c809389fadbbcb2a45d50b2a44a687562c4fd4ad..67a3630839d312aeb53aca40f144e175a0a2c69a 100644
|
| --- a/ui/wm/core/shadow_controller.cc
|
| +++ b/ui/wm/core/shadow_controller.cc
|
| @@ -51,12 +51,25 @@ bool ShouldUseSmallShadowForWindow(aura::Window* window) {
|
| return false;
|
| }
|
|
|
| +bool IsShadowAlwaysActive(aura::Window* window) {
|
| + return GetShadowType(window) == SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE;
|
| +}
|
| +
|
| +Shadow::Style GetShadowStyleForWindow(aura::Window* window) {
|
| + return ShouldUseSmallShadowForWindow(window) ? Shadow::STYLE_SMALL :
|
| + ((IsActiveWindow(window) || IsShadowAlwaysActive(window)) ?
|
| + Shadow::STYLE_ACTIVE : Shadow::STYLE_INACTIVE);
|
| +}
|
| +
|
| // Returns the shadow style to be applied to |losing_active| when it is losing
|
| // active to |gaining_active|. |gaining_active| may be of a type that hides when
|
| // inactive, and as such we do not want to render |losing_active| as inactive.
|
| Shadow::Style GetShadowStyleForWindowLosingActive(
|
| aura::Window* losing_active,
|
| aura::Window* gaining_active) {
|
| + if (IsShadowAlwaysActive(losing_active))
|
| + return Shadow::STYLE_ACTIVE;
|
| +
|
| if (gaining_active && aura::client::GetHideOnDeactivate(gaining_active)) {
|
| aura::Window::Windows::const_iterator it =
|
| std::find(GetTransientChildren(losing_active).begin(),
|
| @@ -200,6 +213,7 @@ bool ShadowController::Impl::ShouldShowShadowForWindow(
|
| case SHADOW_TYPE_NONE:
|
| return false;
|
| case SHADOW_TYPE_RECTANGULAR:
|
| + case SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE:
|
| return true;
|
| default:
|
| NOTREACHED() << "Unknown shadow type " << type;
|
| @@ -216,18 +230,18 @@ void ShadowController::Impl::HandlePossibleShadowVisibilityChange(
|
| aura::Window* window) {
|
| const bool should_show = ShouldShowShadowForWindow(window);
|
| Shadow* shadow = GetShadowForWindow(window);
|
| - if (shadow)
|
| + if (shadow) {
|
| + shadow->SetStyle(GetShadowStyleForWindow(window));
|
| shadow->layer()->SetVisible(should_show);
|
| - else if (should_show && !shadow)
|
| + } else if (should_show && !shadow) {
|
| CreateShadowForWindow(window);
|
| + }
|
| }
|
|
|
| void ShadowController::Impl::CreateShadowForWindow(aura::Window* window) {
|
| linked_ptr<Shadow> shadow(new Shadow());
|
| window_shadows_.insert(make_pair(window, shadow));
|
| -
|
| - shadow->Init(ShouldUseSmallShadowForWindow(window) ?
|
| - Shadow::STYLE_SMALL : Shadow::STYLE_ACTIVE);
|
| + shadow->Init(GetShadowStyleForWindow(window));
|
| shadow->SetContentBounds(gfx::Rect(window->bounds().size()));
|
| shadow->layer()->SetVisible(ShouldShowShadowForWindow(window));
|
| window->layer()->Add(shadow->layer());
|
|
|