Chromium Code Reviews| Index: ash/wm/app_list_controller.cc |
| diff --git a/ash/wm/app_list_controller.cc b/ash/wm/app_list_controller.cc |
| index 6acf1aef33e2e868892ad2757babfeb9d190a142..6d00993648428c5c3c8873916c27280817d429a0 100644 |
| --- a/ash/wm/app_list_controller.cc |
| +++ b/ash/wm/app_list_controller.cc |
| @@ -16,7 +16,11 @@ |
| #include "ui/app_list/app_list_constants.h" |
| #include "ui/app_list/app_list_switches.h" |
| #include "ui/app_list/pagination_model.h" |
| +#include "ui/app_list/views/app_list_main_view.h" |
| #include "ui/app_list/views/app_list_view.h" |
| +#include "ui/app_list/views/apps_container_view.h" |
| +#include "ui/app_list/views/apps_grid_view.h" |
| +#include "ui/app_list/views/contents_view.h" |
| #include "ui/aura/client/focus_client.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_event_dispatcher.h" |
| @@ -153,23 +157,28 @@ int GetMinimumBoundsHeightForAppList(const app_list::AppListView* app_list) { |
| // AppListController, public: |
| AppListController::AppListController() |
| - : pagination_model_(new app_list::PaginationModel), |
| - is_visible_(false), |
| + : is_visible_(false), |
| is_centered_(false), |
| view_(NULL), |
| + pagination_model_(NULL), |
| + current_app_page_(-1), |
| should_snap_back_(false) { |
| Shell::GetInstance()->AddShellObserver(this); |
| - pagination_model_->AddObserver(this); |
| } |
| AppListController::~AppListController() { |
| // Ensures app list view goes before the controller since pagination model |
| // lives in the controller and app list view would access it on destruction. |
| - if (view_ && view_->GetWidget()) |
| - view_->GetWidget()->CloseNow(); |
| + if (view_) { |
| + DCHECK(pagination_model_); |
| + pagination_model_->RemoveObserver(this); |
| + if (view_->GetWidget()) |
| + view_->GetWidget()->CloseNow(); |
| + } else { |
| + DCHECK(!pagination_model_); |
| + } |
| Shell::GetInstance()->RemoveShellObserver(this); |
| - pagination_model_->RemoveObserver(this); |
| } |
| void AppListController::SetVisible(bool visible, aura::Window* window) { |
| @@ -208,7 +217,6 @@ void AppListController::SetVisible(bool visible, aura::Window* window) { |
| // init at (0, 0) and then reset its anchor point. |
| view->InitAsBubbleAtFixedLocation( |
| container, |
| - pagination_model_.get(), |
| gfx::Point(), |
| views::BubbleBorder::FLOAT, |
| true /* border_accepts_events */); |
| @@ -225,7 +233,6 @@ void AppListController::SetVisible(bool visible, aura::Window* window) { |
| applist_button_bounds); |
| view->InitAsBubbleAttachedToAnchor( |
| container, |
| - pagination_model_.get(), |
| Shelf::ForWindow(container)->GetAppListButtonView(), |
| GetAnchorPositionOffsetToShelf(applist_button_bounds, |
| Shelf::ForWindow(container)->GetAppListButtonView()-> |
| @@ -263,6 +270,7 @@ void AppListController::SetDragAndDropHostOfCurrentAppList( |
| void AppListController::SetView(app_list::AppListView* view) { |
| DCHECK(view_ == NULL); |
| + DCHECK(pagination_model_ == NULL); |
| DCHECK(is_visible_); |
| view_ = view; |
| @@ -277,6 +285,15 @@ void AppListController::SetView(app_list::AppListView* view) { |
| widget->GetNativeView()->GetRootWindow()->AddObserver(this); |
| aura::client::GetFocusClient(widget->GetNativeView())->AddObserver(this); |
| + pagination_model_ = view_->app_list_main_view() |
|
tapted
2014/06/02 04:02:21
I think this justifies a GetPaginationModel() acce
Matt Giuca
2014/06/02 07:11:23
Done & Done.
|
| + ->contents_view() |
| + ->apps_container_view() |
| + ->apps_grid_view() |
| + ->GetPaginationModel(); |
| + pagination_model_->AddObserver(this); |
| + if (pagination_model_->is_valid_page(current_app_page_)) |
| + pagination_model_->SelectPage(current_app_page_, false); |
| + |
| view_->ShowWhenReady(); |
| } |
| @@ -295,6 +312,11 @@ void AppListController::ResetView() { |
| Shelf::ForWindow(widget->GetNativeWindow())->RemoveIconObserver(this); |
| widget->GetNativeView()->GetRootWindow()->RemoveObserver(this); |
| aura::client::GetFocusClient(widget->GetNativeView())->RemoveObserver(this); |
| + |
| + DCHECK(pagination_model_); |
| + pagination_model_->RemoveObserver(this); |
| + pagination_model_ = NULL; |
| + |
| view_ = NULL; |
| } |
| @@ -449,6 +471,7 @@ void AppListController::TotalPagesChanged() { |
| void AppListController::SelectedPageChanged(int old_selected, |
| int new_selected) { |
| + current_app_page_ = new_selected; |
| } |
| void AppListController::TransitionStarted() { |
| @@ -459,6 +482,8 @@ void AppListController::TransitionChanged() { |
| if (!view_) |
| return; |
| + DCHECK(pagination_model_); |
| + |
| const app_list::PaginationModel::Transition& transition = |
| pagination_model_->transition(); |
| if (pagination_model_->is_valid_page(transition.target_page)) |