diff --git a/src/controls/qtmenupopupwindow.cpp b/src/controls/qtmenupopupwindow.cpp index 64fdd11f371c88669a314986966b1cf3f59a0a1e..4e461c2177243bb67a20d31c552331e0bf604f0c 100644 --- a/src/controls/qtmenupopupwindow.cpp +++ b/src/controls/qtmenupopupwindow.cpp @@ -141,6 +141,13 @@ void QtMenuPopupWindow::mouseMoveEvent(QMouseEvent *e) forwardEventToTransientParent(e); } +void QtMenuPopupWindow::mousePressEvent(QMouseEvent *e) +{ + QRect rect = QRect(QPoint(), size()); + if (!rect.contains(e->pos())) + forwardEventToTransientParent(e); +} + void QtMenuPopupWindow::mouseReleaseEvent(QMouseEvent *e) { QRect rect = QRect(QPoint(), size()); @@ -159,7 +166,8 @@ void QtMenuPopupWindow::mouseReleaseEvent(QMouseEvent *e) void QtMenuPopupWindow::forwardEventToTransientParent(QMouseEvent *e) { if (!qobject_cast<QtMenuPopupWindow*>(transientParent()) - && m_mouseMoved && e->type() == QEvent::MouseButtonRelease) { + && (m_mouseMoved && e->type() == QEvent::MouseButtonRelease + || e->type() == QEvent::MouseButtonPress)) { // Clicked outside any menu dismissMenu(); } else if (transientParent()) { diff --git a/src/controls/qtmenupopupwindow_p.h b/src/controls/qtmenupopupwindow_p.h index fef203d39d380c346f82e6a2d5e712c185d6ac8a..8eccbfb5995fe0968667211197eb08bc9a842432 100644 --- a/src/controls/qtmenupopupwindow_p.h +++ b/src/controls/qtmenupopupwindow_p.h @@ -68,6 +68,7 @@ Q_SIGNALS: void menuDismissed(); protected: + void mousePressEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *);