Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / app_list / views / apps_container_view.cc
index a56b3a9..a53cb60 100644 (file)
@@ -11,7 +11,6 @@
 #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();
@@ -42,6 +46,8 @@ AppsContainerView::AppsContainerView(AppListMainView* app_list_main_view,
 
   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_);
@@ -54,6 +60,11 @@ AppsContainerView::~AppsContainerView() {
 }
 
 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);
 
@@ -61,11 +72,20 @@ void AppsContainerView::ShowActiveFolder(AppListFolderItem* folder_item) {
 }
 
 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);
@@ -75,11 +95,18 @@ void AppsContainerView::SetDragAndDropHostOfCurrentAppList(
 
 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();
 
@@ -124,8 +151,8 @@ void AppsContainerView::OnTopIconAnimationsComplete() {
 
     // 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);
     }
   }
 }
@@ -145,7 +172,7 @@ void AppsContainerView::SetShowState(ShowState show_state,
         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:
@@ -167,14 +194,15 @@ void AppsContainerView::SetShowState(ShowState show_state,
   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(
@@ -186,6 +214,9 @@ 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);
@@ -206,8 +237,8 @@ void AppsContainerView::PrepareToShowApps(AppListFolderItem* folder_item) {
     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