Index: ui/app_list/views/app_list_item_view.cc |
diff --git a/ui/app_list/views/app_list_item_view.cc b/ui/app_list/views/app_list_item_view.cc |
index fa2b1237bb143f3ac45a44f12a5386a3eb958e8c..4baf3798ed1d16000d3bf1d52111353e69c4f012 100644 |
--- a/ui/app_list/views/app_list_item_view.cc |
+++ b/ui/app_list/views/app_list_item_view.cc |
@@ -14,6 +14,7 @@ |
#include "ui/app_list/views/cached_label.h" |
#include "ui/base/accessibility/accessible_view_state.h" |
#include "ui/base/animation/throb_animation.h" |
+#include "ui/base/dragdrop/drag_utils.h" |
#include "ui/base/resource/resource_bundle.h" |
#include "ui/compositor/layer.h" |
#include "ui/compositor/scoped_layer_animation_settings.h" |
@@ -25,6 +26,7 @@ |
#include "ui/views/controls/label.h" |
#include "ui/views/controls/menu/menu_item_view.h" |
#include "ui/views/controls/menu/menu_runner.h" |
+#include "ui/views/drag_controller.h" |
namespace app_list { |
@@ -172,6 +174,14 @@ void AppListItemView::Prerender() { |
title_->PaintToBackingImage(); |
} |
+gfx::ImageSkia AppListItemView::GetDragImage() { |
+ gfx::Canvas canvas(size(), ui::SCALE_FACTOR_100P, false /* is_opaque */); |
+ gfx::Rect bounds(size()); |
+ canvas.DrawColor(SK_ColorTRANSPARENT); |
+ PaintChildren(&canvas); |
+ return gfx::ImageSkia(canvas.ExtractImageRep()); |
+} |
+ |
void AppListItemView::ItemIconChanged() { |
UpdateIcon(); |
} |
@@ -342,15 +352,20 @@ void AppListItemView::OnMouseReleased(const ui::MouseEvent& event) { |
} |
void AppListItemView::OnMouseCaptureLost() { |
+ // We don't cancel the dag on mouse capture lost for windows as entering a |
+ // synchronous drag causes mouse capture to be lost and pressing escape |
+ // dismisses the app list anyway. |
+#if !defined(OS_WIN) |
CustomButton::OnMouseCaptureLost(); |
apps_grid_view_->EndDrag(true); |
mouse_drag_timer_.Stop(); |
SetUIState(UI_STATE_NORMAL); |
+#endif |
} |
bool AppListItemView::OnMouseDragged(const ui::MouseEvent& event) { |
CustomButton::OnMouseDragged(event); |
- apps_grid_view_->UpdateDrag(this, AppsGridView::MOUSE, event); |
+ apps_grid_view_->UpdateDragFromItem(AppsGridView::MOUSE, event); |
// Shows dragging UI when it's confirmed without waiting for the timer. |
if (ui_state_ != UI_STATE_DRAGGING && |
@@ -372,7 +387,7 @@ void AppListItemView::OnGestureEvent(ui::GestureEvent* event) { |
break; |
case ui::ET_GESTURE_SCROLL_UPDATE: |
if (touch_dragging_) { |
- apps_grid_view_->UpdateDrag(this, AppsGridView::TOUCH, *event); |
+ apps_grid_view_->UpdateDragFromItem(AppsGridView::TOUCH, *event); |
event->SetHandled(); |
} |
break; |