diff options
-rw-r--r-- | src/gui/kernel/qguiapplication.cpp | 9 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp | 1 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 901f47c584..bf8440cccf 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -210,6 +210,11 @@ static inline void clearFontUnlocked() QGuiApplicationPrivate::app_font = 0; } +static inline bool isPopupWindow(const QWindow *w) +{ + return (w->flags() & Qt::WindowType_Mask) == Qt::Popup; +} + /*! \class QGuiApplication \brief The QGuiApplication class manages the GUI application's control @@ -493,7 +498,7 @@ static void updateBlockedStatusRecursion(QWindow *window, bool shouldBeBlocked) void QGuiApplicationPrivate::updateBlockedStatus(QWindow *window) { bool shouldBeBlocked = false; - if ((window->type() & Qt::Popup) != Qt::Popup && !self->modalWindowList.isEmpty()) + if (!isPopupWindow(window) && !self->modalWindowList.isEmpty()) shouldBeBlocked = self->isWindowBlocked(window); updateBlockedStatusRecursion(window, shouldBeBlocked); } @@ -503,7 +508,7 @@ void QGuiApplicationPrivate::showModalWindow(QWindow *modal) self->modalWindowList.prepend(modal); // Send leave for currently entered window if it should be blocked - if (currentMouseWindow && (currentMouseWindow->type() & Qt::Popup) != Qt::Popup) { + if (currentMouseWindow && !isPopupWindow(currentMouseWindow)) { bool shouldBeBlocked = self->isWindowBlocked(currentMouseWindow); if (shouldBeBlocked) { // Remove the new window from modalWindowList temporarily so leave can go through diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 29f198f1ba..663f664d94 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -422,6 +422,7 @@ void tst_QGuiApplication::modalWindow() QScopedPointer<BlockableWindow> window2(new BlockableWindow); window2->setTitle(QStringLiteral("window2")); + window2->setFlags(window2->flags() & Qt::Tool); // QTBUG-32433, don't be fooled by unusual window flags. window2->resize(windowSize, windowSize); window2->setFramePosition(QPoint(x, y)); x += spacing + windowSize; |