Fix mouse coordinate translation when searching for a drop target
authorLars Knoll <lars.knoll@nokia.com>
Thu, 22 Sep 2011 14:53:07 +0000 (16:53 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 28 Sep 2011 01:17:04 +0000 (03:17 +0200)
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 <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/plugins/platforms/xcb/qxcbdrag.cpp

index 5422c60..12fb8bd 100644 (file)
@@ -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()) {