| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/download/drag_download_item.h" |
| |
| #include "chrome/browser/ui/cocoa/download/download_util_mac.h" |
| #include "content/public/browser/download_item.h" |
| #include "ui/gfx/image/image.h" |
| |
| void DragDownloadItem(const content::DownloadItem* download, |
| gfx::Image* icon, |
| gfx::NativeView view) { |
| DCHECK_EQ(content::DownloadItem::COMPLETE, download->GetState()); |
| NSPasteboard* pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard]; |
| download_util::AddFileToPasteboard(pasteboard, download->GetTargetFilePath()); |
| |
| // Synthesize a drag event, since we don't have access to the actual event |
| // that initiated a drag (possibly consumed by the Web UI, for example). |
| NSPoint position = [[view window] mouseLocationOutsideOfEventStream]; |
| NSTimeInterval eventTime = [[NSApp currentEvent] timestamp]; |
| NSEvent* dragEvent = [NSEvent mouseEventWithType:NSLeftMouseDragged |
| location:position |
| modifierFlags:NSLeftMouseDraggedMask |
| timestamp:eventTime |
| windowNumber:[[view window] windowNumber] |
| context:nil |
| eventNumber:0 |
| clickCount:1 |
| pressure:1.0]; |
| |
| // Run the drag operation. |
| [[view window] dragImage:icon->ToNSImage() |
| at:position |
| offset:NSZeroSize |
| event:dragEvent |
| pasteboard:pasteboard |
| source:view |
| slideBack:YES]; |
| } |