From: Lars Knoll Date: Thu, 22 Sep 2011 14:53:07 +0000 (+0200) Subject: Fix mouse coordinate translation when searching for a drop target X-Git-Tag: qt-v5.0.0-alpha1~3437 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=66f8be7b731c44fd1600c80298ba7710d4d06b6e;p=profile%2Fivi%2Fqtbase.git Fix mouse coordinate translation when searching for a drop target 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 --- diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp index 5422c60..12fb8bd 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()) {