]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ole/droptgt.cpp
don't try to paint hidden windows
[wxWidgets.git] / src / msw / ole / droptgt.cpp
index f24c08b0e5f19bb045e45321ab675a2d1eef32e8..84d718ff17aada2cbd0eb55c2b953b2b3de09bba 100644 (file)
@@ -1,5 +1,5 @@
 ///////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////
-// Name:        ole/droptgt.cpp
+// Name:        src/msw/ole/droptgt.cpp
 // Purpose:     wxDropTarget implementation
 // Author:      Vadim Zeitlin
 // Modified by:
 // Purpose:     wxDropTarget implementation
 // Author:      Vadim Zeitlin
 // Modified by:
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "droptgt.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #endif
 
-#include "wx/setup.h"
-
 #if wxUSE_OLE && wxUSE_DRAG_AND_DROP
 
 #if wxUSE_OLE && wxUSE_DRAG_AND_DROP
 
+#ifndef WX_PRECOMP
+    #include "wx/msw/wrapwin.h"
+    #include "wx/log.h"
+#endif
+
 #include "wx/msw/private.h"
 #include "wx/msw/private.h"
-#include "wx/log.h"
 
 #ifdef __WXWINCE__
     #include <winreg.h>
 
 #ifdef __WXWINCE__
     #include <winreg.h>
@@ -42,9 +40,6 @@
 
 #ifdef __WIN32__
     #if !defined(__GNUWIN32__) || wxUSE_NORLANDER_HEADERS
 
 #ifdef __WIN32__
     #if !defined(__GNUWIN32__) || wxUSE_NORLANDER_HEADERS
-        #if wxCHECK_W32API_VERSION( 1, 0 )
-            #include "wx/msw/wrapwin.h"
-        #endif
         #include <shlobj.h>            // for DROPFILES structure
     #endif
 #else
         #include <shlobj.h>            // for DROPFILES structure
     #endif
 #else
@@ -85,7 +80,7 @@ protected:
     HWND          m_hwnd;         // window we're associated with
 
     // get default drop effect for given keyboard flags
     HWND          m_hwnd;         // window we're associated with
 
     // get default drop effect for given keyboard flags
-    static inline DWORD GetDropEffect(DWORD flags);
+    static inline DWORD GetDropEffect(DWORD flags, wxDragResult defaultAction);
 
     DECLARE_NO_COPY_CLASS(wxIDropTarget)
 };
 
     DECLARE_NO_COPY_CLASS(wxIDropTarget)
 };
@@ -109,8 +104,10 @@ static DWORD ConvertDragResultToEffect(wxDragResult result);
 // Notes   : We do "move" normally and "copy" if <Ctrl> is pressed,
 //           which is the standard behaviour (currently there is no
 //           way to redefine it)
 // Notes   : We do "move" normally and "copy" if <Ctrl> is pressed,
 //           which is the standard behaviour (currently there is no
 //           way to redefine it)
-DWORD wxIDropTarget::GetDropEffect(DWORD flags)
+DWORD wxIDropTarget::GetDropEffect(DWORD flags, wxDragResult defaultAction)
 {
 {
+  if (defaultAction == wxDragCopy)
+    return flags & MK_SHIFT ? DROPEFFECT_MOVE : DROPEFFECT_COPY;
   return flags & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
 }
 
   return flags & MK_CONTROL ? DROPEFFECT_COPY : DROPEFFECT_MOVE;
 }
 
@@ -189,8 +186,8 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource,
 
     // give some visual feedback
     *pdwEffect = ConvertDragResultToEffect(
 
     // give some visual feedback
     *pdwEffect = ConvertDragResultToEffect(
-                    m_pTarget->OnEnter(pt.x, pt.y,
-                        ConvertDragEffectToResult(GetDropEffect(grfKeyState))
+        m_pTarget->OnEnter(pt.x, pt.y, ConvertDragEffectToResult(
+            GetDropEffect(grfKeyState, m_pTarget->GetDefaultAction()))
                     )
                  );
 
                     )
                  );
 
@@ -214,7 +211,8 @@ STDMETHODIMP wxIDropTarget::DragOver(DWORD   grfKeyState,
 
     wxDragResult result;
     if ( m_pIDataObject ) {
 
     wxDragResult result;
     if ( m_pIDataObject ) {
-        result = ConvertDragEffectToResult(GetDropEffect(grfKeyState));
+        result = ConvertDragEffectToResult(
+            GetDropEffect(grfKeyState, m_pTarget->GetDefaultAction()));
     }
     else {
         // can't accept data anyhow normally
     }
     else {
         // can't accept data anyhow normally
@@ -257,7 +255,7 @@ STDMETHODIMP wxIDropTarget::DragLeave()
 // Returns : S_OK
 // Params  : [in] IDataObject *pIDataSource     the data to paste
 //           [in] DWORD        grfKeyState      kbd & mouse state
 // Returns : S_OK
 // Params  : [in] IDataObject *pIDataSource     the data to paste
 //           [in] DWORD        grfKeyState      kbd & mouse state
-//           [in] POINTL       pt               where the drop occured?
+//           [in] POINTL       pt               where the drop occurred?
 //           [ouy]DWORD       *pdwEffect        operation effect
 // Notes   :
 STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource,
 //           [ouy]DWORD       *pdwEffect        operation effect
 // Notes   :
 STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource,
@@ -286,7 +284,8 @@ STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource,
         m_pTarget->SetDataSource(pIDataSource);
 
         // and now it has the data
         m_pTarget->SetDataSource(pIDataSource);
 
         // and now it has the data
-        wxDragResult rc = ConvertDragEffectToResult(GetDropEffect(grfKeyState));
+        wxDragResult rc = ConvertDragEffectToResult(
+            GetDropEffect(grfKeyState, m_pTarget->GetDefaultAction()));
         rc = m_pTarget->OnData(pt.x, pt.y, rc);
         if ( wxIsDragResultOk(rc) ) {
             // operation succeeded
         rc = m_pTarget->OnData(pt.x, pt.y, rc);
         if ( wxIsDragResultOk(rc) ) {
             // operation succeeded
@@ -335,6 +334,7 @@ bool wxDropTarget::Register(WXHWND hwnd)
     // Or maybe we can dynamically load them from ceshell.dll
     // or similar.
 #if defined(__WXWINCE__) && _WIN32_WCE >= 400
     // Or maybe we can dynamically load them from ceshell.dll
     // or similar.
 #if defined(__WXWINCE__) && _WIN32_WCE >= 400
+    wxUnusedVar(hwnd);
     return false;
 #else
     HRESULT hr;
     return false;
 #else
     HRESULT hr;
@@ -369,6 +369,7 @@ void wxDropTarget::Revoke(WXHWND hwnd)
 {
 #if defined(__WXWINCE__) && _WIN32_WCE >= 400
     // Not available, see note above
 {
 #if defined(__WXWINCE__) && _WIN32_WCE >= 400
     // Not available, see note above
+    wxUnusedVar(hwnd);
 #else
     HRESULT hr = ::RevokeDragDrop((HWND) hwnd);
 
 #else
     HRESULT hr = ::RevokeDragDrop((HWND) hwnd);
 
@@ -544,5 +545,4 @@ static DWORD ConvertDragResultToEffect(wxDragResult result)
     }
 }
 
     }
 }
 
-#endif
- // wxUSE_DRAG_AND_DROP
+#endif // wxUSE_OLE && wxUSE_DRAG_AND_DROP