macOS: Remove special cases in enter/leave event handling
The Cocoa QPA plugin no longer tracks popups, but dispatches enter/leave events when popups show and hide. So the special handling in tests and QWidgetWindow can go away now. Change-Id: Ib6ef00689de231996e5e57ecdd8fd0d4c861d68b Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
parent
0be5bf3e64
commit
a03a67fbfa
@ -392,14 +392,13 @@ QPointer<QWidget> qt_last_mouse_receiver = nullptr;
|
||||
|
||||
void QWidgetWindow::handleEnterLeaveEvent(QEvent *event)
|
||||
{
|
||||
#if !defined(Q_OS_MACOS) && !defined(Q_OS_IOS) // Cocoa tracks popups
|
||||
// Ignore all enter/leave events from QPA if we are not on the first-level context menu.
|
||||
// This prevents duplicated events on most platforms. Fake events will be delivered in
|
||||
// QWidgetWindow::handleMouseEvent(QMouseEvent *). Make an exception whether the widget
|
||||
// is already under mouse - let the mouse leave.
|
||||
if (QApplicationPrivate::inPopupMode() && m_widget != QApplication::activePopupWidget() && !m_widget->underMouse())
|
||||
return;
|
||||
#endif
|
||||
|
||||
if (event->type() == QEvent::Leave) {
|
||||
QWidget *enter = nullptr;
|
||||
// Check from window system event queue if the next queued enter targets a window
|
||||
@ -540,7 +539,6 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
||||
if (receiver != activePopupWidget)
|
||||
widgetPos = receiver->mapFromGlobal(event->globalPosition().toPoint());
|
||||
|
||||
#if !defined(Q_OS_MACOS) && !defined(Q_OS_IOS) // Cocoa tracks popups
|
||||
const bool reallyUnderMouse = activePopupWidget->rect().contains(mapped);
|
||||
const bool underMouse = activePopupWidget->underMouse();
|
||||
if (underMouse != reallyUnderMouse) {
|
||||
@ -558,7 +556,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
|
||||
receiver = activePopupWidget;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if ((event->type() != QEvent::MouseButtonPress) || !(QMutableSinglePointEvent::from(event)->isDoubleClick())) {
|
||||
// if the widget that was pressed is gone, then deliver move events without buttons
|
||||
const auto buttons = event->type() == QEvent::MouseMove && qt_popup_down_closed
|
||||
|
@ -11506,10 +11506,6 @@ void tst_QWidget::underMouse()
|
||||
|
||||
// Mouse leaves popup and enters topLevelWidget, should cause leave for popup
|
||||
// but no enter to topLevelWidget.
|
||||
#ifdef Q_OS_DARWIN
|
||||
// Artificial leave event needed for Cocoa.
|
||||
QWindowSystemInterface::handleLeaveEvent(popupWindow);
|
||||
#endif
|
||||
QTest::mouseMove(popupWindow, popupWindow->mapFromGlobal(window->mapToGlobal(inWindowPoint)));
|
||||
QApplication::processEvents();
|
||||
QVERIFY(!topLevelWidget.underMouse());
|
||||
|
Loading…
x
Reference in New Issue
Block a user