From 0f414c8ac8cb5bfec072eb015646a9ee38fd672d Mon Sep 17 00:00:00 2001 From: Marshall Greenblatt Date: Tue, 2 Aug 2011 17:30:11 +0000 Subject: [PATCH] Mac: Add support for disabling HTML5 drag&drop by setting CefBrowserSettings.drag_drop_disabled to true (issue #140). git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@270 5089003a-bbd8-11dd-ad1f-f1f9622dbc98 --- libcef/browser_impl_mac.mm | 3 +++ libcef/browser_webview_delegate_mac.mm | 5 +++++ libcef/browser_webview_mac.h | 3 +++ libcef/browser_webview_mac.mm | 16 +++++++++------- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/libcef/browser_impl_mac.mm b/libcef/browser_impl_mac.mm index 757bf8091..0b80a8a20 100644 --- a/libcef/browser_impl_mac.mm +++ b/libcef/browser_impl_mac.mm @@ -94,6 +94,9 @@ void CefBrowserImpl::UIT_CreateBrowser(const CefString& url) browserView.browser = this; window_info_.m_View = browserView; + if (!settings_.drag_drop_disabled) + [browserView registerDragDrop]; + Unlock(); if (newWnd != nil && !window_info_.m_bHidden) { diff --git a/libcef/browser_webview_delegate_mac.mm b/libcef/browser_webview_delegate_mac.mm index fcc6fd32c..fee6a238f 100644 --- a/libcef/browser_webview_delegate_mac.mm +++ b/libcef/browser_webview_delegate_mac.mm @@ -125,6 +125,11 @@ void BrowserWebViewDelegate::startDragging(const WebDragData& data, WebDragOperationsMask mask, const WebImage& image, const WebPoint& image_offset) { + if (browser_->settings().drag_drop_disabled) { + browser_->UIT_GetWebView()->dragSourceSystemDragEnded(); + return; + } + WebWidgetHost* host = GetWidgetHost(); if (!host) return; diff --git a/libcef/browser_webview_mac.h b/libcef/browser_webview_mac.h index 3c65df29f..eff4725fc 100644 --- a/libcef/browser_webview_mac.h +++ b/libcef/browser_webview_mac.h @@ -40,6 +40,9 @@ struct WebDropData; - (BOOL)isOpaque; - (void)setFrame:(NSRect)frameRect; +// Register this WebView as a drag/drop target. +- (void)registerDragDrop; + // Called from BrowserWebViewDelegate::startDragging() to initiate dragging. - (void)startDragWithDropData:(const WebDropData&)dropData dragOperationMask:(NSDragOperation)operationMask diff --git a/libcef/browser_webview_mac.mm b/libcef/browser_webview_mac.mm index b480d0b12..fce87db9d 100644 --- a/libcef/browser_webview_mac.mm +++ b/libcef/browser_webview_mac.mm @@ -25,13 +25,6 @@ - (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { - dropTarget_.reset([[WebDropTarget alloc] initWithWebView:self]); - - // Register the view to handle the appropriate drag types. - NSArray* types = [NSArray arrayWithObjects:NSStringPboardType, - NSHTMLPboardType, NSURLPboardType, nil]; - [self registerForDraggedTypes:types]; - trackingArea_ = [[NSTrackingArea alloc] initWithRect:frame options:NSTrackingMouseMoved | @@ -187,6 +180,15 @@ [self setNeedsDisplay:YES]; } +- (void)registerDragDrop { + dropTarget_.reset([[WebDropTarget alloc] initWithWebView:self]); + + // Register the view to handle the appropriate drag types. + NSArray* types = [NSArray arrayWithObjects:NSStringPboardType, + NSHTMLPboardType, NSURLPboardType, nil]; + [self registerForDraggedTypes:types]; +} + - (void)startDragWithDropData:(const WebDropData&)dropData dragOperationMask:(NSDragOperation)operationMask image:(NSImage*)image