Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ash/shelf/shelf_layout_manager.h" | 5 #include "ash/shelf/shelf_layout_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 70 // from the right edge of the primary display which can trigger showing the | 70 // from the right edge of the primary display which can trigger showing the |
| 71 // auto hidden shelf. The region is used to make it easier to trigger showing | 71 // auto hidden shelf. The region is used to make it easier to trigger showing |
| 72 // the auto hidden shelf when the shelf is on the boundary between displays. | 72 // the auto hidden shelf when the shelf is on the boundary between displays. |
| 73 const int kMaxAutoHideShowShelfRegionSize = 10; | 73 const int kMaxAutoHideShowShelfRegionSize = 10; |
| 74 | 74 |
| 75 ui::Layer* GetLayer(views::Widget* widget) { | 75 ui::Layer* GetLayer(views::Widget* widget) { |
| 76 return widget->GetNativeView()->layer(); | 76 return widget->GetNativeView()->layer(); |
| 77 } | 77 } |
| 78 | 78 |
| 79 // Returns true if the window is in the app list window container. | 79 // Returns true if the window is in the app list window container. |
| 80 bool IsAppListWindow(WmWindow* window) { | 80 bool IsAppListWindow(const aura::Window* window) { |
| 81 return window->GetParent() && window->GetParent()->aura_window()->id() == | 81 const aura::Window* parent = window->parent(); |
| 82 kShellWindowId_AppListContainer; | 82 return parent && parent->id() == kShellWindowId_AppListContainer; |
| 83 } | 83 } |
| 84 | 84 |
| 85 } // namespace | 85 } // namespace |
| 86 | 86 |
| 87 // ShelfLayoutManager::UpdateShelfObserver ------------------------------------- | 87 // ShelfLayoutManager::UpdateShelfObserver ------------------------------------- |
| 88 | 88 |
| 89 // UpdateShelfObserver is used to delay updating the background until the | 89 // UpdateShelfObserver is used to delay updating the background until the |
| 90 // animation completes. | 90 // animation completes. |
| 91 class ShelfLayoutManager::UpdateShelfObserver | 91 class ShelfLayoutManager::UpdateShelfObserver |
| 92 : public ui::ImplicitAnimationObserver { | 92 : public ui::ImplicitAnimationObserver { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 228 case SHELF_AUTO_HIDE_BEHAVIOR_NEVER: | 228 case SHELF_AUTO_HIDE_BEHAVIOR_NEVER: |
| 229 return SHELF_VISIBLE; | 229 return SHELF_VISIBLE; |
| 230 case SHELF_AUTO_HIDE_ALWAYS_HIDDEN: | 230 case SHELF_AUTO_HIDE_ALWAYS_HIDDEN: |
| 231 return SHELF_HIDDEN; | 231 return SHELF_HIDDEN; |
| 232 } | 232 } |
| 233 return SHELF_VISIBLE; | 233 return SHELF_VISIBLE; |
| 234 } | 234 } |
| 235 | 235 |
| 236 void ShelfLayoutManager::UpdateVisibilityState() { | 236 void ShelfLayoutManager::UpdateVisibilityState() { |
| 237 // Bail out early before the shelf is initialized or after it is destroyed. | 237 // Bail out early before the shelf is initialized or after it is destroyed. |
| 238 WmWindow* shelf_window = WmWindow::Get(shelf_widget_->GetNativeWindow()); | 238 aura::Window* shelf_window = shelf_widget_->GetNativeWindow(); |
|
James Cook
2017/05/16 21:50:16
Your patch and mine are going to conflict here. Yo
| |
| 239 if (in_shutdown_ || !wm_shelf_->IsShelfInitialized() || !shelf_window) | 239 if (in_shutdown_ || !wm_shelf_->IsShelfInitialized() || !shelf_window) |
| 240 return; | 240 return; |
| 241 if (state_.IsScreenLocked() || state_.IsAddingSecondaryUser()) { | 241 if (state_.IsScreenLocked() || state_.IsAddingSecondaryUser()) { |
| 242 SetState(SHELF_VISIBLE); | 242 SetState(SHELF_VISIBLE); |
| 243 } else if (Shell::Get()->screen_pinning_controller()->IsPinned()) { | 243 } else if (Shell::Get()->screen_pinning_controller()->IsPinned()) { |
| 244 SetState(SHELF_HIDDEN); | 244 SetState(SHELF_HIDDEN); |
| 245 } else { | 245 } else { |
| 246 // TODO(zelidrag): Verify shelf drag animation still shows on the device | 246 // TODO(zelidrag): Verify shelf drag animation still shows on the device |
| 247 // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN. | 247 // when we are in SHELF_AUTO_HIDE_ALWAYS_HIDDEN. |
| 248 wm::WorkspaceWindowState window_state( | 248 wm::WorkspaceWindowState window_state( |
| 249 shelf_window->GetRootWindowController()->GetWorkspaceWindowState()); | 249 RootWindowController::ForWindow(shelf_window) |
| 250 ->GetWorkspaceWindowState()); | |
| 250 | 251 |
| 251 switch (window_state) { | 252 switch (window_state) { |
| 252 case wm::WORKSPACE_WINDOW_STATE_FULL_SCREEN: { | 253 case wm::WORKSPACE_WINDOW_STATE_FULL_SCREEN: { |
| 253 if (IsShelfAutoHideForFullscreenMaximized()) { | 254 if (IsShelfAutoHideForFullscreenMaximized()) { |
| 254 SetState(SHELF_AUTO_HIDE); | 255 SetState(SHELF_AUTO_HIDE); |
| 255 } else if (IsShelfHiddenForFullscreen()) { | 256 } else if (IsShelfHiddenForFullscreen()) { |
| 256 SetState(SHELF_HIDDEN); | 257 SetState(SHELF_HIDDEN); |
| 257 } else { | 258 } else { |
| 258 // The shelf is sometimes not hidden when in immersive fullscreen. | 259 // The shelf is sometimes not hidden when in immersive fullscreen. |
| 259 // Force the shelf to be auto hidden in this case. | 260 // Force the shelf to be auto hidden in this case. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 295 auto_hide_timer_.Start( | 296 auto_hide_timer_.Start( |
| 296 FROM_HERE, base::TimeDelta::FromMilliseconds(kAutoHideDelayMS), this, | 297 FROM_HERE, base::TimeDelta::FromMilliseconds(kAutoHideDelayMS), this, |
| 297 &ShelfLayoutManager::UpdateAutoHideStateNow); | 298 &ShelfLayoutManager::UpdateAutoHideStateNow); |
| 298 } | 299 } |
| 299 } else { | 300 } else { |
| 300 StopAutoHideTimer(); | 301 StopAutoHideTimer(); |
| 301 } | 302 } |
| 302 } | 303 } |
| 303 | 304 |
| 304 void ShelfLayoutManager::UpdateAutoHideForMouseEvent(ui::MouseEvent* event, | 305 void ShelfLayoutManager::UpdateAutoHideForMouseEvent(ui::MouseEvent* event, |
| 305 WmWindow* target) { | 306 aura::Window* target) { |
| 306 // This also checks IsShelfWindow() to make sure we don't attempt to hide the | 307 // This also checks IsShelfWindow() to make sure we don't attempt to hide the |
| 307 // shelf if the mouse down occurs on the shelf. | 308 // shelf if the mouse down occurs on the shelf. |
| 308 in_mouse_drag_ = (event->type() == ui::ET_MOUSE_DRAGGED || | 309 in_mouse_drag_ = (event->type() == ui::ET_MOUSE_DRAGGED || |
| 309 (in_mouse_drag_ && event->type() != ui::ET_MOUSE_RELEASED && | 310 (in_mouse_drag_ && event->type() != ui::ET_MOUSE_RELEASED && |
| 310 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED)) && | 311 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED)) && |
| 311 !IsShelfWindow(target); | 312 !IsShelfWindow(target); |
| 312 | 313 |
| 313 // Don't update during shutdown because synthetic mouse events (e.g. mouse | 314 // Don't update during shutdown because synthetic mouse events (e.g. mouse |
| 314 // exit) may be generated during status area widget teardown. | 315 // exit) may be generated during status area widget teardown. |
| 315 if (visibility_state() != SHELF_AUTO_HIDE || in_shutdown_) | 316 if (visibility_state() != SHELF_AUTO_HIDE || in_shutdown_) |
| 316 return; | 317 return; |
| 317 | 318 |
| 318 if (event->type() == ui::ET_MOUSE_MOVED || | 319 if (event->type() == ui::ET_MOUSE_MOVED || |
| 319 event->type() == ui::ET_MOUSE_ENTERED || | 320 event->type() == ui::ET_MOUSE_ENTERED || |
| 320 event->type() == ui::ET_MOUSE_EXITED) { | 321 event->type() == ui::ET_MOUSE_EXITED) { |
| 321 UpdateAutoHideState(); | 322 UpdateAutoHideState(); |
| 322 } | 323 } |
| 323 } | 324 } |
| 324 | 325 |
| 325 void ShelfLayoutManager::UpdateAutoHideForGestureEvent(ui::GestureEvent* event, | 326 void ShelfLayoutManager::UpdateAutoHideForGestureEvent(ui::GestureEvent* event, |
| 326 WmWindow* target) { | 327 aura::Window* target) { |
| 327 if (visibility_state() != SHELF_AUTO_HIDE || in_shutdown_) | 328 if (visibility_state() != SHELF_AUTO_HIDE || in_shutdown_) |
| 328 return; | 329 return; |
| 329 | 330 |
| 330 if (IsShelfWindow(target) && ProcessGestureEvent(*event)) | 331 if (IsShelfWindow(target) && ProcessGestureEvent(*event)) |
| 331 event->StopPropagation(); | 332 event->StopPropagation(); |
| 332 } | 333 } |
| 333 | 334 |
| 334 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) { | 335 void ShelfLayoutManager::SetWindowOverlapsShelf(bool value) { |
| 335 window_overlaps_shelf_ = value; | 336 window_overlaps_shelf_ = value; |
| 336 MaybeUpdateShelfBackground(AnimationChangeType::ANIMATE); | 337 MaybeUpdateShelfBackground(AnimationChangeType::ANIMATE); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 485 ShelfLayoutManager::TargetBounds::TargetBounds() | 486 ShelfLayoutManager::TargetBounds::TargetBounds() |
| 486 : opacity(0.0f), status_opacity(0.0f) {} | 487 : opacity(0.0f), status_opacity(0.0f) {} |
| 487 | 488 |
| 488 ShelfLayoutManager::TargetBounds::~TargetBounds() {} | 489 ShelfLayoutManager::TargetBounds::~TargetBounds() {} |
| 489 | 490 |
| 490 void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { | 491 void ShelfLayoutManager::SetState(ShelfVisibilityState visibility_state) { |
| 491 State state; | 492 State state; |
| 492 state.visibility_state = visibility_state; | 493 state.visibility_state = visibility_state; |
| 493 state.auto_hide_state = CalculateAutoHideState(visibility_state); | 494 state.auto_hide_state = CalculateAutoHideState(visibility_state); |
| 494 | 495 |
| 495 WmWindow* shelf_window = WmWindow::Get(shelf_widget_->GetNativeWindow()); | 496 RootWindowController* controller = |
| 496 RootWindowController* controller = shelf_window->GetRootWindowController(); | 497 RootWindowController::ForWindow(shelf_widget_->GetNativeWindow()); |
| 497 state.window_state = controller ? controller->GetWorkspaceWindowState() | 498 state.window_state = controller ? controller->GetWorkspaceWindowState() |
| 498 : wm::WORKSPACE_WINDOW_STATE_DEFAULT; | 499 : wm::WORKSPACE_WINDOW_STATE_DEFAULT; |
| 499 // Preserve the log in screen states. | 500 // Preserve the log in screen states. |
| 500 state.session_state = state_.session_state; | 501 state.session_state = state_.session_state; |
| 501 state.pre_lock_screen_animation_active = | 502 state.pre_lock_screen_animation_active = |
| 502 state_.pre_lock_screen_animation_active; | 503 state_.pre_lock_screen_animation_active; |
| 503 | 504 |
| 504 // Force an update because gesture drags affect the shelf bounds and we | 505 // Force an update because gesture drags affect the shelf bounds and we |
| 505 // should animate back to the normal bounds at the end of a gesture. | 506 // should animate back to the normal bounds at the end of a gesture. |
| 506 bool force_update = | 507 bool force_update = |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 564 for (auto& observer : observers_) | 565 for (auto& observer : observers_) |
| 565 observer.OnAutoHideStateChanged(state_.auto_hide_state); | 566 observer.OnAutoHideStateChanged(state_.auto_hide_state); |
| 566 } | 567 } |
| 567 } | 568 } |
| 568 | 569 |
| 569 void ShelfLayoutManager::UpdateBoundsAndOpacity( | 570 void ShelfLayoutManager::UpdateBoundsAndOpacity( |
| 570 const TargetBounds& target_bounds, | 571 const TargetBounds& target_bounds, |
| 571 bool animate, | 572 bool animate, |
| 572 bool change_work_area, | 573 bool change_work_area, |
| 573 ui::ImplicitAnimationObserver* observer) { | 574 ui::ImplicitAnimationObserver* observer) { |
| 575 StatusAreaWidget* status_widget = shelf_widget_->status_area_widget(); | |
| 574 base::AutoReset<bool> auto_reset_updating_bounds(&updating_bounds_, true); | 576 base::AutoReset<bool> auto_reset_updating_bounds(&updating_bounds_, true); |
| 575 { | 577 { |
| 576 ui::ScopedLayerAnimationSettings shelf_animation_setter( | 578 ui::ScopedLayerAnimationSettings shelf_animation_setter( |
| 577 GetLayer(shelf_widget_)->GetAnimator()); | 579 GetLayer(shelf_widget_)->GetAnimator()); |
| 578 ui::ScopedLayerAnimationSettings status_animation_setter( | 580 ui::ScopedLayerAnimationSettings status_animation_setter( |
| 579 GetLayer(shelf_widget_->status_area_widget())->GetAnimator()); | 581 GetLayer(status_widget)->GetAnimator()); |
| 580 if (animate) { | 582 if (animate) { |
| 581 int duration = duration_override_in_ms_ ? duration_override_in_ms_ | 583 int duration = duration_override_in_ms_ ? duration_override_in_ms_ |
| 582 : kAnimationDurationMS; | 584 : kAnimationDurationMS; |
| 583 shelf_animation_setter.SetTransitionDuration( | 585 shelf_animation_setter.SetTransitionDuration( |
| 584 base::TimeDelta::FromMilliseconds(duration)); | 586 base::TimeDelta::FromMilliseconds(duration)); |
| 585 shelf_animation_setter.SetTweenType(gfx::Tween::EASE_OUT); | 587 shelf_animation_setter.SetTweenType(gfx::Tween::EASE_OUT); |
| 586 shelf_animation_setter.SetPreemptionStrategy( | 588 shelf_animation_setter.SetPreemptionStrategy( |
| 587 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 589 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 588 status_animation_setter.SetTransitionDuration( | 590 status_animation_setter.SetTransitionDuration( |
| 589 base::TimeDelta::FromMilliseconds(duration)); | 591 base::TimeDelta::FromMilliseconds(duration)); |
| 590 status_animation_setter.SetTweenType(gfx::Tween::EASE_OUT); | 592 status_animation_setter.SetTweenType(gfx::Tween::EASE_OUT); |
| 591 status_animation_setter.SetPreemptionStrategy( | 593 status_animation_setter.SetPreemptionStrategy( |
| 592 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); | 594 ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| 593 } else { | 595 } else { |
| 594 StopAnimating(); | 596 StopAnimating(); |
| 595 shelf_animation_setter.SetTransitionDuration(base::TimeDelta()); | 597 shelf_animation_setter.SetTransitionDuration(base::TimeDelta()); |
| 596 status_animation_setter.SetTransitionDuration(base::TimeDelta()); | 598 status_animation_setter.SetTransitionDuration(base::TimeDelta()); |
| 597 } | 599 } |
| 598 if (observer) | 600 if (observer) |
| 599 status_animation_setter.AddObserver(observer); | 601 status_animation_setter.AddObserver(observer); |
| 600 | 602 |
| 601 GetLayer(shelf_widget_)->SetOpacity(target_bounds.opacity); | 603 GetLayer(shelf_widget_)->SetOpacity(target_bounds.opacity); |
| 602 WmWindow* shelf_window = WmWindow::Get(shelf_widget_->GetNativeWindow()); | 604 gfx::Rect shelf_bounds = target_bounds.shelf_bounds_in_root; |
| 603 shelf_widget_->SetBounds(shelf_window->GetParent()->ConvertRectToScreen( | 605 ::wm::ConvertRectToScreen(shelf_widget_->GetNativeWindow()->parent(), |
| 604 target_bounds.shelf_bounds_in_root)); | 606 &shelf_bounds); |
| 607 shelf_widget_->SetBounds(shelf_bounds); | |
| 605 | 608 |
| 606 GetLayer(shelf_widget_->status_area_widget()) | 609 GetLayer(status_widget)->SetOpacity(target_bounds.status_opacity); |
| 607 ->SetOpacity(target_bounds.status_opacity); | |
| 608 | 610 |
| 609 // Having a window which is visible but does not have an opacity is an | 611 // Having a window which is visible but does not have an opacity is an |
| 610 // illegal state. We therefore hide the shelf here if required. | 612 // illegal state. We therefore hide the shelf here if required. |
| 611 if (!target_bounds.status_opacity) | 613 if (!target_bounds.status_opacity) |
| 612 shelf_widget_->status_area_widget()->Hide(); | 614 status_widget->Hide(); |
| 613 // Setting visibility during an animation causes the visibility property to | 615 // Setting visibility during an animation causes the visibility property to |
| 614 // animate. Override the animation settings to immediately set the | 616 // animate. Override the animation settings to immediately set the |
| 615 // visibility property. Opacity will still animate. | 617 // visibility property. Opacity will still animate. |
| 616 | 618 |
| 617 // TODO(harrym): Once status area widget is a child view of shelf | 619 // TODO(harrym): Once status area widget is a child view of shelf |
| 618 // this can be simplified. | 620 // this can be simplified. |
| 619 gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; | 621 gfx::Rect status_bounds = target_bounds.status_bounds_in_shelf; |
| 620 status_bounds.Offset(target_bounds.shelf_bounds_in_root.OffsetFromOrigin()); | 622 status_bounds.Offset(target_bounds.shelf_bounds_in_root.OffsetFromOrigin()); |
| 621 WmWindow* status_window = | 623 ::wm::ConvertRectToScreen(status_widget->GetNativeWindow()->parent(), |
| 622 WmWindow::Get(shelf_widget_->status_area_widget()->GetNativeWindow()); | 624 &status_bounds); |
| 623 shelf_widget_->status_area_widget()->SetBounds( | 625 status_widget->SetBounds(status_bounds); |
| 624 status_window->GetParent()->ConvertRectToScreen(status_bounds)); | |
| 625 | 626 |
| 626 // For crbug.com/622431, when the shelf alignment is BOTTOM_LOCKED, we | 627 // For crbug.com/622431, when the shelf alignment is BOTTOM_LOCKED, we |
| 627 // don't set display work area, as it is not real user-set alignment. | 628 // don't set display work area, as it is not real user-set alignment. |
| 628 if (!state_.IsScreenLocked() && | 629 if (!state_.IsScreenLocked() && |
| 629 wm_shelf_->GetAlignment() != SHELF_ALIGNMENT_BOTTOM_LOCKED && | 630 wm_shelf_->GetAlignment() != SHELF_ALIGNMENT_BOTTOM_LOCKED && |
| 630 change_work_area) { | 631 change_work_area) { |
| 631 gfx::Insets insets; | 632 gfx::Insets insets; |
| 632 // If user session is blocked (login to new user session or add user to | 633 // If user session is blocked (login to new user session or add user to |
| 633 // the existing session - multi-profile) then give 100% of work area only | 634 // the existing session - multi-profile) then give 100% of work area only |
| 634 // if keyboard is not shown. | 635 // if keyboard is not shown. |
| 635 if (!state_.IsAddingSecondaryUser() || !keyboard_bounds_.IsEmpty()) | 636 if (!state_.IsAddingSecondaryUser() || !keyboard_bounds_.IsEmpty()) |
| 636 insets = target_bounds.work_area_insets; | 637 insets = target_bounds.work_area_insets; |
| 638 WmWindow* shelf_window = WmWindow::Get(shelf_widget_->GetNativeWindow()); | |
| 637 ShellPort::Get()->SetDisplayWorkAreaInsets(shelf_window, insets); | 639 ShellPort::Get()->SetDisplayWorkAreaInsets(shelf_window, insets); |
| 638 } | 640 } |
| 639 } | 641 } |
| 640 | 642 |
| 641 // Set an empty border to avoid the shelf view and status area overlapping. | 643 // Set an empty border to avoid the shelf view and status area overlapping. |
| 642 // TODO(msw): Avoid setting bounds of views within the shelf widget here. | 644 // TODO(msw): Avoid setting bounds of views within the shelf widget here. |
| 643 gfx::Rect shelf_bounds = gfx::Rect(target_bounds.shelf_bounds_in_root.size()); | 645 gfx::Rect shelf_bounds = gfx::Rect(target_bounds.shelf_bounds_in_root.size()); |
| 644 shelf_widget_->GetContentsView()->SetBorder(views::CreateEmptyBorder( | 646 shelf_widget_->GetContentsView()->SetBorder(views::CreateEmptyBorder( |
| 645 shelf_bounds.InsetsFrom(target_bounds.shelf_bounds_in_shelf))); | 647 shelf_bounds.InsetsFrom(target_bounds.shelf_bounds_in_shelf))); |
| 646 shelf_widget_->GetContentsView()->Layout(); | 648 shelf_widget_->GetContentsView()->Layout(); |
| 647 | 649 |
| 648 // Setting visibility during an animation causes the visibility property to | 650 // Setting visibility during an animation causes the visibility property to |
| 649 // animate. Set the visibility property without an animation. | 651 // animate. Set the visibility property without an animation. |
| 650 if (target_bounds.status_opacity) | 652 if (target_bounds.status_opacity) |
| 651 shelf_widget_->status_area_widget()->Show(); | 653 status_widget->Show(); |
| 652 } | 654 } |
| 653 | 655 |
| 654 void ShelfLayoutManager::StopAnimating() { | 656 void ShelfLayoutManager::StopAnimating() { |
| 655 GetLayer(shelf_widget_)->GetAnimator()->StopAnimating(); | 657 GetLayer(shelf_widget_)->GetAnimator()->StopAnimating(); |
| 656 GetLayer(shelf_widget_->status_area_widget())->GetAnimator()->StopAnimating(); | 658 GetLayer(shelf_widget_->status_area_widget())->GetAnimator()->StopAnimating(); |
| 657 } | 659 } |
| 658 | 660 |
| 659 void ShelfLayoutManager::CalculateTargetBounds(const State& state, | 661 void ShelfLayoutManager::CalculateTargetBounds(const State& state, |
| 660 TargetBounds* target_bounds) { | 662 TargetBounds* target_bounds) { |
| 661 int shelf_size = kShelfSize; | 663 int shelf_size = kShelfSize; |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 867 } | 869 } |
| 868 | 870 |
| 869 bool ShelfLayoutManager::HasVisibleWindow() const { | 871 bool ShelfLayoutManager::HasVisibleWindow() const { |
| 870 WmWindow* root = | 872 WmWindow* root = |
| 871 WmWindow::Get(shelf_widget_->GetNativeWindow())->GetRootWindow(); | 873 WmWindow::Get(shelf_widget_->GetNativeWindow())->GetRootWindow(); |
| 872 const std::vector<WmWindow*> windows = | 874 const std::vector<WmWindow*> windows = |
| 873 Shell::Get()->mru_window_tracker()->BuildWindowListIgnoreModal(); | 875 Shell::Get()->mru_window_tracker()->BuildWindowListIgnoreModal(); |
| 874 // Process the window list and check if there are any visible windows. | 876 // Process the window list and check if there are any visible windows. |
| 875 // Ignore app list windows that may be animating to hide after dismissal. | 877 // Ignore app list windows that may be animating to hide after dismissal. |
| 876 for (auto* window : windows) { | 878 for (auto* window : windows) { |
| 877 if (window->IsVisible() && !IsAppListWindow(window) && | 879 if (window->IsVisible() && !IsAppListWindow(window->aura_window()) && |
| 878 root->Contains(window)) { | 880 root->Contains(window)) { |
| 879 return true; | 881 return true; |
| 880 } | 882 } |
| 881 } | 883 } |
| 882 return false; | 884 return false; |
| 883 } | 885 } |
| 884 | 886 |
| 885 ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState( | 887 ShelfAutoHideState ShelfLayoutManager::CalculateAutoHideState( |
| 886 ShelfVisibilityState visibility_state) const { | 888 ShelfVisibilityState visibility_state) const { |
| 887 if (visibility_state != SHELF_AUTO_HIDE || !wm_shelf_->IsShelfInitialized()) | 889 if (visibility_state != SHELF_AUTO_HIDE || !wm_shelf_->IsShelfInitialized()) |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 954 if ((state_.auto_hide_state == SHELF_AUTO_HIDE_SHOWN || | 956 if ((state_.auto_hide_state == SHELF_AUTO_HIDE_SHOWN || |
| 955 mouse_over_shelf_when_auto_hide_timer_started_) && | 957 mouse_over_shelf_when_auto_hide_timer_started_) && |
| 956 GetAutoHideShowShelfRegionInScreen().Contains( | 958 GetAutoHideShowShelfRegionInScreen().Contains( |
| 957 cursor_position_in_screen)) { | 959 cursor_position_in_screen)) { |
| 958 return SHELF_AUTO_HIDE_SHOWN; | 960 return SHELF_AUTO_HIDE_SHOWN; |
| 959 } | 961 } |
| 960 | 962 |
| 961 return SHELF_AUTO_HIDE_HIDDEN; | 963 return SHELF_AUTO_HIDE_HIDDEN; |
| 962 } | 964 } |
| 963 | 965 |
| 964 bool ShelfLayoutManager::IsShelfWindow(WmWindow* window) { | 966 bool ShelfLayoutManager::IsShelfWindow(aura::Window* window) { |
| 965 if (!window) | 967 if (!window) |
| 966 return false; | 968 return false; |
| 967 WmWindow* shelf_window = WmWindow::Get(shelf_widget_->GetNativeWindow()); | 969 const aura::Window* shelf_window = shelf_widget_->GetNativeWindow(); |
| 968 WmWindow* status_window = | 970 const aura::Window* status_window = |
| 969 WmWindow::Get(shelf_widget_->status_area_widget()->GetNativeWindow()); | 971 shelf_widget_->status_area_widget()->GetNativeWindow(); |
| 970 return (shelf_window && shelf_window->Contains(window)) || | 972 return (shelf_window && shelf_window->Contains(window)) || |
| 971 (status_window && status_window->Contains(window)); | 973 (status_window && status_window->Contains(window)); |
| 972 } | 974 } |
| 973 | 975 |
| 974 int ShelfLayoutManager::GetWorkAreaInsets(const State& state, int size) const { | 976 int ShelfLayoutManager::GetWorkAreaInsets(const State& state, int size) const { |
| 975 if (state.visibility_state == SHELF_VISIBLE) | 977 if (state.visibility_state == SHELF_VISIBLE) |
| 976 return size; | 978 return size; |
| 977 return 0; | 979 return 0; |
| 978 } | 980 } |
| 979 | 981 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1141 gesture_drag_status_ = GESTURE_DRAG_NONE; | 1143 gesture_drag_status_ = GESTURE_DRAG_NONE; |
| 1142 } | 1144 } |
| 1143 | 1145 |
| 1144 void ShelfLayoutManager::CancelGestureDrag() { | 1146 void ShelfLayoutManager::CancelGestureDrag() { |
| 1145 gesture_drag_status_ = GESTURE_DRAG_CANCEL_IN_PROGRESS; | 1147 gesture_drag_status_ = GESTURE_DRAG_CANCEL_IN_PROGRESS; |
| 1146 UpdateVisibilityState(); | 1148 UpdateVisibilityState(); |
| 1147 gesture_drag_status_ = GESTURE_DRAG_NONE; | 1149 gesture_drag_status_ = GESTURE_DRAG_NONE; |
| 1148 } | 1150 } |
| 1149 | 1151 |
| 1150 } // namespace ash | 1152 } // namespace ash |
| OLD | NEW |