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

Unified Diff: ash/wm/app_list_controller.cc

Issue 302803002: Refactor app list so AppsGridView owns the PaginationModel. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix compile error (conflict). Created 6 years, 6 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
« no previous file with comments | « ash/wm/app_list_controller.h ('k') | chrome/browser/ui/app_list/app_list_shower_views.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..99a0a653f5cef246b6f0e6152b4c25c1e57be1a2 100644
--- a/ash/wm/app_list_controller.cc
+++ b/ash/wm/app_list_controller.cc
@@ -153,23 +153,24 @@ 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),
+ current_apps_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_) {
+ view_->GetAppsPaginationModel()->RemoveObserver(this);
+ if (view_->GetWidget())
+ view_->GetWidget()->CloseNow();
+ }
Shell::GetInstance()->RemoveShellObserver(this);
- pagination_model_->RemoveObserver(this);
}
void AppListController::SetVisible(bool visible, aura::Window* window) {
@@ -206,12 +207,11 @@ void AppListController::SetVisible(bool visible, aura::Window* window) {
if (is_centered_) {
// Note: We can't center the app list until we have its dimensions, so we
// 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 */);
+ view->InitAsBubbleAtFixedLocation(container,
+ current_apps_page_,
+ gfx::Point(),
+ views::BubbleBorder::FLOAT,
+ true /* border_accepts_events */);
// The experimental app list is centered over the display of the app list
// button that was pressed (if triggered via keyboard, this is the display
// with the currently focused window).
@@ -225,11 +225,11 @@ void AppListController::SetVisible(bool visible, aura::Window* window) {
applist_button_bounds);
view->InitAsBubbleAttachedToAnchor(
container,
- pagination_model_.get(),
+ current_apps_page_,
Shelf::ForWindow(container)->GetAppListButtonView(),
- GetAnchorPositionOffsetToShelf(applist_button_bounds,
- Shelf::ForWindow(container)->GetAppListButtonView()->
- GetWidget()),
+ GetAnchorPositionOffsetToShelf(
+ applist_button_bounds,
+ Shelf::ForWindow(container)->GetAppListButtonView()->GetWidget()),
GetBubbleArrow(container),
true /* border_accepts_events */);
view->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
@@ -277,6 +277,8 @@ void AppListController::SetView(app_list::AppListView* view) {
widget->GetNativeView()->GetRootWindow()->AddObserver(this);
aura::client::GetFocusClient(widget->GetNativeView())->AddObserver(this);
+ view_->GetAppsPaginationModel()->AddObserver(this);
+
view_->ShowWhenReady();
}
@@ -295,6 +297,9 @@ void AppListController::ResetView() {
Shelf::ForWindow(widget->GetNativeWindow())->RemoveIconObserver(this);
widget->GetNativeView()->GetRootWindow()->RemoveObserver(this);
aura::client::GetFocusClient(widget->GetNativeView())->RemoveObserver(this);
+
+ view_->GetAppsPaginationModel()->RemoveObserver(this);
+
view_ = NULL;
}
@@ -449,6 +454,7 @@ void AppListController::TotalPagesChanged() {
void AppListController::SelectedPageChanged(int old_selected,
int new_selected) {
+ current_apps_page_ = new_selected;
}
void AppListController::TransitionStarted() {
@@ -459,20 +465,22 @@ void AppListController::TransitionChanged() {
if (!view_)
return;
+ app_list::PaginationModel* pagination_model = view_->GetAppsPaginationModel();
+
const app_list::PaginationModel::Transition& transition =
- pagination_model_->transition();
- if (pagination_model_->is_valid_page(transition.target_page))
+ pagination_model->transition();
+ if (pagination_model->is_valid_page(transition.target_page))
return;
views::Widget* widget = view_->GetWidget();
ui::LayerAnimator* widget_animator = GetLayer(widget)->GetAnimator();
- if (!pagination_model_->IsRevertingCurrentTransition()) {
+ if (!pagination_model->IsRevertingCurrentTransition()) {
// Update cached |view_bounds_| if it is the first over-scroll move and
// widget does not have running animations.
if (!should_snap_back_ && !widget_animator->is_animating())
view_bounds_ = widget->GetWindowBoundsInScreen();
- const int current_page = pagination_model_->selected_page();
+ const int current_page = pagination_model->selected_page();
const int dir = transition.target_page > current_page ? -1 : 1;
const double progress = 1.0 - pow(1.0 - transition.progress, 4);
« no previous file with comments | « ash/wm/app_list_controller.h ('k') | chrome/browser/ui/app_list/app_list_shower_views.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698