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

Unified Diff: ui/app_list/views/apps_grid_view.cc

Issue 614213004: Refactor app list max folder logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests Created 6 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
« no previous file with comments | « ui/app_list/views/apps_grid_view.h ('k') | ui/app_list/views/apps_grid_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/app_list/views/apps_grid_view.cc
diff --git a/ui/app_list/views/apps_grid_view.cc b/ui/app_list/views/apps_grid_view.cc
index 4971720fe9d2ef355cfeb7fe8b9bf693b1ff3444..cfee46ff2940b084f8b0575930e958dcfe19570b 100644
--- a/ui/app_list/views/apps_grid_view.cc
+++ b/ui/app_list/views/apps_grid_view.cc
@@ -212,7 +212,7 @@ class ItemMoveAnimationDelegate : public gfx::AnimationDelegate {
DISALLOW_COPY_AND_ASSIGN(ItemMoveAnimationDelegate);
};
-// Returns true if the |item| is an folder item.
+// Returns true if the |item| is a folder item.
bool IsFolderItem(AppListItem* item) {
return (item->GetItemType() == AppListFolderItem::kItemType);
}
@@ -1393,20 +1393,42 @@ void AppsGridView::CalculateDropTarget() {
bool AppsGridView::CalculateFolderDropTarget(const gfx::Point& point,
Index* drop_target) const {
+ // Folders can't be dropped into other folders.
+ if (IsFolderItem(drag_view_->item()))
+ return false;
+
+ // A folder drop shouldn't happen on the reorder placeholder since that would
+ // be merging an item with itself.
Index nearest_tile_index(GetNearestTileIndexForPoint(point));
+ if (!IsValidIndex(nearest_tile_index) ||
+ nearest_tile_index == reorder_placeholder_) {
+ return false;
+ }
+
int distance_to_tile_center =
(point - GetExpectedTileBounds(nearest_tile_index.slot).CenterPoint())
.Length();
- if (nearest_tile_index != reorder_placeholder_ &&
- distance_to_tile_center < kFolderDroppingCircleRadius &&
- !IsFolderItem(drag_view_->item()) &&
- CanDropIntoTarget(nearest_tile_index)) {
- *drop_target = nearest_tile_index;
- DCHECK(IsValidIndex(*drop_target));
- return true;
+ if (distance_to_tile_center > kFolderDroppingCircleRadius)
+ return false;
+
+ AppListItemView* target_view =
+ GetViewDisplayedAtSlotOnCurrentPage(nearest_tile_index.slot);
+ if (!target_view)
+ return false;
+
+ AppListItem* target_item = target_view->item();
+
+ // Items can only be dropped into non-folders (which have no children) or
+ // folders that have fewer than the max allowed items.
+ // The OEM folder does not allow drag/drop of other items into it.
+ if (target_item->ChildItemCount() >= kMaxFolderItems ||
+ IsOEMFolderItem(target_item)) {
+ return false;
}
- return false;
+ *drop_target = nearest_tile_index;
+ DCHECK(IsValidIndex(*drop_target));
+ return true;
}
void AppsGridView::CalculateReorderDropTarget(const gfx::Point& point,
@@ -2084,20 +2106,6 @@ bool AppsGridView::EnableFolderDragDropUI() {
return model_->folders_enabled() && !folder_delegate_;
}
-bool AppsGridView::CanDropIntoTarget(const Index& drop_target) const {
- AppListItemView* target_view =
- GetViewDisplayedAtSlotOnCurrentPage(drop_target.slot);
- if (!target_view)
- return false;
-
- AppListItem* target_item = target_view->item();
- // Items can be dropped into non-folders (which have no children) or folders
- // that have fewer than the max allowed items.
- // OEM folder does not allow to drag/drop other items in it.
- return target_item->ChildItemCount() < kMaxFolderItems &&
- !IsOEMFolderItem(target_item);
-}
-
AppsGridView::Index AppsGridView::GetNearestTileIndexForPoint(
const gfx::Point& point) const {
gfx::Rect bounds = GetContentsBounds();
« no previous file with comments | « ui/app_list/views/apps_grid_view.h ('k') | ui/app_list/views/apps_grid_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698