]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/dnd.cpp
fix wxGTK1 compilation after wxTextEntry DoGetValue() change
[wxWidgets.git] / src / osx / carbon / dnd.cpp
index b5d299b476fa3a9c2a0e5f24b56407b72d5dbf39..bc0f7e5485c6e1f408af1d0f6542a6cc2a565b34 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        src/mac/carbon/dnd.cpp
+// Name:        src/osx/carbon/dnd.cpp
 // Purpose:     wxDropTarget, wxDropSource implementations
 // Author:      Stefan Csomor
 // Modified by:
@@ -57,6 +57,12 @@ wxDragResult wxDropTarget::OnDragOver(
     return CurrentDragHasSupportedFormat() ? def : wxDragNone;
 }
 
+wxDataFormat wxDropTarget::GetMatchingPair()
+{
+    wxFAIL_MSG("wxDropTarget::GetMatchingPair() not implemented in src/osx/carbon/dnd.cpp"); 
+    return wxDF_INVALID;
+}
+
 bool wxDropTarget::OnDrop( wxCoord WXUNUSED(x), wxCoord WXUNUSED(y) )
 {
     if (m_dataObject == NULL)
@@ -109,12 +115,7 @@ bool wxDropTarget::CurrentDragHasSupportedFormat()
 
     if ( !supported )
     {
-        PasteboardRef   pasteboard;
-
-        if ( GetDragPasteboard( (DragReference)m_currentDrag, &pasteboard ) == noErr )
-        {
-            supported = m_dataObject->HasDataInPasteboard( pasteboard );
-        }
+        supported = m_dataObject->HasDataInPasteboard( m_currentDragPasteboard );
     }
 
     return supported;
@@ -166,12 +167,7 @@ bool wxDropTarget::GetData()
 
     if ( !transferred )
     {
-        PasteboardRef   pasteboard;
-
-        if ( GetDragPasteboard(  (DragReference)m_currentDrag, &pasteboard ) == noErr )
-        {
-            transferred = m_dataObject->GetFromPasteboard( pasteboard );
-        }
+        transferred = m_dataObject->GetFromPasteboard( m_currentDragPasteboard );
     }
 
     return transferred;
@@ -231,6 +227,7 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
     if ((m_data == NULL) || (m_data->GetFormatCount() == 0))
         return (wxDragResult)wxDragNone;
 
+#if wxOSX_USE_CARBON
     DragReference theDrag;
     RgnHandle dragRegion;
     OSStatus err = noErr;
@@ -305,6 +302,7 @@ wxDragResult wxDropSource::DoDragDrop(int flags)
     DisposeDrag( theDrag );
     CFRelease( pasteboard );
     gTrackingGlobals.m_currentSource = NULL;
+#endif
 
     return gTrackingGlobals.m_result;
 }
@@ -325,15 +323,18 @@ bool gTrackingGlobalsInstalled = false;
 // passing the globals via refcon is not needed by the CFM and later architectures anymore
 // but I'll leave it in there, just in case...
 
+#if wxOSX_USE_CARBON
 pascal OSErr wxMacWindowDragTrackingHandler(
     DragTrackingMessage theMessage, WindowPtr theWindow,
     void *handlerRefCon, DragReference theDrag );
 pascal OSErr wxMacWindowDragReceiveHandler(
     WindowPtr theWindow, void *handlerRefCon,
     DragReference theDrag );
+#endif
 
 void wxMacEnsureTrackingHandlersInstalled()
 {
+#if wxOSX_USE_CARBON
     if ( !gTrackingGlobalsInstalled )
     {
         OSStatus err;
@@ -346,8 +347,10 @@ void wxMacEnsureTrackingHandlersInstalled()
 
         gTrackingGlobalsInstalled = true;
     }
+#endif
 }
 
+#if wxOSX_USE_CARBON
 pascal OSErr wxMacWindowDragTrackingHandler(
     DragTrackingMessage theMessage, WindowPtr theWindow,
     void *handlerRefCon, DragReference theDrag )
