Unify QDialog WA_WState_ExplicitShowHide handling

Instead of checking it inside QDialogPrivate::setVisible and its
overrides, we can check it in QDialog::setVisible, up front.

The logic in QDialogPrivate::setVisible related to modality that
was executed prior to the WA_WState_ExplicitShowHide is now skipped
in the case the WA_WState_ExplicitShowHide condition hits, but this
makes sense as the modality logic has a second part at the end
of the function, restoring the modality, and this part was never
executed as the code was prior to this change.

Change-Id: I9580e91dbc5a981c83538d765b86138afee44f14
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Tor Arne Vestbø 2023-10-20 18:33:05 +02:00
parent c0f13eeb99
commit 92194ac571
6 changed files with 5 additions and 21 deletions

View File

@ -2156,11 +2156,6 @@ void QColorDialog::setVisible(bool visible)
void QColorDialogPrivate::setVisible(bool visible)
{
Q_Q(QColorDialog);
if (visible){
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && !q->testAttribute(Qt::WA_WState_Hidden))
return;
} else if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden))
return;
if (visible)
selectedQColor = QColor();

View File

@ -740,6 +740,10 @@ void QDialog::closeEvent(QCloseEvent *e)
void QDialog::setVisible(bool visible)
{
Q_D(QDialog);
if (testAttribute(Qt::WA_WState_ExplicitShowHide) && testAttribute(Qt::WA_WState_Hidden) != visible)
return;
d->setVisible(visible);
}
@ -764,9 +768,6 @@ void QDialogPrivate::setVisible(bool visible)
}
if (visible) {
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && !q->testAttribute(Qt::WA_WState_Hidden))
return;
q->QWidget::setVisible(visible);
// Window activation might be prevented. We can't test isActiveWindow here,
@ -817,8 +818,6 @@ void QDialogPrivate::setVisible(bool visible)
#endif
} else {
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden))
return;
#if QT_CONFIG(accessibility)
if (q->isVisible()) {

View File

@ -407,8 +407,6 @@ void QErrorMessage::showMessage(const QString &message, const QString &type)
void QErrorMessagePrivate::setVisible(bool visible)
{
Q_Q(QErrorMessage);
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden) != visible)
return;
if (canBeNativeDialog())
setNativeDialogVisible(visible);

View File

@ -848,11 +848,6 @@ void QFileDialog::setVisible(bool visible)
void QFileDialogPrivate::setVisible(bool visible)
{
Q_Q(QFileDialog);
if (visible){
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && !q->testAttribute(Qt::WA_WState_Hidden))
return;
} else if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden))
return;
if (canBeNativeDialog()){
if (setNativeDialogVisible(visible)){

View File

@ -974,8 +974,7 @@ void QFontDialog::setVisible(bool visible)
void QFontDialogPrivate::setVisible(bool visible)
{
Q_Q(QFontDialog);
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden) != visible)
return;
if (canBeNativeDialog())
setNativeDialogVisible(visible);
if (nativeDialogInUse) {

View File

@ -1660,8 +1660,6 @@ void QMessageBox::open(QObject *receiver, const char *member)
void QMessageBoxPrivate::setVisible(bool visible)
{
Q_Q(QMessageBox);
if (q->testAttribute(Qt::WA_WState_ExplicitShowHide) && q->testAttribute(Qt::WA_WState_Hidden) != visible)
return;
if (canBeNativeDialog())
setNativeDialogVisible(visible);