Index: chrome/browser/tab_contents/tab_contents_view_mac.mm |
=================================================================== |
--- chrome/browser/tab_contents/tab_contents_view_mac.mm (revision 25321) |
+++ chrome/browser/tab_contents/tab_contents_view_mac.mm (working copy) |
@@ -21,12 +21,29 @@ |
#include "chrome/common/temp_scaffolding_stubs.h" |
+using WebKit::WebDragOperation; |
+using WebKit::WebDragOperationsMask; |
+ |
+// Ensure that the WebKit::WebDragOperation enum values stay in sync with |
+// NSDragOperation constants, since the code below static_casts between 'em. |
+#define COMPILE_ASSERT_MATCHING_ENUM(name) \ |
+ COMPILE_ASSERT(int(NS##name) == int(WebKit::Web##name), enum_mismatch_##name) |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationNone); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationCopy); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationLink); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationGeneric); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationPrivate); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationMove); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationDelete); |
+COMPILE_ASSERT_MATCHING_ENUM(DragOperationEvery); |
+ |
@interface TabContentsViewCocoa (Private) |
- (id)initWithTabContentsViewMac:(TabContentsViewMac*)w; |
- (void)processKeyboardEvent:(NSEvent*)event; |
- (void)registerDragTypes; |
-- (void)setIsDropTarget:(BOOL)isTarget; |
-- (void)startDragWithDropData:(const WebDropData&)dropData; |
+- (void)setCurrentDragOperation:(NSDragOperation)operation; |
+- (void)startDragWithDropData:(const WebDropData&)dropData |
+ dragOperationMask:(NSDragOperation)operationMask; |
@end |
// static |
@@ -83,11 +100,14 @@ |
*out = [cocoa_view_.get() NSRectToRect:[cocoa_view_.get() bounds]]; |
} |
-void TabContentsViewMac::StartDragging(const WebDropData& drop_data) { |
+void TabContentsViewMac::StartDragging(const WebDropData& drop_data, |
+ WebDragOperationsMask allowed_operations) { |
// The drag invokes a nested event loop, but we need to continue processing |
// events. |
MessageLoop::current()->SetNestableTasksAllowed(true); |
- [cocoa_view_ startDragWithDropData:drop_data]; |
+ NSDragOperation mask = static_cast<NSDragOperation>(allowed_operations); |
+ [cocoa_view_ startDragWithDropData:drop_data |
+ dragOperationMask:mask]; |
MessageLoop::current()->SetNestableTasksAllowed(false); |
} |
@@ -166,8 +186,8 @@ |
} |
} |
-void TabContentsViewMac::UpdateDragCursor(bool is_drop_target) { |
- [cocoa_view_ setIsDropTarget:is_drop_target ? YES : NO]; |
+void TabContentsViewMac::UpdateDragCursor(WebDragOperation operation) { |
+ [cocoa_view_ setCurrentDragOperation: operation]; |
} |
void TabContentsViewMac::GotFocus() { |
@@ -269,8 +289,8 @@ |
[self registerForDraggedTypes:types]; |
} |
-- (void)setIsDropTarget:(BOOL)isTarget { |
- [dropTarget_ setIsDropTarget:isTarget]; |
+- (void)setCurrentDragOperation:(NSDragOperation)operation { |
+ [dropTarget_ setCurrentOperation:operation]; |
} |
- (TabContents*)tabContents { |
@@ -325,11 +345,13 @@ |
forType:type]; |
} |
-- (void)startDragWithDropData:(const WebDropData&)dropData { |
+- (void)startDragWithDropData:(const WebDropData&)dropData |
+ dragOperationMask:(NSDragOperation)operationMask { |
dragSource_.reset([[WebDragSource alloc] |
initWithContentsView:self |
dropData:&dropData |
- pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard]]); |
+ pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] |
+ dragOperationMask:operationMask]); |
[dragSource_ startDrag]; |
} |
@@ -338,16 +360,14 @@ |
// Returns what kind of drag operations are available. This is a required |
// method for NSDraggingSource. |
- (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { |
- // TODO(pinkerton): I think this is right... |
- return NSDragOperationCopy; |
+ return [dragSource_ draggingSourceOperationMaskForLocal:isLocal]; |
} |
// Called when a drag initiated in our view ends. |
- (void)draggedImage:(NSImage*)anImage |
endedAt:(NSPoint)screenPoint |
operation:(NSDragOperation)operation { |
- [dragSource_ endDragAt:screenPoint |
- isCancelled:(operation == NSDragOperationNone)]; |
+ [dragSource_ endDragAt:screenPoint operation:operation]; |
// Might as well throw out this object now. |
dragSource_.reset(); |