]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/cocoa/dnd.mm
guarding open combo box against AppDefined NSEvents issued by wxEventLoop::WakeUp...
[wxWidgets.git] / src / osx / cocoa / dnd.mm
index ecfa2e2b916489a4fc01626588caa5c0f965417e..c12e16f5b957c3b81fc2a0fc6002f7dba1e68fce 100644 (file)
 
 #include "wx/wxprec.h"
 
 
 #include "wx/wxprec.h"
 
+#ifndef WX_PRECOMP
+#include "wx/object.h"
+#endif
+
 #if wxUSE_DRAG_AND_DROP
 
 #include "wx/dnd.h"
 #if wxUSE_DRAG_AND_DROP
 
 #include "wx/dnd.h"
@@ -32,6 +36,8 @@ wxDragResult NSDragOperationToWxDragResult(NSDragOperation code)
 {
     switch (code)
     {
 {
     switch (code)
     {
+        case NSDragOperationGeneric:
+            return wxDragCopy;
         case NSDragOperationCopy:
             return wxDragCopy;
         case NSDragOperationMove:
         case NSDragOperationCopy:
             return wxDragCopy;
         case NSDragOperationMove:
@@ -214,7 +220,7 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
         wxASSERT_MSG(theEvent, "DoDragDrop must be called in response to a mouse down or drag event.");
 
         NSPoint down = [theEvent locationInWindow];
         wxASSERT_MSG(theEvent, "DoDragDrop must be called in response to a mouse down or drag event.");
 
         NSPoint down = [theEvent locationInWindow];
-        NSPoint p = [view convertPoint:down toView:nil];
+        NSPoint p = [view convertPoint:down fromView:nil];
                 
         gCurrentSource = this;
         
                 
         gCurrentSource = this;
         
@@ -246,6 +252,23 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
         result = NSDragOperationToWxDragResult([delegate code]);
         [delegate release];
         [image release];
         result = NSDragOperationToWxDragResult([delegate code]);
         [delegate release];
         [image release];
+        
+        wxWindow* mouseUpTarget = wxWindow::GetCapture();
+
+        if ( mouseUpTarget == NULL )
+        {
+            mouseUpTarget = m_window;
+        }
+        
+        if ( mouseUpTarget != NULL )
+        {
+            wxMouseEvent wxevent(wxEVT_LEFT_DOWN);
+            ((wxWidgetCocoaImpl*)mouseUpTarget->GetPeer())->SetupMouseEvent(wxevent , theEvent) ;
+            wxevent.SetEventType(wxEVT_LEFT_UP);
+        
+            mouseUpTarget->HandleWindowEvent(wxevent);
+        }
+        
         gCurrentSource = NULL;
     }
 
         gCurrentSource = NULL;
     }