summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@digia.com>2013-03-11 12:57:06 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-11 14:19:20 +0100
commit4a1d18af6209db5795f53f736216b623ef5489ed (patch)
tree150c891fb897070edbbc505a4005448a5acd6a53
parent81292d332d5c7dabef3295d5bef3377359157206 (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.cpp10
-rw-r--r--src/controls/qtmenupopupwindow_p.h1
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 *);