const bool graphicsWidget = nativeWidget->testAttribute(Qt::WA_DontShowOnScreen);
+ bool widgetUnderMouse = QRectF(receiver->rect()).contains(event->localPos());
+
if (*buttonDown) {
if (!graphicsWidget) {
// Register the widget that shall receive a leave event
if (event->type() == QEvent::MouseButtonRelease && !event->buttons())
*buttonDown = 0;
}
- } else if (lastMouseReceiver) {
+ } else if (lastMouseReceiver && widgetUnderMouse) {
// Dispatch enter/leave if we move:
// 1) from an alien widget to another alien widget or
// from a native widget to an alien widget (first OR case)
#include <QtGui/qguiapplication.h>
#include <QtGui/qscreen.h>
#include <qmenubar.h>
+#include <qcompleter.h>
#include <qtableview.h>
#include <qtreewidget.h>
void palettePropagation();
void palettePropagation2();
void enabledPropagation();
+ void popupEnterLeave();
#ifndef QT_NO_DRAGANDDROP
void acceptDropsPropagation();
#endif
} \
}
+void tst_QWidget::popupEnterLeave()
+{
+ QWidget parent;
+ parent.setWindowFlags(Qt::FramelessWindowHint);
+ parent.setGeometry(10, 10, 200, 100);
+
+ ColorWidget alien(&parent, Qt::black);
+ alien.setGeometry(0, 0, 10, 10);
+ alien.show();
+
+ parent.show();
+
+ QTest::qWaitForWindowShown(parent.windowHandle());
+
+ QWindowSystemInterface::handleMouseEvent(parent.windowHandle(), QPointF(5, 5), QPointF(), Qt::LeftButton, Qt::NoModifier);
+ QTest::qWait(100);
+ QWindowSystemInterface::handleMouseEvent(parent.windowHandle(), QPointF(5, 5), QPointF(), Qt::NoButton, Qt::NoModifier);
+ QTest::qWait(100);
+
+ QStringList wordList;
+ wordList << "alpha" << "omega" << "omicron" << "zeta";
+
+ QLineEdit popup(&parent);
+
+ QCompleter completer(wordList);
+ completer.setCaseSensitivity(Qt::CaseInsensitive);
+ popup.setCompleter(&completer);
+ popup.setWindowFlags(Qt::Popup);
+ popup.setGeometry(20, 20, 80, 20);
+
+ popup.show();
+
+ QTest::qWaitForWindowShown(popup.windowHandle());
+
+ QTest::qWait(100);
+
+ QWindowSystemInterface::handleMouseEvent(popup.windowHandle(), QPointF(-5, -5), QPointF(), Qt::LeftButton, Qt::NoModifier);
+ QTest::qWait(100);
+ QWindowSystemInterface::handleMouseEvent(popup.windowHandle(), QPointF(-5, -5), QPointF(), Qt::NoButton, Qt::NoModifier);
+ QTest::qWait(100);
+
+ QTest::qWait(1000);
+ QVERIFY(!popup.underMouse());
+}
+
void tst_QWidget::moveChild_data()
{
QTest::addColumn<QPoint>("offset");