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 da22ef08949ef5e2443abb2fad20e0fade5e39ac..54432e5381809956d7e02bf6e6b40803fadb8444 100644 |
--- a/ui/app_list/views/apps_grid_view.cc |
+++ b/ui/app_list/views/apps_grid_view.cc |
@@ -322,6 +322,7 @@ AppsGridView::AppsGridView(AppsGridViewDelegate* delegate, |
: model_(NULL), |
item_list_(NULL), |
delegate_(delegate), |
+ folder_delegate_(NULL), |
pagination_model_(pagination_model), |
page_switcher_view_(new PageSwitcher(pagination_model)), |
cols_(0), |
@@ -336,7 +337,6 @@ AppsGridView::AppsGridView(AppsGridViewDelegate* delegate, |
page_flip_target_(-1), |
page_flip_delay_in_ms_(kPageFlipDelayInMs), |
bounds_animator_(this), |
- is_root_level_(true), |
activated_item_view_(NULL), |
dragging_for_reparent_item_(false), |
weak_factory_(this) { |
@@ -498,7 +498,7 @@ bool AppsGridView::UpdateDragFromItem(Pointer pointer, |
const ui::LocatedEvent& event) { |
DCHECK(drag_view_); |
- if (!is_root_level_) |
+ if (folder_delegate_) |
UpdateDragStateInsideFolder(pointer, event); |
gfx::Point drag_point_in_grid_view; |
@@ -594,15 +594,12 @@ void AppsGridView::EndDrag(bool cancel) { |
DCHECK(!IsDraggingForReparentInRootLevelGridView()); |
forward_events_to_drag_and_drop_host_ = false; |
drag_and_drop_host_->EndDrag(cancel); |
- if (IsDraggingForReprentInHiddenGridView()) { |
- static_cast<AppListFolderView*>(parent())-> |
- DispatchEndDragEventForReparent(true); |
- } |
+ if (IsDraggingForReparentInHiddenGridView()) |
+ folder_delegate_->DispatchEndDragEventForReparent(true); |
} else if (!cancel && dragging()) { |
- if (IsDraggingForReprentInHiddenGridView()) { |
+ if (IsDraggingForReparentInHiddenGridView()) { |
// Forward the EndDrag event to the root level grid view. |
- static_cast<AppListFolderView*>(parent())-> |
- DispatchEndDragEventForReparent(false); |
+ folder_delegate_->DispatchEndDragEventForReparent(false); |
EndDragForReparentInHiddenFolderGridView(); |
return; |
} else { |
@@ -657,12 +654,10 @@ void AppsGridView::EndDrag(bool cancel) { |
// If user releases mouse inside a folder's grid view, burst the folder |
// container ink bubble. |
- if (!cancel && !is_root_level_ && !IsDraggingForReprentInHiddenGridView()) { |
- static_cast<AppListFolderView*>(parent())-> |
- UpdateFolderViewBackground(false); |
- } |
+ if (folder_delegate_ && !IsDraggingForReparentInHiddenGridView()) |
+ folder_delegate_->UpdateFolderViewBackground(false); |
- if (IsDraggingForReprentInHiddenGridView()) |
+ if (IsDraggingForReparentInHiddenGridView()) |
dragging_for_reparent_item_ = false; |
} |
@@ -1282,10 +1277,9 @@ void AppsGridView::OnReorderTimer() { |
} |
void AppsGridView::OnFolderItemReparentTimer() { |
- DCHECK(!is_root_level_); |
+ DCHECK(folder_delegate_); |
if (drag_out_of_folder_container_) { |
- static_cast<AppListFolderView*>(parent())->ReparentItem( |
- drag_view_, last_drag_point_); |
+ folder_delegate_->ReparentItem(drag_view_, last_drag_point_); |
// Set the flag in the folder's grid view. |
dragging_for_reparent_item_ = true; |
@@ -1307,7 +1301,7 @@ void AppsGridView::UpdateDragStateInsideFolder( |
if (IsUnderOEMFolder()) |
return; |
- if (IsDraggingForReprentInHiddenGridView()) { |
+ if (IsDraggingForReparentInHiddenGridView()) { |
// Dispatch drag event to root level grid view for re-parenting folder |
// folder item purpose. |
DispatchDragEventForReparent(pointer, event); |
@@ -1315,15 +1309,14 @@ void AppsGridView::UpdateDragStateInsideFolder( |
} |
// Regular drag and drop in a folder's grid view. |
- AppListFolderView* folder_view = static_cast<AppListFolderView*>(parent()); |
- folder_view->UpdateFolderViewBackground(true); |
+ folder_delegate_->UpdateFolderViewBackground(true); |
// Calculate if the drag_view_ is dragged out of the folder's container |
// ink bubble. |
gfx::Rect bounds_to_folder_view = ConvertRectToParent(drag_view_->bounds()); |
gfx::Point pt = bounds_to_folder_view.CenterPoint(); |
bool is_item_dragged_out_of_folder = |
- folder_view->IsPointOutsideOfFolderBoundray(pt); |
+ folder_delegate_->IsPointOutsideOfFolderBoundary(pt); |
if (is_item_dragged_out_of_folder) { |
if (!drag_out_of_folder_container_) { |
folder_item_reparent_timer_.Start(FROM_HERE, |
@@ -1338,11 +1331,11 @@ void AppsGridView::UpdateDragStateInsideFolder( |
} |
bool AppsGridView::IsDraggingForReparentInRootLevelGridView() const { |
- return (is_root_level_ && dragging_for_reparent_item_); |
+ return (!folder_delegate_ && dragging_for_reparent_item_); |
} |
-bool AppsGridView::IsDraggingForReprentInHiddenGridView() const { |
- return (!is_root_level_ && dragging_for_reparent_item_); |
+bool AppsGridView::IsDraggingForReparentInHiddenGridView() const { |
+ return (folder_delegate_ && dragging_for_reparent_item_); |
} |
gfx::Rect AppsGridView::GetTargetIconRectInFolder( |
@@ -1359,17 +1352,16 @@ gfx::Rect AppsGridView::GetTargetIconRectInFolder( |
} |
bool AppsGridView::IsUnderOEMFolder() { |
- if (is_root_level_) |
+ if (!folder_delegate_) |
return false; |
- return static_cast<AppListFolderView*>(parent())->IsOEMFolder(); |
+ return folder_delegate_->IsOEMFolder(); |
} |
void AppsGridView::DispatchDragEventForReparent( |
Pointer pointer, |
const ui::LocatedEvent& event) { |
- static_cast<AppListFolderView*>(parent())-> |
- DispatchDragEventForReparent(pointer, event); |
+ folder_delegate_->DispatchDragEventForReparent(pointer, event); |
} |
void AppsGridView::EndDragFromReparentItemInRootLevel( |
@@ -1452,7 +1444,7 @@ void AppsGridView::EndDragForReparentInHiddenFolderGridView() { |
} |
void AppsGridView::OnFolderItemRemoved() { |
- DCHECK(!is_root_level_); |
+ DCHECK(folder_delegate_); |
item_list_ = NULL; |
} |
@@ -1829,7 +1821,8 @@ void AppsGridView::OnListItemRemoved(size_t index, AppListItem* item) { |
// If there is only one item left under the folder, remove the folder. |
// We do allow OEM folder to contain only one item. |
- if (!is_root_level_ && item_list_->item_count() == 1 && !IsUnderOEMFolder()) { |
+ if (folder_delegate_ && item_list_->item_count() == 1 && |
+ !IsUnderOEMFolder()) { |
std::string folder_id = item_list_->item_at(0)->folder_id(); |
// TODO(jennyz): Don't remove the folder if this is an OEM folder, this |
// depends on https://codereview.chromium.org/197403005/. |
@@ -1910,8 +1903,8 @@ void AppsGridView::OnImplicitAnimationsCompleted() { |
bool AppsGridView::EnableFolderDragDropUI() { |
// Enable drag and drop folder UI only if it is at the app list root level |
// and the switch is on and the target folder can still accept new items. |
- return switches::IsFolderUIEnabled() && is_root_level_ && |
- CanDropIntoTarget(drop_target_); |
+ return switches::IsFolderUIEnabled() && !folder_delegate_ && |
+ CanDropIntoTarget(drop_target_); |
} |
bool AppsGridView::CanDropIntoTarget(const Index& drop_target) { |