Fix centering dialogs
QDialog::setVisible() tries to adjusts the dialog position, but it's not really possible if the dialog size is not defined yet. Besides, if the dialog window is not created, QWidget::move() will not really move it and will set WA_PendingMoveEvent flag. And QWidget::setVisible() also will not change the position, because we reset WA_Moved flag. Thus it may break adjusting the position in QDialog::showEvent(). So adjust the position only in QDialog::showEvent(). Task-number: QTBUG-36185 Task-number: QTBUG-39259 Task-number: QTBUG-41844 Change-Id: I015a19f2e533f68178f4ee7519b17f5e9b5def7b Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
This commit is contained in:
parent
2d8c7087fb
commit
6468cf4e79
@ -720,13 +720,6 @@ void QDialog::setVisible(bool visible)
|
|||||||
if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden))
|
if (testAttribute(Qt::WA_WState_ExplicitShowHide) && !testAttribute(Qt::WA_WState_Hidden))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!testAttribute(Qt::WA_Moved)) {
|
|
||||||
Qt::WindowStates state = windowState();
|
|
||||||
adjustPosition(parentWidget());
|
|
||||||
setAttribute(Qt::WA_Moved, false); // not really an explicit position
|
|
||||||
if (state != windowState())
|
|
||||||
setWindowState(state);
|
|
||||||
}
|
|
||||||
QWidget::setVisible(visible);
|
QWidget::setVisible(visible);
|
||||||
showExtension(d->doShowExtension);
|
showExtension(d->doShowExtension);
|
||||||
QWidget *fw = window()->focusWidget();
|
QWidget *fw = window()->focusWidget();
|
||||||
|
Loading…
Reference in New Issue
Block a user