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

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

Issue 210583004: Make cancelling of app list correctly clean up folder UI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years, 9 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_folder_delegate.h » ('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 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) {
« no previous file with comments | « ui/app_list/views/apps_grid_view.h ('k') | ui/app_list/views/apps_grid_view_folder_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698