From 66f8be7b731c44fd1600c80298ba7710d4d06b6e Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 22 Sep 2011 16:53:07 +0200 Subject: Fix mouse coordinate translation when searching for a drop target MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correctly transform the coordinates when mapping from parent to child in the window hierarchy. Also avoid a second roundtrip to the xserver querying information that we already have. Change-Id: Ia13f1c7ee20c60df283562daa4869d6db30a37e9 Reviewed-on: http://codereview.qt-project.org/5558 Reviewed-by: Qt Sanity Bot Reviewed-by: Samuel Rødal --- src/plugins/platforms/xcb/qxcbdrag.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 5422c6089e..12fb8bd857 100644 --- a/src/plugins/platforms/xcb/qxcbdrag.cpp +++ b/src/plugins/platforms/xcb/qxcbdrag.cpp @@ -274,7 +274,7 @@ xcb_window_t QXcbDrag::findRealWindow(const QPoint & pos, xcb_window_t w, int md void QXcbDrag::move(const QMouseEvent *me) { - DEBUG() << "QDragManager::move enter"; + DEBUG() << "QDragManager::move enter" << me->globalPos(); // ### QPoint globalPos = me->globalPos(); @@ -326,7 +326,7 @@ void QXcbDrag::move(const QMouseEvent *me) //me xcb_window_t src = rootwin; while (target != 0) { - DNDDEBUG << "checking target for XdndAware" << target; + DNDDEBUG << "checking target for XdndAware" << target << lx << ly; // translate coordinates translate = ::translateCoordinates(connection(), src, target, lx, ly); @@ -336,7 +336,8 @@ void QXcbDrag::move(const QMouseEvent *me) } lx = translate->dst_x; ly = translate->dst_y; - src = translate->child; + src = target; + xcb_window_t child = translate->child; free(translate); // check if it has XdndAware @@ -350,14 +351,7 @@ void QXcbDrag::move(const QMouseEvent *me) break; } - // find child at the coordinates - translate = ::translateCoordinates(connection(), src, src, lx, ly); - if (!translate) { - target = 0; - break; - } - target = translate->child; - free(translate); + target = child; } if (!target || target == QDragManager::self()->shapedPixmapWindow->handle()->winId()) { -- cgit v1.2.3