diff --git a/app/dialog/export/export.cpp b/app/dialog/export/export.cpp index a897871fa..a2163f3d9 100644 --- a/app/dialog/export/export.cpp +++ b/app/dialog/export/export.cpp @@ -20,6 +20,9 @@ ExportDialog::ExportDialog(ViewerOutput *viewer_node, QWidget *parent) : viewer_node_(viewer_node), previously_selected_format_(0), exporter_(nullptr), +#ifdef Q_OS_WINDOWS + taskbar_list_(nullptr), +#endif cancelled_(false) { QHBoxLayout* layout = new QHBoxLayout(this); @@ -309,6 +312,12 @@ void ExportDialog::accept() connect(exporter_, &Exporter::ExportEnded, this, &ExportDialog::ExporterIsDone); connect(exporter_, &Exporter::ProgressChanged, progress_bar_, &QProgressBar::setValue); +#ifdef Q_OS_WINDOWS + CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList, reinterpret_cast(&taskbar_list_)); + taskbar_list_->SetProgressState(reinterpret_cast(this->winId()), TBPF_NORMAL); + connect(exporter_, &Exporter::ProgressChanged, this, &ExportDialog::UpdateTaskbarProgress); +#endif + QMetaObject::invokeMethod(exporter_, "StartExporting", Qt::QueuedConnection); SetUIElementsEnabled(false); @@ -560,6 +569,12 @@ void ExportDialog::ExporterIsDone() QDialog::accept(); } else { if (!cancelled_) { +#ifdef Q_OS_WINDOWS + if (taskbar_list_) { + taskbar_list_->SetProgressState(reinterpret_cast(this->winId()), TBPF_ERROR); + } +#endif + QMessageBox::critical(this, tr("Export Status"), tr("Export failed: %1").arg(exporter_->GetExportError()), @@ -572,6 +587,14 @@ void ExportDialog::ExporterIsDone() exporter_->deleteLater(); exporter_ = nullptr; cancelled_ = false; + +#ifdef Q_OS_WINDOWS + if (taskbar_list_) { + taskbar_list_->SetProgressState(reinterpret_cast(this->winId()), TBPF_NOPROGRESS); + taskbar_list_->Release(); + taskbar_list_ = nullptr; + } +#endif } void ExportDialog::CancelExport() @@ -581,3 +604,12 @@ void ExportDialog::CancelExport() exporter_->Cancel(); } } + +#ifdef Q_OS_WINDOWS +void ExportDialog::UpdateTaskbarProgress(int progress) +{ + if (taskbar_list_) { + taskbar_list_->SetProgressValue(reinterpret_cast(this->winId()), progress, 100); + } +} +#endif diff --git a/app/dialog/export/export.h b/app/dialog/export/export.h index 5f55012c7..ce8cc4aac 100644 --- a/app/dialog/export/export.h +++ b/app/dialog/export/export.h @@ -7,6 +7,10 @@ #include #include +#ifdef Q_OS_WINDOWS +#include +#endif + #include "exportaudiotab.h" #include "exportcodec.h" #include "exportformat.h" @@ -64,6 +68,10 @@ private: QDialogButtonBox* buttons_; QPushButton* export_cancel_btn_; +#ifdef Q_OS_WINDOWS + ITaskbarList3* taskbar_list_; +#endif + bool cancelled_; enum Format { @@ -110,6 +118,10 @@ private slots: void CancelExport(); +#ifdef Q_OS_WINDOWS + void UpdateTaskbarProgress(int progress); +#endif + }; #endif // EXPORTDIALOG_H