summaryrefslogtreecommitdiff
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
authorAL <26797547+Al12rs@users.noreply.github.com>2020-06-06 18:08:30 +0200
committerAL <26797547+Al12rs@users.noreply.github.com>2020-06-06 18:08:30 +0200
commit1497685ea5d7059b34bfb65643388a4f4edf4d49 (patch)
tree78c13bae0f6d0335c51848748f2dcaec0682d5c6 /src/mainwindow.cpp
parent226b2b1843bbf41581757f44f8a2f4728f0a4b19 (diff)
Make checkForProblems update local variable with the problem count,
Make updateProblemsButton just update the ui using that variable (no heavy operation) Add checkForProblemsAsync to perform the heavy checks in another thread.
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 477cbc70..c49b0bdd 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -266,6 +266,7 @@ MainWindow::MainWindow(Settings &settings
, m_LinkToolbar(nullptr)
, m_LinkDesktop(nullptr)
, m_LinkStartMenu(nullptr)
+ , m_NumberOfProblems(0)
{
// disables incredibly slow menu fade in effect that looks and feels like crap.
// this was only happening to users with the windows
@@ -473,7 +474,8 @@ MainWindow::MainWindow(Settings &settings
setFilterShortcuts(ui->downloadView, ui->downloadFilterEdit);
m_UpdateProblemsTimer.setSingleShot(true);
- connect(&m_UpdateProblemsTimer, SIGNAL(timeout()), this, SLOT(updateProblemsButton()));
+ connect(&m_UpdateProblemsTimer, SIGNAL(timeout()), this, SLOT(checkForProblemsAsync()));
+ connect(this, SIGNAL(checkForProblemsDone()), this, SLOT(updateProblemsButton()), Qt::ConnectionType::QueuedConnection);
m_SaveMetaTimer.setSingleShot(false);
connect(&m_SaveMetaTimer, SIGNAL(timeout()), this, SLOT(saveModMetas()));
@@ -1000,7 +1002,7 @@ void MainWindow::on_centralWidget_customContextMenuRequested(const QPoint &pos)
createPopupMenu()->exec(ui->centralWidget->mapToGlobal(pos));
}
-void MainWindow::scheduleUpdateButton()
+void MainWindow::scheduleCheckForProblems()
{
if (!m_UpdateProblemsTimer.isActive()) {
m_UpdateProblemsTimer.start(1000);
@@ -1014,7 +1016,7 @@ void MainWindow::updateProblemsButton()
// if the current stylesheet doesn't provide an icon, this is used instead
const char* DefaultIconName = ":/MO/gui/warning";
- const std::size_t numProblems = checkForProblems();
+ const std::size_t numProblems = m_NumberOfProblems;
// original icon without a count painted on it
const QIcon original = m_originalNotificationIcon.isNull() ?
@@ -1097,8 +1099,13 @@ bool MainWindow::errorReported(QString &logFile)
return false;
}
+void MainWindow::checkForProblemsAsync() {
+ QtConcurrent::run([this]() {
+ checkForProblems();
+ });
+}
-size_t MainWindow::checkForProblems()
+void MainWindow::checkForProblems()
{
size_t numProblems = 0;
for (QObject *pluginObj : m_PluginContainer.plugins<QObject>()) {
@@ -1109,7 +1116,8 @@ size_t MainWindow::checkForProblems()
numProblems += diagnose->activeProblems().size();
}
}
- return numProblems;
+ m_NumberOfProblems = numProblems;
+ emit checkForProblemsDone();
}
void MainWindow::about()
@@ -1353,7 +1361,7 @@ void MainWindow::showEvent(QShowEvent *event)
m_OrganizerCore.settings().nexus().registerAsNXMHandler(false);
m_WasVisible = true;
- updateProblemsButton();
+ updateProblemsButton();
}
}