diff options
| author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-03-11 12:57:06 +0100 |
|---|---|---|
| committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-03-11 14:19:20 +0100 |
| commit | 4a1d18af6209db5795f53f736216b623ef5489ed (patch) | |
| tree | 150c891fb897070edbbc505a4005448a5acd6a53 | |
| parent | 81292d332d5c7dabef3295d5bef3377359157206 (diff) | |
Menu: Close menus on press when mouse is outside the popup
Change-Id: I1d76abcd1c306c6a6f0ce8dbffe980f95f6bf0ae
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
| -rw-r--r-- | src/controls/qtmenupopupwindow.cpp | 10 | ||||
| -rw-r--r-- | src/controls/qtmenupopupwindow_p.h | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/controls/qtmenupopupwindow.cpp b/src/controls/qtmenupopupwindow.cpp index 64fdd11f3..4e461c217 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 fef203d39..8eccbfb59 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 *); |
