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>
This commit is contained in:
parent
f99e956d65
commit
5e64957ee4
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user