diff options
| author | JMC47 <JMC4789@gmail.com> | 2020-04-21 23:59:37 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-04-21 23:59:37 -0400 |
| commit | a5bd263dfba780de6a6fc88ccc996d42d350d416 (patch) | |
| tree | 0337aa4a34d5c405926dc0ca49c761cc44522bf2 /Source/Core/DolphinQt/Config/FilesystemWidget.cpp | |
| parent | c33565295dd913991a543147f81be8687f3be737 (diff) | |
| parent | 55f787b89898d28bd6245ec6768247659dd85b88 (diff) | |
Merge pull request #8714 from JosJuice/progress-dialog-thread
DolphinQt: Run tasks that use progress dialogs on separate threads
Diffstat (limited to 'Source/Core/DolphinQt/Config/FilesystemWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Config/FilesystemWidget.cpp | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/Source/Core/DolphinQt/Config/FilesystemWidget.cpp b/Source/Core/DolphinQt/Config/FilesystemWidget.cpp index 461a83ccc6..ddffe76963 100644 --- a/Source/Core/DolphinQt/Config/FilesystemWidget.cpp +++ b/Source/Core/DolphinQt/Config/FilesystemWidget.cpp @@ -10,7 +10,6 @@ #include <QFileInfo> #include <QHeaderView> #include <QMenu> -#include <QProgressDialog> #include <QStandardItemModel> #include <QStyleFactory> #include <QTreeView> @@ -23,6 +22,7 @@ #include "DiscIO/Volume.h" #include "DolphinQt/QtUtils/ModalMessageBox.h" +#include "DolphinQt/QtUtils/ParallelProgressDialog.h" #include "DolphinQt/Resources.h" #include "UICommon/UICommon.h" @@ -282,28 +282,34 @@ void FilesystemWidget::ExtractDirectory(const DiscIO::Partition& partition, cons std::unique_ptr<DiscIO::FileInfo> info = filesystem->FindFileInfo(path.toStdString()); u32 size = info->GetTotalChildren(); - QProgressDialog* dialog = new QProgressDialog(this); - dialog->setWindowFlags(dialog->windowFlags() & ~Qt::WindowContextHelpButtonHint); - dialog->setMinimum(0); - dialog->setMaximum(size); - dialog->show(); - dialog->setWindowTitle(tr("Progress")); + ParallelProgressDialog dialog(this); + dialog.GetRaw()->setMinimum(0); + dialog.GetRaw()->setMaximum(size); + dialog.GetRaw()->setWindowTitle(tr("Progress")); - bool all = path.isEmpty(); + const bool all = path.isEmpty(); - DiscIO::ExportDirectory( - *m_volume, partition, *info, true, path.toStdString(), out.toStdString(), - [all, dialog](const std::string& current) { - dialog->setLabelText( - (all ? QObject::tr("Extracting All Files...") : QObject::tr("Extracting Directory...")) - .append(QStringLiteral(" %1").arg(QString::fromStdString(current)))); - dialog->setValue(dialog->value() + 1); + std::future<void> future = std::async(std::launch::async, [&] { + int progress = 0; - QCoreApplication::processEvents(); - return dialog->wasCanceled(); - }); + DiscIO::ExportDirectory( + *m_volume, partition, *info, true, path.toStdString(), out.toStdString(), + [all, &dialog, &progress](const std::string& current) { + dialog.SetLabelText( + (all ? QObject::tr("Extracting All Files...") : + QObject::tr("Extracting Directory...")) + .append(QStringLiteral(" %1").arg(QString::fromStdString(current)))); + dialog.SetValue(++progress); - dialog->close(); + QCoreApplication::processEvents(); + return dialog.WasCanceled(); + }); + + dialog.Reset(); + }); + + dialog.GetRaw()->exec(); + future.get(); } void FilesystemWidget::ExtractFile(const DiscIO::Partition& partition, const QString& path, |
