summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2016-11-29 16:43:42 +0100
committerPaul Olav Tvete <paul.tvete@qt.io>2017-03-14 12:04:32 +0000
commita44be23de24c70e2a8c861c69371a5c7d8a0df97 (patch)
treee7cfa4f8d8c7c0436e6c54c8826058400c1ce98d /src
parentee1bda0fbd4d7d021fa636734c36905a920402e9 (diff)
Close popups when blocked by modal dialog
Don't block the event that Qt depends on to close popups. Task-number: QTBUG-57292 Change-Id: Ida1f928b81868f68a7b1e19cd0b83485d2a7232e Reviewed-by: Lars Knoll <lars.knoll@qt.io> (cherry picked from commit 5b65698248325576faa03a2bb78d17349a33a194)
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qguiapplication.cpp2
-rw-r--r--src/gui/kernel/qguiapplication_p.h1
-rw-r--r--src/widgets/kernel/qapplication_p.h1
3 files changed, 3 insertions, 1 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index 950385f0ce..4214fc4b67 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -1874,7 +1874,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
QMouseEvent ev(type, localPoint, localPoint, globalPoint, button, buttons, e->modifiers, e->source);
ev.setTimestamp(e->timestamp);
- if (window->d_func()->blockedByModalWindow) {
+ if (window->d_func()->blockedByModalWindow && !qApp->d_func()->popupActive()) {
// a modal window is blocking this window, don't allow mouse events through
return;
}
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index 306d76c5f0..b0d4a36ad0 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -191,6 +191,7 @@ public:
static void hideModalWindow(QWindow *window);
static void updateBlockedStatus(QWindow *window);
virtual bool isWindowBlocked(QWindow *window, QWindow **blockingWindow = 0) const;
+ virtual bool popupActive() { return false; }
static Qt::MouseButtons buttons;
static ulong mousePressTime;
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 4b3cf773dc..7db6e9d3dc 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -163,6 +163,7 @@ public:
#endif
static bool inPopupMode();
+ bool popupActive() Q_DECL_OVERRIDE { return inPopupMode(); }
void closePopup(QWidget *popup);
void openPopup(QWidget *popup);
static void setFocusWidget(QWidget *focus, Qt::FocusReason reason);