Fix QApplicationPrivate::pickMouseReceiver() crash
authorDebao Zhang <dbzhang800@gmail.com>
Fri, 1 Jun 2012 04:26:53 +0000 (21:26 -0700)
committerQt by Nokia <qt-info@nokia.com>
Fri, 1 Jun 2012 16:26:18 +0000 (18:26 +0200)
When a widget associate with a QWidgetWindow received a mouse event, but
another widget which is not a child of the widget has grabbed the mouse, the
application will crash. As QWidget::mapFrom() only works when mapping from
parent to child.

This is the side effect of SHA: f6c107d799d14bbdb2cb71b8446483541bb0adb5

Task-number: QTBUG-25985
Change-Id: If2e6289e02d6d67c215694f2217221c9c7a0af46
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
src/widgets/kernel/qapplication.cpp

index f4a565c..1ca30c5 100644 (file)
@@ -2447,7 +2447,7 @@ QWidget *QApplicationPrivate::pickMouseReceiver(QWidget *candidate, const QPoint
 
     if (mouseGrabber && mouseGrabber != candidate) {
         receiver = mouseGrabber;
-        *pos = receiver->mapFrom(candidate, windowPos);
+        *pos = receiver->mapFromGlobal(candidate->mapToGlobal(windowPos));
 #ifdef ALIEN_DEBUG
         qDebug() << "  ** receiver adjusted to:" << receiver << "pos:" << pos;
 #endif