From 54334ca2e51ec43a07872c8b5861e5900d6b6cbb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 29 Aug 2012 13:09:22 +0200 Subject: Windows: Fix Drag and drop in Designer. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When hitting on a child widget that does not accept drops, go up the hierarchy until the parent is hit or a widget that accepts drops is found. Introduced by f6bf4b2baa91e55f40596bf3f2823b119fdfa5e0 . Task-number: QTBUG-22987 Task-number: QTBUG-27037 Change-Id: I4d9308942c1109c11f7e31555d4ad84fa2610d15 Reviewed-by: Markku Tapio Heikkilä Reviewed-by: Lars Knoll --- src/gui/kernel/qdnd_win.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qdnd_win.cpp b/src/gui/kernel/qdnd_win.cpp index 52f3276..20dfa76 100644 --- a/src/gui/kernel/qdnd_win.cpp +++ b/src/gui/kernel/qdnd_win.cpp @@ -690,6 +690,11 @@ void QOleDropTarget::sendDragEnterEvent(QWidget *dragEnterWidget, DWORD grfKeySt } +static inline bool acceptsDrop(const QWidget *w) +{ + return w->testAttribute(Qt::WA_DropSiteRegistered) && w->acceptDrops(); +} + QT_ENSURE_STACK_ALIGNED_FOR_SSE STDMETHODIMP QOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) { @@ -702,9 +707,15 @@ QOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) dragOverWidget = widget; - if (!QApplicationPrivate::tryModalHelper(dragOverWidget) - || !dragOverWidget->testAttribute(Qt::WA_DropSiteRegistered) - || !dragOverWidget->acceptDrops()) { + if (!QApplicationPrivate::tryModalHelper(dragOverWidget)) { + *pdwEffect = DROPEFFECT_NONE; + return NOERROR; + } + + while (dragOverWidget && dragOverWidget != widget && !acceptsDrop(dragOverWidget)) + dragOverWidget = dragOverWidget->parentWidget(); + + if (!dragOverWidget || !acceptsDrop(dragOverWidget)) { *pdwEffect = DROPEFFECT_NONE; return NOERROR; } -- cgit v0.12