summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/web_drag_source.mm
diff options
context:
space:
mode:
authorpaul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-18 21:11:47 +0000
committerpaul@chromium.org <paul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-18 21:11:47 +0000
commit33b7d3deaa5d25558104cadd72d8684e7c9ebf82 (patch)
treeebf99401468ba10c6d063a5ba4d1313b3f947e74 /chrome/browser/cocoa/web_drag_source.mm
parent62ac1f97b9eebdf5e993cd5c65c05302c3ff96df (diff)
downloadchromium_src-33b7d3deaa5d25558104cadd72d8684e7c9ebf82.zip
chromium_src-33b7d3deaa5d25558104cadd72d8684e7c9ebf82.tar.gz
chromium_src-33b7d3deaa5d25558104cadd72d8684e7c9ebf82.tar.bz2
Synthesize an NSEvent for handling drag events, since we
can't guarantee that by the time we start dragging, the application's current event is a valid drag. BUG=16811 (http://crbug.com/16811) TEST=Drag operations should all still work. Review URL: http://codereview.chromium.org/171067 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23647 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/cocoa/web_drag_source.mm')
-rw-r--r--chrome/browser/cocoa/web_drag_source.mm22
1 files changed, 18 insertions, 4 deletions
diff --git a/chrome/browser/cocoa/web_drag_source.mm b/chrome/browser/cocoa/web_drag_source.mm
index 6fd44a7..3e66832 100644
--- a/chrome/browser/cocoa/web_drag_source.mm
+++ b/chrome/browser/cocoa/web_drag_source.mm
@@ -200,12 +200,26 @@ void PromiseWriterTask::Run() {
- (void)startDrag {
NSEvent* currentEvent = [NSApp currentEvent];
+
+ // Synthesize an event for dragging, since we can't be sure that
+ // [NSApp currentEvent] will return a valid dragging event.
+ NSWindow* window = [contentsView_ window];
+ NSPoint position = [window mouseLocationOutsideOfEventStream];
+ NSTimeInterval eventTime = [currentEvent timestamp];
+ NSEvent* dragEvent = [NSEvent mouseEventWithType:NSLeftMouseDragged
+ location:position
+ modifierFlags:NSLeftMouseDraggedMask
+ timestamp:eventTime
+ windowNumber:[window windowNumber]
+ context:nil
+ eventNumber:0
+ clickCount:1
+ pressure:1.0];
+
[contentsView_ dragImage:[self dragImage]
- at:[contentsView_
- convertPoint:[currentEvent locationInWindow]
- fromView:nil]
+ at:position
offset:NSZeroSize
- event:currentEvent
+ event:dragEvent
pasteboard:pasteboard_
source:contentsView_
slideBack:YES];