Merge pull request #1302 from Ryex/fix/progress-dialog-segfault

fix: segfault in progress dialog
This commit is contained in:
Rachel Powers 2023-07-07 21:25:14 -07:00 committed by Sefa Eyeoglu
parent 721ac015f3
commit a65e4af365
No known key found for this signature in database
GPG Key ID: E13DFD4B47127951

View File

@ -34,6 +34,7 @@
*/ */
#include "ProgressDialog.h" #include "ProgressDialog.h"
#include <QPoint>
#include "ui_ProgressDialog.h" #include "ui_ProgressDialog.h"
#include <limits> #include <limits>
@ -68,6 +69,7 @@ ProgressDialog::ProgressDialog(QWidget* parent) : QDialog(parent), ui(new Ui::Pr
setAttribute(Qt::WidgetAttribute::WA_QuitOnClose, true); setAttribute(Qt::WidgetAttribute::WA_QuitOnClose, true);
setSkipButton(false); setSkipButton(false);
changeProgress(0, 100); changeProgress(0, 100);
updateSize();
} }
void ProgressDialog::setSkipButton(bool present, QString label) void ProgressDialog::setSkipButton(bool present, QString label)
@ -96,22 +98,29 @@ ProgressDialog::~ProgressDialog()
void ProgressDialog::updateSize() void ProgressDialog::updateSize()
{ {
QSize lastSize = this->size(); QSize lastSize = this->size();
QSize qSize = QSize(480, minimumSizeHint().height()); QPoint lastPos = this->pos();
int minHeight = ui->globalStatusDetailsLabel->minimumSize().height() + (ui->verticalLayout->spacing() * 2);
minHeight += ui->globalProgressBar->minimumSize().height() + ui->verticalLayout->spacing();
if (!ui->taskProgressScrollArea->isHidden())
minHeight += ui->taskProgressScrollArea->minimumSizeHint().height() + ui->verticalLayout->spacing();
if (ui->skipButton->isVisible())
minHeight += ui->skipButton->height() + ui->verticalLayout->spacing();
minHeight = std::max(minHeight, 60);
QSize minSize = QSize(480, minHeight);
setMinimumSize(minSize);
adjustSize();
QSize newSize = this->size();
// if the current window is too small // if the current window is too small
if ((lastSize != qSize) && (lastSize.height() < qSize.height())) if ((lastSize != newSize) && (lastSize.height() < newSize.height()))
{ {
resize(qSize); QSize sizeDiff = lastSize - newSize; // last size was smaller, the results should be negative
// center on old position after resize
// keep the dialog in the center after a resize QPoint newPos(lastPos.x() + (sizeDiff.width() / 2), lastPos.y() + (sizeDiff.height() / 2));
this->move( this->move(newPos);
this->parentWidget()->x() + (this->parentWidget()->width() - this->width()) / 2,
this->parentWidget()->y() + (this->parentWidget()->height() - this->height()) / 2
);
} }
setMinimumSize(qSize);
} }
int ProgressDialog::execWithTask(Task* task) int ProgressDialog::execWithTask(Task* task)
@ -201,7 +210,9 @@ void ProgressDialog::onTaskSucceeded()
void ProgressDialog::changeStatus(const QString& status) void ProgressDialog::changeStatus(const QString& status)
{ {
ui->globalStatusLabel->setText(task->getStatus()); ui->globalStatusLabel->setText(task->getStatus());
ui->globalStatusLabel->adjustSize();
ui->globalStatusDetailsLabel->setText(task->getDetails()); ui->globalStatusDetailsLabel->setText(task->getDetails());
ui->globalStatusDetailsLabel->adjustSize();
updateSize(); updateSize();
} }