diff -u qt-everywhere-opensource-src-5.1.1-x64\qtbase\src\plugins\platforms\windows/qwindowsdrag.cpp qt-everywhere-opensource-src-5.1.1-x86\qtbase\src\plugins\platforms\windows/qwindowsdrag.cpp --- qt-everywhere-opensource-src-5.1.1-x64\qtbase\src\plugins\platforms\windows/qwindowsdrag.cpp 2013-08-25 21:03:36.000000000 +0400 +++ qt-everywhere-opensource-src-5.1.1-x86\qtbase\src\plugins\platforms\windows/qwindowsdrag.cpp 2013-09-23 16:53:57.878021600 +0400 @@ -601,26 +601,31 @@ QWindowsOleDropTarget::DragEnter(LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { + QWindow *dragOverWindow = findDragOverWindow(pt); + m_dragOverWindow = dragOverWindow; + if (IDropTargetHelper* dh = QWindowsDrag::instance()->dropHelper()) - dh->DragEnter(reinterpret_cast(m_window->winId()), pDataObj, reinterpret_cast(&pt), *pdwEffect); + dh->DragEnter(reinterpret_cast(dragOverWindow->winId()), pDataObj, reinterpret_cast(&pt), *pdwEffect); if (QWindowsContext::verboseOLE) - qDebug("%s widget=%p key=%lu, pt=%ld,%ld", __FUNCTION__, m_window, grfKeyState, pt.x, pt.y); + qDebug("%s widget=%p key=%lu, pt=%ld,%ld", __FUNCTION__, dragOverWindow, grfKeyState, pt.x, pt.y); QWindowsDrag::instance()->setDropDataObject(pDataObj); pDataObj->AddRef(); - const QPoint point = QWindowsGeometryHint::mapFromGlobal(m_window, QPoint(pt.x,pt.y)); - handleDrag(m_window, grfKeyState, point, pdwEffect); + const QPoint point = QWindowsGeometryHint::mapFromGlobal(dragOverWindow, QPoint(pt.x,pt.y)); + handleDrag(dragOverWindow, grfKeyState, point, pdwEffect); return NOERROR; } QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP QWindowsOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { + QWindow *dragOverWindow = findDragOverWindow(pt); + m_dragOverWindow = dragOverWindow; + if (IDropTargetHelper* dh = QWindowsDrag::instance()->dropHelper()) dh->DragOver(reinterpret_cast(&pt), *pdwEffect); - QWindow *dragOverWindow = findDragOverWindow(pt); if (QWindowsContext::verboseOLE) qDebug("%s widget=%p key=%lu, pt=%ld,%ld", __FUNCTION__, dragOverWindow, grfKeyState, pt.x, pt.y); const QPoint tmpPoint = QWindowsGeometryHint::mapFromGlobal(dragOverWindow, QPoint(pt.x,pt.y)); @@ -640,13 +645,15 @@ QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP QWindowsOleDropTarget::DragLeave() { + QWindow *dragOverWindow = m_dragOverWindow ? m_dragOverWindow.data() : m_window; + if (IDropTargetHelper* dh = QWindowsDrag::instance()->dropHelper()) dh->DragLeave(); if (QWindowsContext::verboseOLE) - qDebug().nospace() <<__FUNCTION__ << ' ' << m_window; + qDebug().nospace() <<__FUNCTION__ << ' ' << dragOverWindow; - QWindowSystemInterface::handleDrag(m_window, 0, QPoint(), Qt::IgnoreAction); + QWindowSystemInterface::handleDrag(dragOverWindow, 0, QPoint(), Qt::IgnoreAction); QWindowsDrag::instance()->releaseDropDataObject(); return NOERROR; diff -u qt-everywhere-opensource-src-5.1.1-x64\qtbase\src\plugins\platforms\windows/qwindowsdrag.h qt-everywhere-opensource-src-5.1.1-x86\qtbase\src\plugins\platforms\windows/qwindowsdrag.h --- qt-everywhere-opensource-src-5.1.1-x64\qtbase\src\plugins\platforms\windows/qwindowsdrag.h 2013-08-25 21:03:36.000000000 +0400 +++ qt-everywhere-opensource-src-5.1.1-x86\qtbase\src\plugins\platforms\windows/qwindowsdrag.h 2013-09-23 16:52:21.781525200 +0400 @@ -79,6 +79,7 @@ ULONG m_refs; QWindow *const m_window; + QPointer m_dragOverWindow; QRect m_answerRect; QPoint m_lastPoint; DWORD m_chosenEffect;