]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/dnd.cpp
workaround because regions that were built up, were sometimes being drawn on the...
[wxWidgets.git] / src / mac / carbon / dnd.cpp
index 37c444ed787cd901f169c7566d5a9cfe21aea87c..d2b1702e91999bb409b4222e8dca7170e19d23a2 100644 (file)
@@ -9,11 +9,11 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "dnd.h"
 #endif
 
-#include "wx/defs.h"
+#include "wx/wxprec.h"
 
 #if wxUSE_DRAG_AND_DROP
 
 #include "wx/gdicmn.h"
 #include "wx/mac/private.h"
 
+#ifndef __DARWIN__
+    #include <Scrap.h>
+#endif
+
 // ----------------------------------------------------------------------------
 // global
 // ----------------------------------------------------------------------------
@@ -195,20 +199,34 @@ bool wxDropTarget::GetData()
                         Size dataSize ;
                         Ptr theData ;
                         GetFlavorDataSize((DragReference)m_currentDrag, theItem, theType, &dataSize);
-                        if ( theType == 'TEXT' )
+                        if ( theType == kScrapFlavorTypeText )
                         {
                             // this increment is only valid for allocating, on the next GetFlavorData
                             // call it is reset again to the original value
                             dataSize++ ;
                         }
+                        else if ( theType == kScrapFlavorTypeUnicode )
+                        {
+                            // this increment is only valid for allocating, on the next GetFlavorData
+                            // call it is reset again to the original value
+                            dataSize++ ;
+                            dataSize++ ;
+                        }
                         theData = new char[dataSize];
                         GetFlavorData((DragReference)m_currentDrag, theItem, theType, (void*) theData, &dataSize, 0L); 
-                        if( theType == 'TEXT' )
+                        if( theType == kScrapFlavorTypeText )
+                        {
+                            theData[dataSize]=0 ; 
+                            m_dataObject->SetData( wxDataFormat(wxDF_TEXT), dataSize , theData );
+                        }
+ #if wxUSE_UNICODE
+                        else if ( theType == kScrapFlavorTypeUnicode )
                         {
                             theData[dataSize]=0 ; 
-                            wxString convert( theData , wxConvLocal ) ;    
-                            m_dataObject->SetData( format, convert.Length() * sizeof(wxChar), (const wxChar*) convert );
+                            theData[dataSize+1]=0 ; 
+                            m_dataObject->SetData( wxDataFormat(wxDF_UNICODETEXT), dataSize , theData );
                         }
+ #endif
                         else if ( theType == kDragFlavorTypeHFS )
                         {
                             HFSFlavor* theFile = (HFSFlavor*) theData ;
@@ -311,7 +329,7 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
             OSErr err = noErr;
             CInfoPBRec cat;
             
-            wxMacFilename2FSSpec( dataPtr , &theFlavor.fileSpec ) ;
+            wxMacFilename2FSSpec( wxString( dataPtr , *wxConvCurrent ) , &theFlavor.fileSpec ) ;
             
             cat.hFileInfo.ioNamePtr = theFlavor.fileSpec.name;
             cat.hFileInfo.ioVRefNum = theFlavor.fileSpec.vRefNum;
@@ -378,9 +396,7 @@ wxDragResult wxDropSource::DoDragDrop(int WXUNUSED(flags))
     DisposeDrag(theDrag);
     gTrackingGlobals.m_currentSource = NULL ;
     
-    KeyMap keymap;
-    GetKeys(keymap);
-    bool optionDown = keymap[1] & 4;
+    bool optionDown = GetCurrentKeyModifiers() & optionKey ;
     wxDragResult dndresult = optionDown ? wxDragCopy : wxDragMove;
     return dndresult;
 }
@@ -434,9 +450,7 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
     GetDragAttributes(theDrag, &attributes);
     wxTopLevelWindowMac* toplevel = wxFindWinFromMacWindow( theWindow ) ; 
 
-    KeyMap keymap;
-    GetKeys(keymap);
-    bool optionDown = keymap[1] & 4;
+    bool optionDown = GetCurrentKeyModifiers() & optionKey ;
     wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
 
     switch(theMessage) 
@@ -461,10 +475,10 @@ pascal OSErr wxMacWindowDragTrackingHandler(DragTrackingMessage theMessage, Wind
             
 //            if (attributes & kDragHasLeftSenderWindow) 
             {
-                wxPoint point(localMouse.h , localMouse.v) ;
+//                wxPoint point(localMouse.h , localMouse.v) ;
                 wxWindow *win = NULL ;
                 ControlPartCode controlPart ;
-                ControlRef control = wxMacFindControlUnderMouse( localMouse ,
+                ControlRef control = wxMacFindControlUnderMouse( toplevel , localMouse ,
                     theWindow , &controlPart ) ;
                 if ( control )
                     win = wxFindControlFromMacControl( control ) ;
@@ -601,9 +615,7 @@ pascal OSErr wxMacWindowDragReceiveHandler(WindowPtr theWindow,
             trackingGlobals->m_currentTargetWindow->MacRootWindowToWindow( &localx , &localy ) ;
         if ( trackingGlobals->m_currentTarget->OnDrop( localx , localy ) )
         {
-            KeyMap keymap;
-            GetKeys(keymap);
-            bool optionDown = keymap[1] & 4;
+            bool optionDown = GetCurrentKeyModifiers() & optionKey ;
             wxDragResult result = optionDown ? wxDragCopy : wxDragMove;
             trackingGlobals->m_currentTarget->OnData( localx , localy , result ) ;
         }