#include "atom/browser/lib/bluetooth_chooser.h"
#include "atom/browser/native_window.h"
#include "atom/browser/net/atom_network_delegate.h"
+#include "atom/browser/ui/drag_util.h"
#include "atom/browser/web_contents_permission_helper.h"
#include "atom/browser/web_contents_preferences.h"
#include "atom/browser/web_view_guest_delegate.h"
view->EndFrameSubscription();
}
+void WebContents::StartDrag(const base::FilePath& file,
+ mate::Handle<NativeImage> image) {
+ base::MessageLoop::ScopedNestableTaskAllower allow(
+ base::MessageLoop::current());
+ DragItem(file, image->image(), web_contents()->GetNativeView());
+}
+
void WebContents::OnCursorChange(const content::WebCursor& cursor) {
content::WebCursor::CursorInfo info;
cursor.GetCursorInfo(&info);
.SetMethod("beginFrameSubscription",
&WebContents::BeginFrameSubscription)
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
+ .SetMethod("startDrag", &WebContents::StartDrag)
.SetMethod("setSize", &WebContents::SetSize)
.SetMethod("isGuest", &WebContents::IsGuest)
.SetMethod("getType", &WebContents::GetType)
namespace api {
+class NativeImage;
+
class WebContents : public mate::TrackableObject<WebContents>,
public CommonWebContentsDelegate,
public content::WebContentsObserver {
void BeginFrameSubscription(mate::Arguments* args);
void EndFrameSubscription();
+ // Dragging native items.
+ void StartDrag(const base::FilePath& file, mate::Handle<NativeImage> image);
+
// Methods for creating <webview>.
void SetSize(const SetSizeParams& params);
bool IsGuest() const;
--- /dev/null
+// Copyright (c) 2016 GitHub, Inc.
+// Use of this source code is governed by the MIT license that can be
+// found in the LICENSE file.
+
+#ifndef ATOM_BROWSER_UI_DRAG_UTIL_H_
+#define ATOM_BROWSER_UI_DRAG_UTIL_H_
+
+#include "ui/gfx/image/image.h"
+
+namespace base {
+class FilePath;
+}
+
+namespace atom {
+
+void DragItem(const base::FilePath& path,
+ const gfx::Image& icon,
+ gfx::NativeView view);
+
+} // namespace atom
+
+#endif // ATOM_BROWSER_UI_DRAG_UTIL_H_
--- /dev/null
+// Copyright (c) 2016 GitHub, Inc.
+// Use of this source code is governed by the MIT license that can be
+// found in the LICENSE file.
+
+#import <Cocoa/Cocoa.h>
+
+#include "atom/browser/ui/drag_util.h"
+#include "base/files/file_path.h"
+#include "base/strings/sys_string_conversions.h"
+
+namespace atom {
+
+namespace {
+
+// Write information about the file being dragged to the pasteboard.
+void AddFileToPasteboard(NSPasteboard* pasteboard, const base::FilePath& path) {
+ NSString* file = base::SysUTF8ToNSString(path.value());
+ NSArray* fileList = [NSArray arrayWithObject:file];
+ [pasteboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType]
+ owner:nil];
+ [pasteboard setPropertyList:fileList forType:NSFilenamesPboardType];
+}
+
+} // namespace
+
+void DragItem(const base::FilePath& path,
+ const gfx::Image& icon,
+ gfx::NativeView view) {
+ NSPasteboard* pasteboard = [NSPasteboard pasteboardWithName:NSDragPboard];
+ AddFileToPasteboard(pasteboard, path);
+
+ // 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];
+}
+
+} // namespace atom
--- /dev/null
+// Copyright (c) 2016 GitHub, Inc.
+// Use of this source code is governed by the MIT license that can be
+// found in the LICENSE file.
+
+#include "atom/browser/ui/drag_util.h"
+
+namespace atom {
+
+
+
+} // namespace atom
'atom/browser/ui/atom_menu_model.h',
'atom/browser/ui/cocoa/atom_menu_controller.h',
'atom/browser/ui/cocoa/atom_menu_controller.mm',
+ 'atom/browser/ui/drag_util_mac.mm',
+ 'atom/browser/ui/drag_util_views.cc',
+ 'atom/browser/ui/drag_util.h',
'atom/browser/ui/file_dialog.h',
'atom/browser/ui/file_dialog_gtk.cc',
'atom/browser/ui/file_dialog_mac.mm',