diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 0ed73c18362..c516c56bc78 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2395,13 +2395,16 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo mousePressButton = Qt::NoButton; } else { static unsigned long lastPressTimestamp = 0; + static QPointer lastPressWindow = nullptr; mouse_buttons = e->buttons; if (mousePress) { ulong doubleClickInterval = static_cast(QGuiApplication::styleHints()->mouseDoubleClickInterval()); const auto timestampDelta = e->timestamp - lastPressTimestamp; - doubleClick = timestampDelta > 0 && timestampDelta < doubleClickInterval && button == mousePressButton; + doubleClick = timestampDelta > 0 && timestampDelta < doubleClickInterval + && button == mousePressButton && lastPressWindow == e->window; mousePressButton = button; lastPressTimestamp = e ->timestamp; + lastPressWindow = e->window; } } diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp index 71fb2705f52..4c826a1db9e 100644 --- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp +++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp @@ -1920,6 +1920,28 @@ void tst_QWindow::mouseEventSequence() QCOMPARE(window.mouseReleasedCount, 4); QCOMPARE(window.mouseDoubleClickedCount, 0); QCOMPARE(window.mouseSequenceSignature, QLatin1String("prprprpr")); + + // Test double click across windows + InputTestWindow windowNew; + windowNew.setGeometry(QRect(m_availableTopLeft + QPoint(80, 80), m_testWindowSize)); + windowNew.show(); + QVERIFY(QTest::qWaitForWindowExposed(&windowNew)); + + timestamp += doubleClickInterval; + windowNew.resetCounters(); + window.resetCounters(); + + simulateMouseClick(&windowNew, timestamp, local, local); + simulateMouseClick(&window, timestamp, local, local); + QCoreApplication::processEvents(); + QCOMPARE(windowNew.mousePressedCount, 1); + QCOMPARE(windowNew.mouseReleasedCount, 1); + QCOMPARE(windowNew.mouseDoubleClickedCount, 0); + QCOMPARE(windowNew.mouseSequenceSignature, QLatin1String("pr")); + QCOMPARE(window.mousePressedCount, 1); + QCOMPARE(window.mouseReleasedCount, 1); + QCOMPARE(window.mouseDoubleClickedCount, 0); + QCOMPARE(window.mouseSequenceSignature, QLatin1String("pr")); } void tst_QWindow::windowModality()