#include "ui/app_list/app_list_constants.h"
#include "ui/app_list/app_list_folder_item.h"
#include "ui/app_list/app_list_switches.h"
-#include "ui/app_list/pagination_model.h"
#include "ui/app_list/views/app_list_folder_view.h"
#include "ui/app_list/views/app_list_item_view.h"
#include "ui/app_list/views/app_list_main_view.h"
namespace app_list {
AppsContainerView::AppsContainerView(AppListMainView* app_list_main_view,
- PaginationModel* pagination_model,
AppListModel* model)
: model_(model),
- show_state_(SHOW_APPS),
+ show_state_(SHOW_NONE),
top_icon_animation_pending_count_(0) {
- apps_grid_view_ = new AppsGridView(app_list_main_view, pagination_model);
- int cols = kPreferredCols;
- int rows = kPreferredRows;
- if (app_list::switches::IsExperimentalAppListPositionEnabled()) {
+ apps_grid_view_ = new AppsGridView(app_list_main_view);
+ int cols;
+ int rows;
+ if (switches::IsExperimentalAppListEnabled()) {
cols = kExperimentalPreferredCols;
rows = kExperimentalPreferredRows;
+ } else if (app_list_main_view->ShouldCenterWindow()) {
+ cols = kCenteredPreferredCols;
+ rows = kCenteredPreferredRows;
+ } else {
+ cols = kPreferredCols;
+ rows = kPreferredRows;
}
- apps_grid_view_->SetLayout(kPreferredIconDimension, cols, rows);
+ apps_grid_view_->SetLayout(cols, rows);
AddChildView(apps_grid_view_);
folder_background_view_ = new FolderBackgroundView();
app_list_folder_view_ =
new AppListFolderView(this, model, app_list_main_view);
+ // The folder view is initially hidden.
+ app_list_folder_view_->SetVisible(false);
AddChildView(app_list_folder_view_);
apps_grid_view_->SetModel(model_);
}
void AppsContainerView::ShowActiveFolder(AppListFolderItem* folder_item) {
+ // Prevent new animations from starting if there are currently animations
+ // pending. This fixes crbug.com/357099.
+ if (top_icon_animation_pending_count_)
+ return;
+
app_list_folder_view_->SetAppListFolderItem(folder_item);
SetShowState(SHOW_ACTIVE_FOLDER, false);
}
void AppsContainerView::ShowApps(AppListFolderItem* folder_item) {
+ if (top_icon_animation_pending_count_)
+ return;
+
PrepareToShowApps(folder_item);
SetShowState(SHOW_APPS,
true); /* show apps with animation */
}
+void AppsContainerView::ResetForShowApps() {
+ SetShowState(SHOW_APPS, false /* show apps without animation */);
+ folder_background_view_->UpdateFolderContainerBubble(
+ FolderBackgroundView::NO_BUBBLE);
+}
+
void AppsContainerView::SetDragAndDropHostOfCurrentAppList(
ApplicationDragAndDropHost* drag_and_drop_host) {
apps_grid_view()->SetDragAndDropHostOfCurrentAppList(drag_and_drop_host);
void AppsContainerView::ReparentFolderItemTransit(
AppListFolderItem* folder_item) {
+ if (top_icon_animation_pending_count_)
+ return;
+
PrepareToShowApps(folder_item);
SetShowState(SHOW_ITEM_REPARENT, false);
}
-gfx::Size AppsContainerView::GetPreferredSize() {
+bool AppsContainerView::IsInFolderView() const {
+ return show_state_ == SHOW_ACTIVE_FOLDER;
+}
+
+gfx::Size AppsContainerView::GetPreferredSize() const {
const gfx::Size grid_size = apps_grid_view_->GetPreferredSize();
const gfx::Size folder_view_size = app_list_folder_view_->GetPreferredSize();
// Show the folder icon when closing the folder.
if ((show_state_ == SHOW_APPS || show_state_ == SHOW_ITEM_REPARENT) &&
- apps_grid_view_->activated_item_view()) {
- apps_grid_view_->activated_item_view()->SetVisible(true);
+ apps_grid_view_->activated_folder_item_view()) {
+ apps_grid_view_->activated_folder_item_view()->SetVisible(true);
}
}
}
apps_grid_view_->ScheduleShowHideAnimation(true);
} else {
app_list_folder_view_->HideViewImmediately();
- apps_grid_view_->SetVisible(true);
+ apps_grid_view_->ResetForShowApps();
}
break;
case SHOW_ACTIVE_FOLDER:
Layout();
}
-Rects AppsContainerView::GetTopItemIconBoundsInActiveFolder() {
+std::vector<gfx::Rect> AppsContainerView::GetTopItemIconBoundsInActiveFolder() {
// Get the active folder's icon bounds relative to AppsContainerView.
- AppListItemView* folder_item_view = apps_grid_view_->activated_item_view();
+ AppListItemView* folder_item_view =
+ apps_grid_view_->activated_folder_item_view();
gfx::Rect to_grid_view = folder_item_view->ConvertRectToParent(
folder_item_view->GetIconBounds());
gfx::Rect to_container = apps_grid_view_->ConvertRectToParent(to_grid_view);
- return AppListFolderItem::GetTopIconsBounds(to_container);
+ return FolderImage::GetTopIconsBounds(to_container);
}
void AppsContainerView::CreateViewsForFolderTopItemsAnimation(
top_icon_animation_pending_count_ =
std::min(kNumFolderTopItems, active_folder->item_list()->item_count());
for (size_t i = 0; i < top_icon_animation_pending_count_; ++i) {
+ if (active_folder->GetTopIcon(i).isNull())
+ continue;
+
TopIconAnimationView* icon_view = new TopIconAnimationView(
active_folder->GetTopIcon(i), top_items_bounds[i], open_folder);
icon_view->AddObserver(this);
CreateViewsForFolderTopItemsAnimation(folder_item, false);
// Hide the active folder item until the animation completes.
- if (apps_grid_view_->activated_item_view())
- apps_grid_view_->activated_item_view()->SetVisible(false);
+ if (apps_grid_view_->activated_folder_item_view())
+ apps_grid_view_->activated_folder_item_view()->SetVisible(false);
}
} // namespace app_list