From cb3406d7105ea6528fee8d8956c27d5c1968231a Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 23 Nov 2011 11:48:21 +0000 Subject: [PATCH] win32 drag-and-drop improvement. --- .../native/juce_win32_Windowing.cpp | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index ea840662f9..e892ac4d8d 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -1962,7 +1962,10 @@ private: JUCE_COMRESULT DragEnter (IDataObject* pDataObject, DWORD grfKeyState, POINTL mousePos, DWORD* pdwEffect) { - updateFileList (pDataObject); + HRESULT hr = updateFileList (pDataObject); + if (FAILED (hr)) + return hr; + return DragOver (grfKeyState, mousePos, pdwEffect); } @@ -1981,10 +1984,15 @@ private: JUCE_COMRESULT Drop (IDataObject* pDataObject, DWORD /*grfKeyState*/, POINTL mousePos, DWORD* pdwEffect) { - updateFileList (pDataObject); - const bool wasWanted = owner.handleFileDragDrop (files, getMousePos (mousePos)); - *pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE; - return S_OK; + HRESULT hr = updateFileList (pDataObject); + if (SUCCEEDED (hr)) + { + const bool wasWanted = owner.handleFileDragDrop (files, getMousePos (mousePos)); + *pdwEffect = wasWanted ? (DWORD) DROPEFFECT_COPY : (DWORD) DROPEFFECT_NONE; + hr = S_OK; + } + + return hr; } private: @@ -2015,14 +2023,16 @@ private: } } - void updateFileList (IDataObject* const pDataObject) + HRESULT updateFileList (IDataObject* const pDataObject) { files.clear(); FORMATETC format = { CF_HDROP, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; STGMEDIUM medium = { TYMED_HGLOBAL, { 0 }, 0 }; - if (pDataObject->GetData (&format, &medium) == S_OK) + HRESULT hr = pDataObject->GetData (&format, &medium); + + if (SUCCEEDED (hr)) { const SIZE_T totalLen = GlobalSize (medium.hGlobal); const LPDROPFILES dropFiles = (const LPDROPFILES) GlobalLock (medium.hGlobal); @@ -2035,6 +2045,8 @@ private: GlobalUnlock (medium.hGlobal); } + + return hr; } JUCE_DECLARE_NON_COPYABLE (JuceDropTarget);