@@ -358,8 +361,9 @@ pascal OSErr wxMacWindowDragTrackingHandler(
     DragAttributes attributes;
 
     GetDragAttributes( theDrag, &attributes );
-
-    wxNonOwnedWindow* toplevel = wxFindWinFromMacWindow( theWindow );
+    PasteboardRef   pasteboard = 0;
+    GetDragPasteboard( theDrag, &pasteboard );
+    wxNonOwnedWindow* toplevel = wxNonOwnedWindow::GetFromWXWindow( (WXWindow) theWindow );
 
     bool optionDown = GetCurrentKeyModifiers() & optionKey;
     wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
@@ -385,15 +389,18 @@ pascal OSErr wxMacWindowDragTrackingHandler(
                 break;
 
             GetDragMouse( theDrag, &mouse, 0L );
-            localMouse = mouse;
-            wxMacGlobalToLocal( theWindow, &localMouse );
+            int x = mouse.h ;
+            int y = mouse.v ;
+            toplevel->GetNonOwnedPeer()->ScreenToWindow( &x, &y );
+            localMouse.h = x;
+            localMouse.v = y;
 
             {
                 wxWindow *win = NULL;
                 ControlPartCode controlPart;
                 ControlRef control = FindControlUnderMouse( localMouse, theWindow, &controlPart );
                 if ( control )
-                    win = wxFindControlFromMacControl( control );
+                    win = wxFindWindowFromWXWidget( (WXWidget) control );
                 else
                     win = toplevel;
 
@@ -413,7 +420,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(
 #ifndef __LP64__
                             HideDragHilite( theDrag );
 #endif
-                            trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag );
+                            trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
                             trackingGlobals->m_currentTarget->OnLeave();
                             trackingGlobals->m_currentTarget = NULL;
                             trackingGlobals->m_currentTargetWindow = NULL;
@@ -428,7 +435,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(
                         {
                             if ( trackingGlobals->m_currentTarget )
                             {
-                                trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag );
+                                trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
                                 result = trackingGlobals->m_currentTarget->OnEnter( localx, localy, result );
                             }
 
@@ -453,7 +460,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(
                 {
                     if ( trackingGlobals->m_currentTarget )
                     {
-                        trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag );
+                        trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
                         result = trackingGlobals->m_currentTarget->OnDragOver( localx, localy, result );
                     }
                 }
@@ -463,7 +470,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(
                 {
                   if ( !trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) )
                   {
-                      int cursorID = wxCURSOR_NONE;
+                      wxStockCursor cursorID = wxCURSOR_NONE;
 
                       switch (result)
                       {
@@ -503,7 +510,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(
 
             if (trackingGlobals->m_currentTarget)
             {
-                trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag );
+                trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
                 trackingGlobals->m_currentTarget->OnLeave();
 #ifndef __LP64__
                 HideDragHilite( theDrag );
@@ -531,12 +538,16 @@ pascal OSErr wxMacWindowDragReceiveHandler(
         Point mouse, localMouse;
         int localx, localy;
 
-        trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag );
+        PasteboardRef   pasteboard = 0;
+        GetDragPasteboard( theDrag, &pasteboard );
+        trackingGlobals->m_currentTarget->SetCurrentDragPasteboard( pasteboard );
         GetDragMouse( theDrag, &mouse, 0L );
         localMouse = mouse;
-        wxMacGlobalToLocal( theWindow, &localMouse );
         localx = localMouse.h;
         localy = localMouse.v;
+        wxNonOwnedWindow* tlw = wxNonOwnedWindow::GetFromWXWindow((WXWindow) theWindow);
+        if ( tlw )
+            tlw->GetNonOwnedPeer()->ScreenToWindow( &localx, &localy );
 
         // TODO : should we use client coordinates?
         if ( trackingGlobals->m_currentTargetWindow )
@@ -557,6 +568,7 @@ pascal OSErr wxMacWindowDragReceiveHandler(
 
     return noErr;
 }
+#endif
 
 #endif // wxUSE_DRAG_AND_DROP