Chromium Code Reviews| Index: ash/common/shelf/shelf_widget.cc |
| diff --git a/ash/common/shelf/shelf_widget.cc b/ash/common/shelf/shelf_widget.cc |
| index 4ebc52eec6e2f401e9dc2457ebc6ad257f9642a1..ac0583592b8d9c567243b39ee95350ba21fd3369 100644 |
| --- a/ash/common/shelf/shelf_widget.cc |
| +++ b/ash/common/shelf/shelf_widget.cc |
| @@ -331,6 +331,12 @@ void ShelfWidget::PostCreateShelf() { |
| // Ensure the newly created |shelf_| gets current values. |
| background_animator_.Initialize(this); |
| + // TODO(jamescook): The IsActiveUserSessionStarted() check may not be needed |
| + // because the shelf is only created after the first user session is active. |
| + // The ShelfView seems to always be visible after login. At the lock screen |
| + // the shelf is hidden because its container is hidden. During auto-hide it is |
| + // hidden because ShelfWidget is transparent. Some of the ShelfView visibility |
| + // code could be simplified. http://crbug.com/674773 |
| shelf_view_->SetVisible( |
| WmShell::Get()->GetSessionStateDelegate()->IsActiveUserSessionStarted()); |
| shelf_layout_manager_->LayoutShelf(); |
| @@ -342,11 +348,6 @@ bool ShelfWidget::IsShelfVisible() const { |
| return shelf_view_ && shelf_view_->visible(); |
| } |
| -void ShelfWidget::SetShelfVisibility(bool visible) { |
| - if (shelf_view_) |
| - shelf_view_->SetVisible(visible); |
| -} |
| - |
| bool ShelfWidget::IsShowingAppList() const { |
| return GetAppListButton() && GetAppListButton()->is_showing_app_list(); |
| } |
| @@ -388,6 +389,9 @@ void ShelfWidget::Shutdown() { |
| } |
| void ShelfWidget::UpdateIconPositionForPanel(WmWindow* panel) { |
| + if (!shelf_view_) |
| + return; |
| + |
| WmWindow* shelf_window = WmLookup::Get()->GetWindowForWidget(this); |
| shelf_view_->UpdatePanelIconPosition( |
| panel->GetIntProperty(WmWindowProperty::SHELF_ID), |
| @@ -396,6 +400,11 @@ void ShelfWidget::UpdateIconPositionForPanel(WmWindow* panel) { |
| } |
| gfx::Rect ShelfWidget::GetScreenBoundsOfItemIconForWindow(WmWindow* window) { |
| + // Window animations can be triggered during session restore before the shelf |
| + // view is created. |
|
msw
2017/01/11 00:54:54
nit: "In that case, return default empty bounds" (
James Cook
2017/01/11 17:03:48
Done.
|
| + if (!shelf_view_) |
| + return gfx::Rect(); |
|
James Cook
2017/01/11 00:39:50
This is the crash fix. It results in the window be
|
| + |
| ShelfID id = window->GetIntProperty(WmWindowProperty::SHELF_ID); |
| gfx::Rect bounds(shelf_view_->GetIdealBoundsOfItemIcon(id)); |
| gfx::Point screen_origin; |