Index: ash/shell.cc |
diff --git a/ash/shell.cc b/ash/shell.cc |
index 9297b0e11837c480898cc96def94d34e96648f40..93cd61f0806611e2c3356b26932925973bce778a 100644 |
--- a/ash/shell.cc |
+++ b/ash/shell.cc |
@@ -259,11 +259,11 @@ Shell::~Shell() { |
// TooltipController is deleted with the Shell so removing its references. |
RemovePreTargetHandler(tooltip_controller_.get()); |
- // AppList needs to be released before shelf layout manager, which is |
- // destroyed with launcher container in the loop below. However, app list |
- // container is now on top of launcher container and released after it. |
- // TODO(xiyuan): Move it back when app list container is no longer needed. |
- app_list_controller_.reset(); |
+ // AppList needs to clean up it dependency on Shell and closes its opened |
+ // UI (if any) before closing all RootWindows. However, the controller |
+ // instance is still needed so that sub views (e.g. app menu button on |
+ // the shelf) could properly clean up. |
+ app_list_controller_->Shutdown(); |
// Destroy SystemTrayDelegate before destroying the status area(s). |
system_tray_delegate_->Shutdown(); |
@@ -586,6 +586,10 @@ void Shell::Init() { |
if (!system_tray_delegate_) |
system_tray_delegate_.reset(SystemTrayDelegate::CreateDummyDelegate()); |
+ // Creates app_list_controller_ before the launcher because app list |
+ // button observes it for UI visibility. |
+ app_list_controller_.reset(new internal::AppListController(this)); |
+ |
// Creates StatusAreaWidget. |
root_window_controller->InitForPrimaryDisplay(); |
@@ -636,21 +640,15 @@ void Shell::ShowContextMenu(const gfx::Point& location_in_screen) { |
} |
void Shell::ToggleAppList(aura::Window* window) { |
- // If the context window is not given, show it on the active root window. |
- if (!window) |
- window = GetActiveRootWindow(); |
- if (!app_list_controller_) |
- app_list_controller_.reset(new internal::AppListController); |
- app_list_controller_->SetVisible(!app_list_controller_->IsVisible(), window); |
+ app_list_controller_->Toggle(window); |
} |
bool Shell::GetAppListTargetVisibility() const { |
- return app_list_controller_.get() && |
- app_list_controller_->GetTargetVisibility(); |
+ return app_list_controller_->GetTargetVisibility(); |
} |
aura::Window* Shell::GetAppListWindow() { |
- return app_list_controller_.get() ? app_list_controller_->GetWindow() : NULL; |
+ return app_list_controller_->GetWindow(); |
} |
bool Shell::IsSystemModalWindowOpen() const { |