summaryrefslogtreecommitdiffstats
path: root/src/widgets/util
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2018-09-25 18:35:31 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2018-09-26 08:35:30 +0000
commit5e64957ee4162ecf4456306a530a68761c2b127f (patch)
tree358380913e30c519fdf3b059c690fcd8f46219f5 /src/widgets/util
parentf99e956d65058e22780d99832987edad16f6d077 (diff)
Fix QCompleter popups preventing the application from exiting
Due to an implementation detail regarding setParent() and setWindowFlags(), if a QCompleter popup ends up being the last open window after closing the main window, the application would be prevented from exiting even after selecting an item in the popup. This is due to adjustQuitOnCloseAttribute() not being called when passing a Qt::Popup flag to setParent(parent, windowFlags). Use setWindowFlags() directly, which adjusts the quit on close attribute, and allows an application to exit properly. Change-Id: Ic4cff9504df268556d851e40d5ae08b7ed4dc3bf Fixes: QTBUG-69924 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/widgets/util')
-rw-r--r--src/widgets/util/qcompleter.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp
index 599b983748..22fb0a511d 100644
--- a/src/widgets/util/qcompleter.cpp
+++ b/src/widgets/util/qcompleter.cpp
@@ -1233,7 +1233,14 @@ void QCompleter::setPopup(QAbstractItemView *popup)
Qt::FocusPolicy origPolicy = Qt::NoFocus;
if (d->widget)
origPolicy = d->widget->focusPolicy();
- popup->setParent(0, Qt::Popup);
+
+ // Mark the widget window as a popup, so that if the last non-popup window is closed by the
+ // user, the application should not be prevented from exiting. It needs to be set explicitly via
+ // setWindowFlag(), because passing the flag via setParent(parent, windowFlags) does not call
+ // QWidgetPrivate::adjustQuitOnCloseAttribute(), and causes an application not to exit if the
+ // popup ends up being the last window.
+ popup->setParent(nullptr);
+ popup->setWindowFlag(Qt::Popup);
popup->setFocusPolicy(Qt::NoFocus);
if (d->widget)
d->widget->setFocusPolicy(origPolicy);