X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/161f4f7380e945b0769ad5f7122df55b8777396a..745e6cb9151321982f68ce37c11bbb7e8ad990a6:/src/msw/ole/droptgt.cpp diff --git a/src/msw/ole/droptgt.cpp b/src/msw/ole/droptgt.cpp index aeb5185577..d1e4a97b11 100644 --- a/src/msw/ole/droptgt.cpp +++ b/src/msw/ole/droptgt.cpp @@ -30,12 +30,15 @@ #include "wx/setup.h" -#if wxUSE_DRAG_AND_DROP +#if wxUSE_OLE && wxUSE_DRAG_AND_DROP #include "wx/log.h" #ifdef __WIN32__ #if !defined(__GNUWIN32__) || wxUSE_NORLANDER_HEADERS + #if wxCHECK_W32API_VERSION( 1, 0 ) + #include + #endif #include // for DROPFILES structure #endif #else @@ -139,9 +142,31 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource, POINTL pt, DWORD *pdwEffect) { - wxLogDebug(wxT("IDropTarget::DragEnter")); + wxLogTrace(wxTRACE_OleCalls, wxT("IDropTarget::DragEnter")); - wxASSERT( m_pIDataObject == NULL ); + wxASSERT_MSG( m_pIDataObject == NULL, + _T("drop target must have data object") ); + + // show the list of formats supported by the source data object for the + // debugging purposes, this is quite useful sometimes - please don't remove +#if 0 + IEnumFORMATETC *penumFmt; + if ( SUCCEEDED(pIDataSource->EnumFormatEtc(DATADIR_GET, &penumFmt)) ) + { + FORMATETC fmt; + while ( penumFmt->Next(1, &fmt, NULL) == S_OK ) + { + wxLogDebug(_T("Drop source supports format %s"), + wxDataObject::GetFormatName(fmt.cfFormat)); + } + + penumFmt->Release(); + } + else + { + wxLogLastError(_T("IDataObject::EnumFormatEtc")); + } +#endif // 0 if ( !m_pTarget->IsAcceptedData(pIDataSource) ) { // we don't accept this kind of data @@ -213,7 +238,7 @@ STDMETHODIMP wxIDropTarget::DragOver(DWORD grfKeyState, // Notes : good place to do any clean-up STDMETHODIMP wxIDropTarget::DragLeave() { - wxLogDebug(wxT("IDropTarget::DragLeave")); + wxLogTrace(wxTRACE_OleCalls, wxT("IDropTarget::DragLeave")); // remove the UI feedback m_pTarget->OnLeave(); @@ -238,7 +263,7 @@ STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource, POINTL pt, DWORD *pdwEffect) { - wxLogDebug(wxT("IDropTarget::Drop")); + wxLogTrace(wxTRACE_OleCalls, wxT("IDropTarget::Drop")); // TODO I don't know why there is this parameter, but so far I assume // that it's the same we've already got in DragEnter @@ -377,11 +402,11 @@ bool wxDropTarget::GetData() rc = TRUE; } else { - wxLogLastError(wxT("IDataObject::SetData()")); + wxLogApiError(wxT("IDataObject::SetData()"), hr); } } else { - wxLogLastError(wxT("IDataObject::GetData()")); + wxLogApiError(wxT("IDataObject::GetData()"), hr); } return rc; @@ -422,7 +447,7 @@ wxDataFormat wxDropTarget::GetSupportedFormat(IDataObject *pIDataSource) const // get the list of supported formats size_t nFormats = m_dataObject->GetFormatCount(wxDataObject::Set); wxDataFormat format; - wxDataFormat *formats; + wxDataFormat *formats; formats = nFormats == 1 ? &format : new wxDataFormat[nFormats]; m_dataObject->GetAllFormats(formats, wxDataObject::Set); @@ -459,6 +484,9 @@ static wxDragResult ConvertDragEffectToResult(DWORD dwEffect) case DROPEFFECT_COPY: return wxDragCopy; + case DROPEFFECT_LINK: + return wxDragLink; + case DROPEFFECT_MOVE: return wxDragMove; @@ -477,6 +505,9 @@ static DWORD ConvertDragResultToEffect(wxDragResult result) case wxDragCopy: return DROPEFFECT_COPY; + case wxDragLink: + return DROPEFFECT_LINK; + case wxDragMove: return DROPEFFECT_MOVE;