]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dnd.cpp
regenerated the makefiles with the latest filelist.txt
[wxWidgets.git] / src / mac / carbon / dnd.cpp
index b9df2ac0049fdbb811a6fcb96d3642ab1b8b3076..2ea8ae7c90613b426f53d972f85f282e7486c7ff 100644 (file)
@@ -246,9 +246,10 @@ bool wxDropTarget::GetData()
 // drag request
 
 wxDropSource::wxDropSource(wxWindow *win,
-                           const wxIcon &iconCopy,
-                           const wxIcon &iconMove,
-                           const wxIcon &iconNone)
+                           const wxCursor &cursorCopy,
+                           const wxCursor &cursorMove,
+                           const wxCursor &cursorStop)
+            : wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
 {
     wxMacEnsureTrackingHandlersInstalled() ;
     m_window = win;
@@ -256,9 +257,10 @@ wxDropSource::wxDropSource(wxWindow *win,
 
 wxDropSource::wxDropSource(wxDataObject& data,
                            wxWindow *win,
-                           const wxIcon &iconCopy,
-                           const wxIcon &iconMove,
-                           const wxIcon &iconNone)
+                           const wxCursor &cursorCopy,
+                           const wxCursor &cursorMove,
+                           const wxCursor &cursorStop)
+            : wxDropSourceBase(cursorCopy, cursorMove, cursorStop)
 {
     wxMacEnsureTrackingHandlersInstalled() ;
     SetData( data );
@@ -383,6 +385,21 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
     return wxDragCopy ;
 }
 
+bool wxDropSource::MacInstallDefaultCursor(wxDragResult effect)
+{
+    const wxCursor& cursor = GetCursor(effect);
+    if ( cursor.Ok() )
+    {
+        cursor.MacInstall() ;
+
+        return TRUE;
+    }
+    else
+    {
+        return FALSE;
+    }
+}
+
 bool gTrackingGlobalsInstalled = false ;
 
 // passing the globals via refcon is not needed by the CFM and later architectures anymore
@@ -464,19 +481,52 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
                         // this window is entered
                         trackingGlobals->m_currentTargetWindow = win ;
                         trackingGlobals->m_currentTarget = win->GetDropTarget() ;
-                        if ( trackingGlobals->m_currentTarget )
                         {
-                          trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
-                           if ( trackingGlobals->m_currentTarget->OnEnter(
-                                localx , localy , wxDragCopy ) != wxDragNone )
+                               wxDragResult result = wxDragNone ;
+                               if ( trackingGlobals->m_currentTarget )
+                               {
+                               trackingGlobals->m_currentTarget->SetCurrentDrag( theDrag ) ;
+                               result = trackingGlobals->m_currentTarget->OnEnter(
+                                       localx , localy , wxDragCopy ) ;
+                            }
+                                
+                            if ( trackingGlobals->m_currentSource && trackingGlobals->m_currentSource->GiveFeedback( result ) == FALSE )
+                            {
+                               if ( trackingGlobals->m_currentSource->MacInstallDefaultCursor( result ) == FALSE )
+                               {
+                                       switch( result )
+                                       {
+                                               case wxDragCopy :
+                                               {
+                                                       wxCursor cursor(wxCURSOR_COPY_ARROW) ;
+                                                       cursor.MacInstall() ;
+                                               }
+                                               break ;
+                                               case wxDragMove :
+                                               {
+                                                       wxCursor cursor(wxCURSOR_ARROW) ;
+                                                       cursor.MacInstall() ;
+                                                   }
+                                               break ;
+                                               case wxDragNone :
+                                               {
+                                                       wxCursor cursor(wxCURSOR_NO_ENTRY) ;
+                                                       cursor.MacInstall() ;
+                                               }
+                                               break ;
+                                       }
+                               }
+                            }
+                           
+                            if ( result != wxDragNone )
                             {
-                              int x , y ;
-                              x = y = 0 ;
-                              win->MacWindowToRootWindow( &x , &y ) ;
-                              RgnHandle hiliteRgn = NewRgn() ;
-                              SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
-                              ShowDragHilite(theDrag, hiliteRgn, true);
-                              DisposeRgn( hiliteRgn ) ;
+                                int x , y ;
+                                x = y = 0 ;
+                                win->MacWindowToRootWindow( &x , &y ) ;
+                                RgnHandle hiliteRgn = NewRgn() ;
+                                SetRectRgn( hiliteRgn , x , y , x+win->GetSize().x ,y+win->GetSize().y) ;
+                                ShowDragHilite(theDrag, hiliteRgn, true);
+                                DisposeRgn( hiliteRgn ) ;
                             }
                         }
                     }