summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2014-02-03 16:52:46 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-08 11:16:36 +0100
commit9e6bb601319b48b95516afbf11796f4b78e5e0d9 (patch)
treeaa74f095aae8bff99e355deb13f8e653ed5a7c7d
parent4072d68f5756453ab50c1f87be711cbae3e9e2f0 (diff)
Windows: Post drag events for the window on which the drop site was registered.
Remove findDragOverWindow(); no longer try to find the window under cursor since that would require synthesizing drag leave events. This is left to the DnD handling of QWidgetWindow, which searches the child which accepts drops. Task-number: QTBUG-33635 Change-Id: I844041bb862bb0382147be4e28f880a26843c453 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com> Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r--src/plugins/platforms/windows/qwindowsdrag.cpp23
-rw-r--r--src/plugins/platforms/windows/qwindowsdrag.h1
2 files changed, 6 insertions, 18 deletions
diff --git a/src/plugins/platforms/windows/qwindowsdrag.cpp b/src/plugins/platforms/windows/qwindowsdrag.cpp
index 8f3ccdc0be..60c3daff23 100644
--- a/src/plugins/platforms/windows/qwindowsdrag.cpp
+++ b/src/plugins/platforms/windows/qwindowsdrag.cpp
@@ -673,14 +673,6 @@ QWindowsOleDropTarget::Release(void)
return m_refs;
}
-QWindow *QWindowsOleDropTarget::findDragOverWindow(const POINTL &pt) const
-{
- if (QWindowsWindow *child =
- QWindowsWindow::baseWindowOf(m_window)->childAtScreenPoint(QPoint(pt.x, pt.y)))
- return child->window();
- return m_window;
-}
-
void QWindowsOleDropTarget::handleDrag(QWindow *window, DWORD grfKeyState,
const QPoint &point, LPDWORD pdwEffect)
{
@@ -735,10 +727,9 @@ QWindowsOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
if (IDropTargetHelper* dh = QWindowsDrag::instance()->dropHelper())
dh->DragOver(reinterpret_cast<POINT*>(&pt), *pdwEffect);
- QWindow *dragOverWindow = findDragOverWindow(pt);
- qCDebug(lcQpaMime) << __FUNCTION__ << "widget=" << dragOverWindow << " key=" << grfKeyState
+ qCDebug(lcQpaMime) << __FUNCTION__ << "m_window" << m_window << "key=" << grfKeyState
<< "pt=" << pt.x << pt.y;
- const QPoint tmpPoint = QWindowsGeometryHint::mapFromGlobal(dragOverWindow, QPoint(pt.x,pt.y));
+ const QPoint tmpPoint = QWindowsGeometryHint::mapFromGlobal(m_window, QPoint(pt.x,pt.y));
// see if we should compress this event
if ((tmpPoint == m_lastPoint || m_answerRect.contains(tmpPoint))
&& m_lastKeyState == grfKeyState) {
@@ -747,7 +738,7 @@ QWindowsOleDropTarget::DragOver(DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect)
return NOERROR;
}
- handleDrag(dragOverWindow, grfKeyState, tmpPoint, pdwEffect);
+ handleDrag(m_window, grfKeyState, tmpPoint, pdwEffect);
return NOERROR;
}
@@ -774,12 +765,10 @@ QWindowsOleDropTarget::Drop(LPDATAOBJECT pDataObj, DWORD grfKeyState,
if (IDropTargetHelper* dh = QWindowsDrag::instance()->dropHelper())
dh->Drop(pDataObj, reinterpret_cast<POINT*>(&pt), *pdwEffect);
- QWindow *dropWindow = findDragOverWindow(pt);
-
qCDebug(lcQpaMime) << __FUNCTION__ << ' ' << m_window
- << " on " << dropWindow << " keys=" << grfKeyState << " pt=" << pt.x << ',' << pt.y;
+ << "keys=" << grfKeyState << "pt=" << pt.x << ',' << pt.y;
- m_lastPoint = QWindowsGeometryHint::mapFromGlobal(dropWindow, QPoint(pt.x,pt.y));
+ m_lastPoint = QWindowsGeometryHint::mapFromGlobal(m_window, QPoint(pt.x,pt.y));
// grfKeyState does not all ways contain button state in the drop so if
// it doesn't then use the last known button state;
if ((grfKeyState & KEY_STATE_BUTTON_MASK) == 0)
@@ -789,7 +778,7 @@ QWindowsOleDropTarget::Drop(LPDATAOBJECT pDataObj, DWORD grfKeyState,
QWindowsDrag *windowsDrag = QWindowsDrag::instance();
const QPlatformDropQtResponse response =
- QWindowSystemInterface::handleDrop(dropWindow, windowsDrag->dropData(), m_lastPoint,
+ QWindowSystemInterface::handleDrop(m_window, windowsDrag->dropData(), m_lastPoint,
translateToQDragDropActions(*pdwEffect));
if (response.isAccepted()) {
diff --git a/src/plugins/platforms/windows/qwindowsdrag.h b/src/plugins/platforms/windows/qwindowsdrag.h
index 33da4d6cc5..4f758fbf3f 100644
--- a/src/plugins/platforms/windows/qwindowsdrag.h
+++ b/src/plugins/platforms/windows/qwindowsdrag.h
@@ -74,7 +74,6 @@ public:
STDMETHOD(Drop)(LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect);
private:
- inline QWindow *findDragOverWindow(const POINTL &pt) const;
void handleDrag(QWindow *window, DWORD grfKeyState, const QPoint &, LPDWORD pdwEffect);
ULONG m_refs;