///////////////////////////////////////////////////////////////////////////////
-// Name: ole/droptgt.cpp
+// Name: src/msw/ole/droptgt.cpp
// Purpose: wxDropTarget implementation
// Author: Vadim Zeitlin
// Modified by:
// 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__)
-#pragma hdrstop
+ #pragma hdrstop
#endif
-#include "wx/setup.h"
-
#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/log.h"
#ifdef __WXWINCE__
#include <winreg.h>
#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
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)
};
// 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;
}
// 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()))
)
);
wxDragResult result;
if ( m_pIDataObject ) {
- result = ConvertDragEffectToResult(GetDropEffect(grfKeyState));
+ result = ConvertDragEffectToResult(
+ GetDropEffect(grfKeyState, m_pTarget->GetDefaultAction()));
}
else {
// can't accept data anyhow normally
// 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,
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
// 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;
{
#if defined(__WXWINCE__) && _WIN32_WCE >= 400
// Not available, see note above
+ wxUnusedVar(hwnd);
#else
HRESULT hr = ::RevokeDragDrop((HWND) hwnd);
}
}
-#endif
- // wxUSE_DRAG_AND_DROP
+#endif // wxUSE_OLE && wxUSE_DRAG_AND_DROP