Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2582)

Unified Diff: ash/shell.cc

Issue 25823002: Refactor LauncherItemController and LauncherItemDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/shell.cc
diff --git a/ash/shell.cc b/ash/shell.cc
index 92a81d5fd6447f142ed113762149b7a5cbeaf6d4..1212df5fde5219efabb9d8e466daabc967fcf1e9 100644
--- a/ash/shell.cc
+++ b/ash/shell.cc
@@ -38,6 +38,7 @@
#include "ash/session_state_delegate.h"
#include "ash/shelf/app_list_shelf_item_delegate.h"
#include "ash/shelf/shelf_layout_manager.h"
+#include "ash/shelf/shelf_util.h"
#include "ash/shelf/shelf_widget.h"
#include "ash/shell_delegate.h"
#include "ash/shell_factory.h"
@@ -484,13 +485,30 @@ SystemTray* Shell::GetPrimarySystemTray() {
LauncherDelegate* Shell::GetLauncherDelegate() {
if (!launcher_delegate_) {
- // Creates LauncherItemDelegateManager before LauncherDelegate.
- launcher_item_delegate_manager_.reset(new LauncherItemDelegateManager);
launcher_model_.reset(new LauncherModel);
+ // Creates LauncherItemDelegateManager before LauncherDelegate.
+ launcher_item_delegate_manager_.reset(
+ new LauncherItemDelegateManager(launcher_model_.get()));
+
launcher_delegate_.reset(
delegate_->CreateLauncherDelegate(launcher_model_.get()));
- app_list_shelf_item_delegate_.reset(
+ scoped_ptr<LauncherItemDelegate> controller(
new internal::AppListShelfItemDelegate);
+
+ ash::LauncherID app_list_id = 0;
+ // TODO(simon.hong81): Make function for this in shelf_util.h
+ // Finding the launcher model's location of the app list and setting its
+ // LauncherItemDelegate.
+ for (size_t i = 0; i < launcher_model_->items().size(); ++i) {
+ if (launcher_model_->items()[i].type == ash::TYPE_APP_LIST) {
+ app_list_id = launcher_model_->items()[i].id;
+ break;
+ }
+ }
+ DCHECK(app_list_id);
+ launcher_item_delegate_manager_->SetLauncherItemDelegate(
+ app_list_id,
+ controller.Pass());
}
return launcher_delegate_.get();
}
@@ -644,6 +662,9 @@ Shell::~Shell() {
user_action_client_.reset();
visibility_controller_.reset();
launcher_delegate_.reset();
+ // |launcher_item_delegate_manager_| observes |launcher_model_|. It must be
+ // destroyed before |launcher_model_| is destroyed.
+ launcher_item_delegate_manager_.reset();
launcher_model_.reset();
video_detector_.reset();

Powered by Google App Engine
This is Rietveld 408576698