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 <qt_sanity_bot@ovi.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
bb10
Lars Knoll 2011-09-22 16:53:07 +02:00 committed by Qt by Nokia
parent c4049750e7
commit 66f8be7b73
1 changed files with 5 additions and 11 deletions

View 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()) {