OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/app_list/views/apps_grid_view.h" | 5 #include "ui/app_list/views/apps_grid_view.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
315 | 315 |
316 DISALLOW_COPY_AND_ASSIGN(SynchronousDrag); | 316 DISALLOW_COPY_AND_ASSIGN(SynchronousDrag); |
317 }; | 317 }; |
318 #endif // defined(OS_WIN) | 318 #endif // defined(OS_WIN) |
319 | 319 |
320 AppsGridView::AppsGridView(AppsGridViewDelegate* delegate, | 320 AppsGridView::AppsGridView(AppsGridViewDelegate* delegate, |
321 PaginationModel* pagination_model) | 321 PaginationModel* pagination_model) |
322 : model_(NULL), | 322 : model_(NULL), |
323 item_list_(NULL), | 323 item_list_(NULL), |
324 delegate_(delegate), | 324 delegate_(delegate), |
| 325 folder_delegate_(NULL), |
325 pagination_model_(pagination_model), | 326 pagination_model_(pagination_model), |
326 page_switcher_view_(new PageSwitcher(pagination_model)), | 327 page_switcher_view_(new PageSwitcher(pagination_model)), |
327 cols_(0), | 328 cols_(0), |
328 rows_per_page_(0), | 329 rows_per_page_(0), |
329 selected_view_(NULL), | 330 selected_view_(NULL), |
330 drag_view_(NULL), | 331 drag_view_(NULL), |
331 drag_start_page_(-1), | 332 drag_start_page_(-1), |
332 drag_pointer_(NONE), | 333 drag_pointer_(NONE), |
333 drop_attempt_(DROP_FOR_NONE), | 334 drop_attempt_(DROP_FOR_NONE), |
334 drag_and_drop_host_(NULL), | 335 drag_and_drop_host_(NULL), |
335 forward_events_to_drag_and_drop_host_(false), | 336 forward_events_to_drag_and_drop_host_(false), |
336 page_flip_target_(-1), | 337 page_flip_target_(-1), |
337 page_flip_delay_in_ms_(kPageFlipDelayInMs), | 338 page_flip_delay_in_ms_(kPageFlipDelayInMs), |
338 bounds_animator_(this), | 339 bounds_animator_(this), |
339 is_root_level_(true), | |
340 activated_item_view_(NULL), | 340 activated_item_view_(NULL), |
341 dragging_for_reparent_item_(false), | 341 dragging_for_reparent_item_(false), |
342 weak_factory_(this) { | 342 weak_factory_(this) { |
343 SetPaintToLayer(true); | 343 SetPaintToLayer(true); |
344 SetFillsBoundsOpaquely(false); | 344 SetFillsBoundsOpaquely(false); |
345 | 345 |
346 pagination_model_->AddObserver(this); | 346 pagination_model_->AddObserver(this); |
347 AddChildView(page_switcher_view_); | 347 AddChildView(page_switcher_view_); |
348 } | 348 } |
349 | 349 |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 synchronous_drag_->EndDragExternally(); | 491 synchronous_drag_->EndDragExternally(); |
492 | 492 |
493 synchronous_drag_ = NULL; | 493 synchronous_drag_ = NULL; |
494 #endif | 494 #endif |
495 } | 495 } |
496 | 496 |
497 bool AppsGridView::UpdateDragFromItem(Pointer pointer, | 497 bool AppsGridView::UpdateDragFromItem(Pointer pointer, |
498 const ui::LocatedEvent& event) { | 498 const ui::LocatedEvent& event) { |
499 DCHECK(drag_view_); | 499 DCHECK(drag_view_); |
500 | 500 |
501 if (!is_root_level_) | 501 if (folder_delegate_) |
502 UpdateDragStateInsideFolder(pointer, event); | 502 UpdateDragStateInsideFolder(pointer, event); |
503 | 503 |
504 gfx::Point drag_point_in_grid_view; | 504 gfx::Point drag_point_in_grid_view; |
505 ExtractDragLocation(event, &drag_point_in_grid_view); | 505 ExtractDragLocation(event, &drag_point_in_grid_view); |
506 UpdateDrag(pointer, drag_point_in_grid_view); | 506 UpdateDrag(pointer, drag_point_in_grid_view); |
507 if (!dragging()) | 507 if (!dragging()) |
508 return false; | 508 return false; |
509 | 509 |
510 // If a drag and drop host is provided, see if the drag operation needs to be | 510 // If a drag and drop host is provided, see if the drag operation needs to be |
511 // forwarded. | 511 // forwarded. |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
587 // EndDrag was called before if |drag_view_| is NULL. | 587 // EndDrag was called before if |drag_view_| is NULL. |
588 if (!drag_view_) | 588 if (!drag_view_) |
589 return; | 589 return; |
590 | 590 |
591 // Coming here a drag and drop was in progress. | 591 // Coming here a drag and drop was in progress. |
592 bool landed_in_drag_and_drop_host = forward_events_to_drag_and_drop_host_; | 592 bool landed_in_drag_and_drop_host = forward_events_to_drag_and_drop_host_; |
593 if (forward_events_to_drag_and_drop_host_) { | 593 if (forward_events_to_drag_and_drop_host_) { |
594 DCHECK(!IsDraggingForReparentInRootLevelGridView()); | 594 DCHECK(!IsDraggingForReparentInRootLevelGridView()); |
595 forward_events_to_drag_and_drop_host_ = false; | 595 forward_events_to_drag_and_drop_host_ = false; |
596 drag_and_drop_host_->EndDrag(cancel); | 596 drag_and_drop_host_->EndDrag(cancel); |
597 if (IsDraggingForReprentInHiddenGridView()) { | 597 if (IsDraggingForReparentInHiddenGridView()) |
598 static_cast<AppListFolderView*>(parent())-> | 598 folder_delegate_->DispatchEndDragEventForReparent(true); |
599 DispatchEndDragEventForReparent(true); | |
600 } | |
601 } else if (!cancel && dragging()) { | 599 } else if (!cancel && dragging()) { |
602 if (IsDraggingForReprentInHiddenGridView()) { | 600 if (IsDraggingForReparentInHiddenGridView()) { |
603 // Forward the EndDrag event to the root level grid view. | 601 // Forward the EndDrag event to the root level grid view. |
604 static_cast<AppListFolderView*>(parent())-> | 602 folder_delegate_->DispatchEndDragEventForReparent(false); |
605 DispatchEndDragEventForReparent(false); | |
606 EndDragForReparentInHiddenFolderGridView(); | 603 EndDragForReparentInHiddenFolderGridView(); |
607 return; | 604 return; |
608 } else { | 605 } else { |
609 // Regular drag ending path, ie, not for reparenting. | 606 // Regular drag ending path, ie, not for reparenting. |
610 CalculateDropTarget(last_drag_point_, true); | 607 CalculateDropTarget(last_drag_point_, true); |
611 if (IsValidIndex(drop_target_)) { | 608 if (IsValidIndex(drop_target_)) { |
612 if (!EnableFolderDragDropUI()) { | 609 if (!EnableFolderDragDropUI()) { |
613 MoveItemInModel(drag_view_, drop_target_); | 610 MoveItemInModel(drag_view_, drop_target_); |
614 } else { | 611 } else { |
615 if (drop_attempt_ == DROP_FOR_REORDER) | 612 if (drop_attempt_ == DROP_FOR_REORDER) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 drag_view_ = NULL; | 647 drag_view_ = NULL; |
651 drag_start_grid_view_ = gfx::Point(); | 648 drag_start_grid_view_ = gfx::Point(); |
652 drag_start_page_ = -1; | 649 drag_start_page_ = -1; |
653 drag_view_offset_ = gfx::Point(); | 650 drag_view_offset_ = gfx::Point(); |
654 AnimateToIdealBounds(); | 651 AnimateToIdealBounds(); |
655 | 652 |
656 StopPageFlipTimer(); | 653 StopPageFlipTimer(); |
657 | 654 |
658 // If user releases mouse inside a folder's grid view, burst the folder | 655 // If user releases mouse inside a folder's grid view, burst the folder |
659 // container ink bubble. | 656 // container ink bubble. |
660 if (!cancel && !is_root_level_ && !IsDraggingForReprentInHiddenGridView()) { | 657 if (folder_delegate_ && !IsDraggingForReparentInHiddenGridView()) |
661 static_cast<AppListFolderView*>(parent())-> | 658 folder_delegate_->UpdateFolderViewBackground(false); |
662 UpdateFolderViewBackground(false); | |
663 } | |
664 | 659 |
665 if (IsDraggingForReprentInHiddenGridView()) | 660 if (IsDraggingForReparentInHiddenGridView()) |
666 dragging_for_reparent_item_ = false; | 661 dragging_for_reparent_item_ = false; |
667 } | 662 } |
668 | 663 |
669 void AppsGridView::StopPageFlipTimer() { | 664 void AppsGridView::StopPageFlipTimer() { |
670 page_flip_timer_.Stop(); | 665 page_flip_timer_.Stop(); |
671 page_flip_target_ = -1; | 666 page_flip_target_ = -1; |
672 } | 667 } |
673 | 668 |
674 AppListItemView* AppsGridView::GetItemViewAt(int index) const { | 669 AppListItemView* AppsGridView::GetItemViewAt(int index) const { |
675 DCHECK(index >= 0 && index < view_model_.view_size()); | 670 DCHECK(index >= 0 && index < view_model_.view_size()); |
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 drop_target_ = GetNearestTileForDragView(); | 1270 drop_target_ = GetNearestTileForDragView(); |
1276 } | 1271 } |
1277 } | 1272 } |
1278 | 1273 |
1279 void AppsGridView::OnReorderTimer() { | 1274 void AppsGridView::OnReorderTimer() { |
1280 if (drop_attempt_ == DROP_FOR_REORDER) | 1275 if (drop_attempt_ == DROP_FOR_REORDER) |
1281 AnimateToIdealBounds(); | 1276 AnimateToIdealBounds(); |
1282 } | 1277 } |
1283 | 1278 |
1284 void AppsGridView::OnFolderItemReparentTimer() { | 1279 void AppsGridView::OnFolderItemReparentTimer() { |
1285 DCHECK(!is_root_level_); | 1280 DCHECK(folder_delegate_); |
1286 if (drag_out_of_folder_container_) { | 1281 if (drag_out_of_folder_container_) { |
1287 static_cast<AppListFolderView*>(parent())->ReparentItem( | 1282 folder_delegate_->ReparentItem(drag_view_, last_drag_point_); |
1288 drag_view_, last_drag_point_); | |
1289 | 1283 |
1290 // Set the flag in the folder's grid view. | 1284 // Set the flag in the folder's grid view. |
1291 dragging_for_reparent_item_ = true; | 1285 dragging_for_reparent_item_ = true; |
1292 | 1286 |
1293 // Do not observe any data change since it is going to be hidden. | 1287 // Do not observe any data change since it is going to be hidden. |
1294 item_list_->RemoveObserver(this); | 1288 item_list_->RemoveObserver(this); |
1295 item_list_ = NULL; | 1289 item_list_ = NULL; |
1296 } | 1290 } |
1297 } | 1291 } |
1298 | 1292 |
1299 void AppsGridView::OnFolderDroppingTimer() { | 1293 void AppsGridView::OnFolderDroppingTimer() { |
1300 if (drop_attempt_ == DROP_FOR_FOLDER) | 1294 if (drop_attempt_ == DROP_FOR_FOLDER) |
1301 SetAsFolderDroppingTarget(drop_target_, true); | 1295 SetAsFolderDroppingTarget(drop_target_, true); |
1302 } | 1296 } |
1303 | 1297 |
1304 void AppsGridView::UpdateDragStateInsideFolder( | 1298 void AppsGridView::UpdateDragStateInsideFolder( |
1305 Pointer pointer, | 1299 Pointer pointer, |
1306 const ui::LocatedEvent& event) { | 1300 const ui::LocatedEvent& event) { |
1307 if (IsUnderOEMFolder()) | 1301 if (IsUnderOEMFolder()) |
1308 return; | 1302 return; |
1309 | 1303 |
1310 if (IsDraggingForReprentInHiddenGridView()) { | 1304 if (IsDraggingForReparentInHiddenGridView()) { |
1311 // Dispatch drag event to root level grid view for re-parenting folder | 1305 // Dispatch drag event to root level grid view for re-parenting folder |
1312 // folder item purpose. | 1306 // folder item purpose. |
1313 DispatchDragEventForReparent(pointer, event); | 1307 DispatchDragEventForReparent(pointer, event); |
1314 return; | 1308 return; |
1315 } | 1309 } |
1316 | 1310 |
1317 // Regular drag and drop in a folder's grid view. | 1311 // Regular drag and drop in a folder's grid view. |
1318 AppListFolderView* folder_view = static_cast<AppListFolderView*>(parent()); | 1312 folder_delegate_->UpdateFolderViewBackground(true); |
1319 folder_view->UpdateFolderViewBackground(true); | |
1320 | 1313 |
1321 // Calculate if the drag_view_ is dragged out of the folder's container | 1314 // Calculate if the drag_view_ is dragged out of the folder's container |
1322 // ink bubble. | 1315 // ink bubble. |
1323 gfx::Rect bounds_to_folder_view = ConvertRectToParent(drag_view_->bounds()); | 1316 gfx::Rect bounds_to_folder_view = ConvertRectToParent(drag_view_->bounds()); |
1324 gfx::Point pt = bounds_to_folder_view.CenterPoint(); | 1317 gfx::Point pt = bounds_to_folder_view.CenterPoint(); |
1325 bool is_item_dragged_out_of_folder = | 1318 bool is_item_dragged_out_of_folder = |
1326 folder_view->IsPointOutsideOfFolderBoundray(pt); | 1319 folder_delegate_->IsPointOutsideOfFolderBoundary(pt); |
1327 if (is_item_dragged_out_of_folder) { | 1320 if (is_item_dragged_out_of_folder) { |
1328 if (!drag_out_of_folder_container_) { | 1321 if (!drag_out_of_folder_container_) { |
1329 folder_item_reparent_timer_.Start(FROM_HERE, | 1322 folder_item_reparent_timer_.Start(FROM_HERE, |
1330 base::TimeDelta::FromMilliseconds(kFolderItemReparentDealy), | 1323 base::TimeDelta::FromMilliseconds(kFolderItemReparentDealy), |
1331 this, &AppsGridView::OnFolderItemReparentTimer); | 1324 this, &AppsGridView::OnFolderItemReparentTimer); |
1332 drag_out_of_folder_container_ = true; | 1325 drag_out_of_folder_container_ = true; |
1333 } | 1326 } |
1334 } else { | 1327 } else { |
1335 folder_item_reparent_timer_.Stop(); | 1328 folder_item_reparent_timer_.Stop(); |
1336 drag_out_of_folder_container_ = false; | 1329 drag_out_of_folder_container_ = false; |
1337 } | 1330 } |
1338 } | 1331 } |
1339 | 1332 |
1340 bool AppsGridView::IsDraggingForReparentInRootLevelGridView() const { | 1333 bool AppsGridView::IsDraggingForReparentInRootLevelGridView() const { |
1341 return (is_root_level_ && dragging_for_reparent_item_); | 1334 return (!folder_delegate_ && dragging_for_reparent_item_); |
1342 } | 1335 } |
1343 | 1336 |
1344 bool AppsGridView::IsDraggingForReprentInHiddenGridView() const { | 1337 bool AppsGridView::IsDraggingForReparentInHiddenGridView() const { |
1345 return (!is_root_level_ && dragging_for_reparent_item_); | 1338 return (folder_delegate_ && dragging_for_reparent_item_); |
1346 } | 1339 } |
1347 | 1340 |
1348 gfx::Rect AppsGridView::GetTargetIconRectInFolder( | 1341 gfx::Rect AppsGridView::GetTargetIconRectInFolder( |
1349 AppListItemView* drag_item_view, | 1342 AppListItemView* drag_item_view, |
1350 AppListItemView* folder_item_view) { | 1343 AppListItemView* folder_item_view) { |
1351 gfx::Rect view_ideal_bounds = view_model_.ideal_bounds( | 1344 gfx::Rect view_ideal_bounds = view_model_.ideal_bounds( |
1352 view_model_.GetIndexOfView(folder_item_view)); | 1345 view_model_.GetIndexOfView(folder_item_view)); |
1353 gfx::Rect icon_ideal_bounds = | 1346 gfx::Rect icon_ideal_bounds = |
1354 folder_item_view->GetIconBoundsForTargetViewBounds(view_ideal_bounds); | 1347 folder_item_view->GetIconBoundsForTargetViewBounds(view_ideal_bounds); |
1355 AppListFolderItem* folder_item = | 1348 AppListFolderItem* folder_item = |
1356 static_cast<AppListFolderItem*>(folder_item_view->item()); | 1349 static_cast<AppListFolderItem*>(folder_item_view->item()); |
1357 return folder_item->GetTargetIconRectInFolderForItem( | 1350 return folder_item->GetTargetIconRectInFolderForItem( |
1358 drag_item_view->item(), icon_ideal_bounds); | 1351 drag_item_view->item(), icon_ideal_bounds); |
1359 } | 1352 } |
1360 | 1353 |
1361 bool AppsGridView::IsUnderOEMFolder() { | 1354 bool AppsGridView::IsUnderOEMFolder() { |
1362 if (is_root_level_) | 1355 if (!folder_delegate_) |
1363 return false; | 1356 return false; |
1364 | 1357 |
1365 return static_cast<AppListFolderView*>(parent())->IsOEMFolder(); | 1358 return folder_delegate_->IsOEMFolder(); |
1366 } | 1359 } |
1367 | 1360 |
1368 void AppsGridView::DispatchDragEventForReparent( | 1361 void AppsGridView::DispatchDragEventForReparent( |
1369 Pointer pointer, | 1362 Pointer pointer, |
1370 const ui::LocatedEvent& event) { | 1363 const ui::LocatedEvent& event) { |
1371 static_cast<AppListFolderView*>(parent())-> | 1364 folder_delegate_->DispatchDragEventForReparent(pointer, event); |
1372 DispatchDragEventForReparent(pointer, event); | |
1373 } | 1365 } |
1374 | 1366 |
1375 void AppsGridView::EndDragFromReparentItemInRootLevel( | 1367 void AppsGridView::EndDragFromReparentItemInRootLevel( |
1376 bool events_forwarded_to_drag_drop_host) { | 1368 bool events_forwarded_to_drag_drop_host) { |
1377 // EndDrag was called before if |drag_view_| is NULL. | 1369 // EndDrag was called before if |drag_view_| is NULL. |
1378 if (!drag_view_) | 1370 if (!drag_view_) |
1379 return; | 1371 return; |
1380 | 1372 |
1381 DCHECK(IsDraggingForReparentInRootLevelGridView()); | 1373 DCHECK(IsDraggingForReparentInRootLevelGridView()); |
1382 bool cancel_reparent = false; | 1374 bool cancel_reparent = false; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1445 drop_target_ = Index(); | 1437 drop_target_ = Index(); |
1446 drag_view_->OnDragEnded(); | 1438 drag_view_->OnDragEnded(); |
1447 drag_view_ = NULL; | 1439 drag_view_ = NULL; |
1448 drag_start_grid_view_ = gfx::Point(); | 1440 drag_start_grid_view_ = gfx::Point(); |
1449 drag_start_page_ = -1; | 1441 drag_start_page_ = -1; |
1450 drag_view_offset_ = gfx::Point(); | 1442 drag_view_offset_ = gfx::Point(); |
1451 dragging_for_reparent_item_ = false; | 1443 dragging_for_reparent_item_ = false; |
1452 } | 1444 } |
1453 | 1445 |
1454 void AppsGridView::OnFolderItemRemoved() { | 1446 void AppsGridView::OnFolderItemRemoved() { |
1455 DCHECK(!is_root_level_); | 1447 DCHECK(folder_delegate_); |
1456 item_list_ = NULL; | 1448 item_list_ = NULL; |
1457 } | 1449 } |
1458 | 1450 |
1459 void AppsGridView::StartDragAndDropHostDrag(const gfx::Point& grid_location) { | 1451 void AppsGridView::StartDragAndDropHostDrag(const gfx::Point& grid_location) { |
1460 // When a drag and drop host is given, the item can be dragged out of the app | 1452 // When a drag and drop host is given, the item can be dragged out of the app |
1461 // list window. In that case a proxy widget needs to be used. | 1453 // list window. In that case a proxy widget needs to be used. |
1462 // Note: This code has very likely to be changed for Windows (non metro mode) | 1454 // Note: This code has very likely to be changed for Windows (non metro mode) |
1463 // when a |drag_and_drop_host_| gets implemented. | 1455 // when a |drag_and_drop_host_| gets implemented. |
1464 if (!drag_view_ || !drag_and_drop_host_) | 1456 if (!drag_view_ || !drag_and_drop_host_) |
1465 return; | 1457 return; |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1822 | 1814 |
1823 void AppsGridView::OnListItemRemoved(size_t index, AppListItem* item) { | 1815 void AppsGridView::OnListItemRemoved(size_t index, AppListItem* item) { |
1824 EndDrag(true); | 1816 EndDrag(true); |
1825 | 1817 |
1826 views::View* view = view_model_.view_at(index); | 1818 views::View* view = view_model_.view_at(index); |
1827 view_model_.Remove(index); | 1819 view_model_.Remove(index); |
1828 delete view; | 1820 delete view; |
1829 | 1821 |
1830 // If there is only one item left under the folder, remove the folder. | 1822 // If there is only one item left under the folder, remove the folder. |
1831 // We do allow OEM folder to contain only one item. | 1823 // We do allow OEM folder to contain only one item. |
1832 if (!is_root_level_ && item_list_->item_count() == 1 && !IsUnderOEMFolder()) { | 1824 if (folder_delegate_ && item_list_->item_count() == 1 && |
| 1825 !IsUnderOEMFolder()) { |
1833 std::string folder_id = item_list_->item_at(0)->folder_id(); | 1826 std::string folder_id = item_list_->item_at(0)->folder_id(); |
1834 // TODO(jennyz): Don't remove the folder if this is an OEM folder, this | 1827 // TODO(jennyz): Don't remove the folder if this is an OEM folder, this |
1835 // depends on https://codereview.chromium.org/197403005/. | 1828 // depends on https://codereview.chromium.org/197403005/. |
1836 // Post the delayed task to modify data, so that it won't break the atomic | 1829 // Post the delayed task to modify data, so that it won't break the atomic |
1837 // data operation in the data model of RemoveItemFromFolder which originates | 1830 // data operation in the data model of RemoveItemFromFolder which originates |
1838 // the OnListItemRemove when calling RemoveItem. | 1831 // the OnListItemRemove when calling RemoveItem. |
1839 base::MessageLoopForUI::current()->PostTask( | 1832 base::MessageLoopForUI::current()->PostTask( |
1840 FROM_HERE, | 1833 FROM_HERE, |
1841 base::Bind(&AppsGridView::RemoveFolderIfOnlyOneItemLeft, | 1834 base::Bind(&AppsGridView::RemoveFolderIfOnlyOneItemLeft, |
1842 weak_factory_.GetWeakPtr(), | 1835 weak_factory_.GetWeakPtr(), |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1903 } | 1896 } |
1904 | 1897 |
1905 void AppsGridView::OnImplicitAnimationsCompleted() { | 1898 void AppsGridView::OnImplicitAnimationsCompleted() { |
1906 if (layer()->opacity() == 0.0f) | 1899 if (layer()->opacity() == 0.0f) |
1907 SetVisible(false); | 1900 SetVisible(false); |
1908 } | 1901 } |
1909 | 1902 |
1910 bool AppsGridView::EnableFolderDragDropUI() { | 1903 bool AppsGridView::EnableFolderDragDropUI() { |
1911 // Enable drag and drop folder UI only if it is at the app list root level | 1904 // Enable drag and drop folder UI only if it is at the app list root level |
1912 // and the switch is on and the target folder can still accept new items. | 1905 // and the switch is on and the target folder can still accept new items. |
1913 return switches::IsFolderUIEnabled() && is_root_level_ && | 1906 return switches::IsFolderUIEnabled() && !folder_delegate_ && |
1914 CanDropIntoTarget(drop_target_); | 1907 CanDropIntoTarget(drop_target_); |
1915 } | 1908 } |
1916 | 1909 |
1917 bool AppsGridView::CanDropIntoTarget(const Index& drop_target) { | 1910 bool AppsGridView::CanDropIntoTarget(const Index& drop_target) { |
1918 views::View* target_view = GetViewAtSlotOnCurrentPage(drop_target.slot); | 1911 views::View* target_view = GetViewAtSlotOnCurrentPage(drop_target.slot); |
1919 if (!target_view) | 1912 if (!target_view) |
1920 return true; | 1913 return true; |
1921 | 1914 |
1922 AppListItem* target_item = | 1915 AppListItem* target_item = |
1923 static_cast<AppListItemView*>(target_view)->item(); | 1916 static_cast<AppListItemView*>(target_view)->item(); |
1924 // Items can be dropped into non-folders (which have no children) or folders | 1917 // Items can be dropped into non-folders (which have no children) or folders |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2093 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, | 2086 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, |
2094 bool is_target_folder) { | 2087 bool is_target_folder) { |
2095 AppListItemView* target_view = | 2088 AppListItemView* target_view = |
2096 static_cast<AppListItemView*>( | 2089 static_cast<AppListItemView*>( |
2097 GetViewAtSlotOnCurrentPage(target_index.slot)); | 2090 GetViewAtSlotOnCurrentPage(target_index.slot)); |
2098 if (target_view) | 2091 if (target_view) |
2099 target_view->SetAsAttemptedFolderTarget(is_target_folder); | 2092 target_view->SetAsAttemptedFolderTarget(is_target_folder); |
2100 } | 2093 } |
2101 | 2094 |
2102 } // namespace app_list | 2095 } // namespace app_list |
OLD | NEW |