From 897b9ca3dde162a85d22e1f7de7bdbe9651b9a8c Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Thu, 18 Jun 2020 15:06:07 +1000 Subject: [PATCH] statusbar: disconnect old task when connecting a new one --- app/window/mainwindow/mainstatusbar.cpp | 21 ++++++++++++++++++--- app/window/mainwindow/mainstatusbar.h | 4 ++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/window/mainwindow/mainstatusbar.cpp b/app/window/mainwindow/mainstatusbar.cpp index bf3532dc6..fada2d6e7 100644 --- a/app/window/mainwindow/mainstatusbar.cpp +++ b/app/window/mainwindow/mainstatusbar.cpp @@ -26,7 +26,8 @@ OLIVE_NAMESPACE_ENTER MainStatusBar::MainStatusBar(QWidget *parent) : QStatusBar(parent), - manager_(nullptr) + manager_(nullptr), + connected_task_(nullptr) { setSizeGripEnabled(false); @@ -37,7 +38,8 @@ MainStatusBar::MainStatusBar(QWidget *parent) : bar_->setMaximum(100); bar_->setVisible(false); - showMessage(tr("Welcome to %1 %2").arg(QCoreApplication::applicationName(), QCoreApplication::applicationVersion())); + showMessage(tr("Welcome to %1 %2").arg(QCoreApplication::applicationName(), + QCoreApplication::applicationVersion())); } void MainStatusBar::ConnectTaskManager(TaskManager *manager) @@ -73,7 +75,15 @@ void MainStatusBar::UpdateStatus() } bar_->setVisible(true); - connect(t, &Task::ProgressChanged, this, &MainStatusBar::SetProgressBarValue); + + if (connected_task_) { + disconnect(connected_task_, &Task::ProgressChanged, this, &MainStatusBar::SetProgressBarValue); + disconnect(connected_task_, &Task::destroyed, this, &MainStatusBar::ConnectedTaskDeleted); + } + + connected_task_ = t; + connect(connected_task_, &Task::ProgressChanged, this, &MainStatusBar::SetProgressBarValue); + connect(connected_task_, &Task::destroyed, this, &MainStatusBar::ConnectedTaskDeleted); } } @@ -82,6 +92,11 @@ void MainStatusBar::SetProgressBarValue(double d) bar_->setValue(qRound(100.0 * d)); } +void MainStatusBar::ConnectedTaskDeleted() +{ + connected_task_ = nullptr; +} + void MainStatusBar::mouseDoubleClickEvent(QMouseEvent* e) { QStatusBar::mouseDoubleClickEvent(e); diff --git a/app/window/mainwindow/mainstatusbar.h b/app/window/mainwindow/mainstatusbar.h index 5951c2dd7..a1bd8fb27 100644 --- a/app/window/mainwindow/mainstatusbar.h +++ b/app/window/mainwindow/mainstatusbar.h @@ -50,11 +50,15 @@ private slots: void SetProgressBarValue(double d); + void ConnectedTaskDeleted(); + private: TaskManager* manager_; QProgressBar* bar_; + Task* connected_task_; + }; OLIVE_NAMESPACE_EXIT