| 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 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 // we'll enter the synchronous drag. | 549 // we'll enter the synchronous drag. |
| 550 // NOTE we don't Run() the drag here because that causes animations not to | 550 // NOTE we don't Run() the drag here because that causes animations not to |
| 551 // update for some reason. | 551 // update for some reason. |
| 552 synchronous_drag_->set_shortcut_path(path); | 552 synchronous_drag_->set_shortcut_path(path); |
| 553 DCHECK(synchronous_drag_->CanRun()); | 553 DCHECK(synchronous_drag_->CanRun()); |
| 554 } | 554 } |
| 555 #endif | 555 #endif |
| 556 | 556 |
| 557 bool AppsGridView::UpdateDragFromItem(Pointer pointer, | 557 bool AppsGridView::UpdateDragFromItem(Pointer pointer, |
| 558 const ui::LocatedEvent& event) { | 558 const ui::LocatedEvent& event) { |
| 559 DCHECK(drag_view_); | 559 if (!drag_view_) |
| 560 return false; // Drag canceled. |
| 560 | 561 |
| 561 gfx::Point drag_point_in_grid_view; | 562 gfx::Point drag_point_in_grid_view; |
| 562 ExtractDragLocation(event, &drag_point_in_grid_view); | 563 ExtractDragLocation(event, &drag_point_in_grid_view); |
| 563 UpdateDrag(pointer, drag_point_in_grid_view); | 564 UpdateDrag(pointer, drag_point_in_grid_view); |
| 564 if (!dragging()) | 565 if (!dragging()) |
| 565 return false; | 566 return false; |
| 566 | 567 |
| 567 // If a drag and drop host is provided, see if the drag operation needs to be | 568 // If a drag and drop host is provided, see if the drag operation needs to be |
| 568 // forwarded. | 569 // forwarded. |
| 569 gfx::Point location_in_screen = drag_point_in_grid_view; | 570 gfx::Point location_in_screen = drag_point_in_grid_view; |
| 570 views::View::ConvertPointToScreen(this, &location_in_screen); | 571 views::View::ConvertPointToScreen(this, &location_in_screen); |
| 571 DispatchDragEventToDragAndDropHost(location_in_screen); | 572 DispatchDragEventToDragAndDropHost(location_in_screen); |
| 572 if (drag_and_drop_host_) | 573 if (drag_and_drop_host_) |
| 573 drag_and_drop_host_->UpdateDragIconProxy(location_in_screen); | 574 drag_and_drop_host_->UpdateDragIconProxy(location_in_screen); |
| 574 return true; | 575 return true; |
| 575 } | 576 } |
| 576 | 577 |
| 577 void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) { | 578 void AppsGridView::UpdateDrag(Pointer pointer, const gfx::Point& point) { |
| 578 if (folder_delegate_) | 579 if (folder_delegate_) |
| 579 UpdateDragStateInsideFolder(pointer, point); | 580 UpdateDragStateInsideFolder(pointer, point); |
| 580 | 581 |
| 581 // EndDrag was called before if |drag_view_| is NULL. | |
| 582 if (!drag_view_) | 582 if (!drag_view_) |
| 583 return; | 583 return; // Drag canceled. |
| 584 | 584 |
| 585 if (RunSynchronousDrag()) | 585 if (RunSynchronousDrag()) |
| 586 return; | 586 return; |
| 587 | 587 |
| 588 gfx::Vector2d drag_vector(point - drag_start_grid_view_); | 588 gfx::Vector2d drag_vector(point - drag_start_grid_view_); |
| 589 if (!dragging() && ExceededDragThreshold(drag_vector)) { | 589 if (!dragging() && ExceededDragThreshold(drag_vector)) { |
| 590 drag_pointer_ = pointer; | 590 drag_pointer_ = pointer; |
| 591 // Move the view to the front so that it appears on top of other views. | 591 // Move the view to the front so that it appears on top of other views. |
| 592 ReorderChildView(drag_view_, -1); | 592 ReorderChildView(drag_view_, -1); |
| 593 bounds_animator_.StopAnimatingView(drag_view_); | 593 bounds_animator_.StopAnimatingView(drag_view_); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 } else { | 667 } else { |
| 668 if (IsDraggingForReparentInHiddenGridView()) { | 668 if (IsDraggingForReparentInHiddenGridView()) { |
| 669 // Forward the EndDrag event to the root level grid view. | 669 // Forward the EndDrag event to the root level grid view. |
| 670 folder_delegate_->DispatchEndDragEventForReparent( | 670 folder_delegate_->DispatchEndDragEventForReparent( |
| 671 false /* events_forwarded_to_drag_drop_host */, | 671 false /* events_forwarded_to_drag_drop_host */, |
| 672 cancel /* cancel_drag */); | 672 cancel /* cancel_drag */); |
| 673 EndDragForReparentInHiddenFolderGridView(); | 673 EndDragForReparentInHiddenFolderGridView(); |
| 674 return; | 674 return; |
| 675 } | 675 } |
| 676 | 676 |
| 677 if (IsDraggingForReparentInRootLevelGridView()) { |
| 678 // An EndDrag can be received during a reparent via a model change. This |
| 679 // is always a cancel and needs to be forwarded to the folder. |
| 680 DCHECK(cancel); |
| 681 delegate_->CancelDragInActiveFolder(); |
| 682 return; |
| 683 } |
| 684 |
| 677 if (!cancel && dragging()) { | 685 if (!cancel && dragging()) { |
| 678 // Regular drag ending path, ie, not for reparenting. | 686 // Regular drag ending path, ie, not for reparenting. |
| 679 CalculateDropTarget(last_drag_point_, true); | 687 CalculateDropTarget(last_drag_point_, true); |
| 680 if (IsValidIndex(drop_target_)) { | 688 if (IsValidIndex(drop_target_)) { |
| 681 if (!EnableFolderDragDropUI()) { | 689 if (!EnableFolderDragDropUI()) { |
| 682 MoveItemInModel(drag_view_, drop_target_); | 690 MoveItemInModel(drag_view_, drop_target_); |
| 683 } else { | 691 } else { |
| 684 if (drop_attempt_ == DROP_FOR_REORDER) | 692 if (drop_attempt_ == DROP_FOR_REORDER) |
| 685 MoveItemInModel(drag_view_, drop_target_); | 693 MoveItemInModel(drag_view_, drop_target_); |
| 686 else if (drop_attempt_ == DROP_FOR_FOLDER) | 694 else if (drop_attempt_ == DROP_FOR_FOLDER) |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 790 drag_start_grid_view_ = drag_point; | 798 drag_start_grid_view_ = drag_point; |
| 791 | 799 |
| 792 drag_view_start_ = gfx::Point(drag_view_->x(), drag_view_->y()); | 800 drag_view_start_ = gfx::Point(drag_view_->x(), drag_view_->y()); |
| 793 | 801 |
| 794 // Set the flag in root level grid view. | 802 // Set the flag in root level grid view. |
| 795 dragging_for_reparent_item_ = true; | 803 dragging_for_reparent_item_ = true; |
| 796 } | 804 } |
| 797 | 805 |
| 798 void AppsGridView::UpdateDragFromReparentItem(Pointer pointer, | 806 void AppsGridView::UpdateDragFromReparentItem(Pointer pointer, |
| 799 const gfx::Point& drag_point) { | 807 const gfx::Point& drag_point) { |
| 808 // Note that if a cancel ocurrs while reparenting, the |drag_view_| in both |
| 809 // root and folder grid views is cleared, so the check in UpdateDragFromItem() |
| 810 // for |drag_view_| being NULL (in the folder grid) is sufficient. |
| 800 DCHECK(drag_view_); | 811 DCHECK(drag_view_); |
| 801 DCHECK(IsDraggingForReparentInRootLevelGridView()); | 812 DCHECK(IsDraggingForReparentInRootLevelGridView()); |
| 802 | 813 |
| 803 UpdateDrag(pointer, drag_point); | 814 UpdateDrag(pointer, drag_point); |
| 804 } | 815 } |
| 805 | 816 |
| 806 bool AppsGridView::IsDraggedView(const views::View* view) const { | 817 bool AppsGridView::IsDraggedView(const views::View* view) const { |
| 807 return drag_view_ == view; | 818 return drag_view_ == view; |
| 808 } | 819 } |
| 809 | 820 |
| (...skipping 1354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2164 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, | 2175 void AppsGridView::SetAsFolderDroppingTarget(const Index& target_index, |
| 2165 bool is_target_folder) { | 2176 bool is_target_folder) { |
| 2166 AppListItemView* target_view = | 2177 AppListItemView* target_view = |
| 2167 static_cast<AppListItemView*>( | 2178 static_cast<AppListItemView*>( |
| 2168 GetViewAtSlotOnCurrentPage(target_index.slot)); | 2179 GetViewAtSlotOnCurrentPage(target_index.slot)); |
| 2169 if (target_view) | 2180 if (target_view) |
| 2170 target_view->SetAsAttemptedFolderTarget(is_target_folder); | 2181 target_view->SetAsAttemptedFolderTarget(is_target_folder); |
| 2171 } | 2182 } |
| 2172 | 2183 |
| 2173 } // namespace app_list | 2184 } // namespace app_list |
| OLD | NEW |