X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/08291defc22aaa6bdfb16fa5c45f4da0ed420a12..b404a8f3b072129c107c6d9a5e0f6f53cd34807b:/src/msw/ole/droptgt.cpp diff --git a/src/msw/ole/droptgt.cpp b/src/msw/ole/droptgt.cpp index 4601d19be4..e63e55038e 100644 --- a/src/msw/ole/droptgt.cpp +++ b/src/msw/ole/droptgt.cpp @@ -82,7 +82,7 @@ protected: // get default drop effect for given keyboard flags static DWORD GetDropEffect(DWORD flags, wxDragResult defaultAction, DWORD pdwEffect); - DECLARE_NO_COPY_CLASS(wxIDropTarget) + wxDECLARE_NO_COPY_CLASS(wxIDropTarget); }; // ---------------------------------------------------------------------------- @@ -102,7 +102,7 @@ static DWORD ConvertDragResultToEffect(wxDragResult result); // Params : [in] DWORD flags kbd & mouse flags as passed to // IDropTarget methods // [in] wxDragResult defaultAction the default action of the drop target -// [in] DWORD pdwEffect the supported actions of the drop +// [in] DWORD pdwEffect the supported actions of the drop // source passed to IDropTarget methods // Notes : We do "move" normally and "copy" if is pressed, // which is the standard behaviour (currently there is no @@ -169,7 +169,7 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource, wxLogTrace(wxTRACE_OleCalls, wxT("IDropTarget::DragEnter")); wxASSERT_MSG( m_pIDataObject == NULL, - _T("drop target must have data object") ); + wxT("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 @@ -180,7 +180,7 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource, FORMATETC fmt; while ( penumFmt->Next(1, &fmt, NULL) == S_OK ) { - wxLogDebug(_T("Drop source supports format %s"), + wxLogDebug(wxT("Drop source supports format %s"), wxDataObject::GetFormatName(fmt.cfFormat)); } @@ -188,17 +188,20 @@ STDMETHODIMP wxIDropTarget::DragEnter(IDataObject *pIDataSource, } else { - wxLogLastError(_T("IDataObject::EnumFormatEtc")); + wxLogLastError(wxT("IDataObject::EnumFormatEtc")); } #endif // 0 - if ( !m_pTarget->IsAcceptedData(pIDataSource) ) { + if ( !m_pTarget->MSWIsAcceptedData(pIDataSource) ) { // we don't accept this kind of data *pdwEffect = DROPEFFECT_NONE; return S_OK; } + // for use in OnEnter and OnDrag calls + m_pTarget->MSWSetDataSource(pIDataSource); + // get hold of the data object m_pIDataObject = pIDataSource; m_pIDataObject->AddRef(); @@ -244,15 +247,20 @@ STDMETHODIMP wxIDropTarget::DragOver(DWORD grfKeyState, result = wxDragNone; } - // we need client coordinates to pass to wxWin functions - if ( !ScreenToClient(m_hwnd, (POINT *)&pt) ) - { - wxLogLastError(wxT("ScreenToClient")); - } + if ( result != wxDragNone ) { + // we need client coordinates to pass to wxWin functions + if ( !ScreenToClient(m_hwnd, (POINT *)&pt) ) + { + wxLogLastError(wxT("ScreenToClient")); + } - *pdwEffect = ConvertDragResultToEffect( - m_pTarget->OnDragOver(pt.x, pt.y, result) - ); + *pdwEffect = ConvertDragResultToEffect( + m_pTarget->OnDragOver(pt.x, pt.y, result) + ); + } + else { + *pdwEffect = DROPEFFECT_NONE; + } return S_OK; } @@ -303,7 +311,7 @@ STDMETHODIMP wxIDropTarget::Drop(IDataObject *pIDataSource, // first ask the drop target if it wants data if ( m_pTarget->OnDrop(pt.x, pt.y) ) { // it does, so give it the data source - m_pTarget->SetDataSource(pIDataSource); + m_pTarget->MSWSetDataSource(pIDataSource); // and now it has the data wxDragResult rc = ConvertDragEffectToResult( @@ -427,7 +435,7 @@ bool wxDropTarget::OnDrop(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) // copy the data from the data source to the target data object bool wxDropTarget::GetData() { - wxDataFormat format = GetSupportedFormat(m_pIDataSource); + wxDataFormat format = MSWGetSupportedFormat(m_pIDataSource); if ( format == wxDF_INVALID ) { // this is strange because IsAcceptedData() succeeded previously! wxFAIL_MSG(wxT("strange - did supported formats list change?")); @@ -469,22 +477,27 @@ bool wxDropTarget::GetData() // ---------------------------------------------------------------------------- // we need a data source, so wxIDropTarget gives it to us using this function -void wxDropTarget::SetDataSource(IDataObject *pIDataSource) +void wxDropTarget::MSWSetDataSource(IDataObject *pIDataSource) { m_pIDataSource = pIDataSource; } // determine if we accept data of this type -bool wxDropTarget::IsAcceptedData(IDataObject *pIDataSource) const +bool wxDropTarget::MSWIsAcceptedData(IDataObject *pIDataSource) const { - return GetSupportedFormat(pIDataSource) != wxDF_INVALID; + return MSWGetSupportedFormat(pIDataSource) != wxDF_INVALID; } // ---------------------------------------------------------------------------- // helper functions // ---------------------------------------------------------------------------- -wxDataFormat wxDropTarget::GetSupportedFormat(IDataObject *pIDataSource) const +wxDataFormat wxDropTarget::GetMatchingPair() +{ + return MSWGetSupportedFormat( m_pIDataSource ); +} + +wxDataFormat wxDropTarget::MSWGetSupportedFormat(IDataObject *pIDataSource) const { // this strucutre describes a data of any type (first field will be // changing) being passed through global memory block.