From 7d9ad88bc5f43c224e28ec67522ba0bac6d0d3c6 Mon Sep 17 00:00:00 2001 From: Michael M Date: Sat, 19 Aug 2017 15:47:19 -0700 Subject: [PATCH] Add initial paths to GameTracker after construction It's strange to see GameTracker add its own initial paths in construction, because you might expect a race condition where the GameLoaded signal is emitted before it gets connected to in GameListModel. In fact, this doesn't happen, but only because of how it abuses the Qt signals mechanism to load files asynchronously: GameLoader emits a GameLoaded signal which gets forwarded to the GameTracker::GameLoaded signal _after_ control returns to the event loop, at which point GameListModel has connected. This commit moves the logic of adding initial paths out of GameTracker to a point after the signals are connected, which is more obvious and doesn't rely on how GameTracker implements concurrency. --- Source/Core/DolphinQt2/GameList/GameListModel.cpp | 3 +++ Source/Core/DolphinQt2/GameList/GameTracker.cpp | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Core/DolphinQt2/GameList/GameListModel.cpp b/Source/Core/DolphinQt2/GameList/GameListModel.cpp index 860fbbe9d0..44561c7f1e 100644 --- a/Source/Core/DolphinQt2/GameList/GameListModel.cpp +++ b/Source/Core/DolphinQt2/GameList/GameListModel.cpp @@ -17,6 +17,9 @@ GameListModel::GameListModel(QObject* parent) : QAbstractTableModel(parent) connect(this, &GameListModel::DirectoryAdded, &m_tracker, &GameTracker::AddDirectory); connect(this, &GameListModel::DirectoryRemoved, &m_tracker, &GameTracker::RemoveDirectory); + for (const QString& dir : Settings::Instance().GetPaths()) + m_tracker.AddDirectory(dir); + connect(&Settings::Instance(), &Settings::ThemeChanged, [this] { // Tell the view to repaint. The signal 'dataChanged' also seems like it would work here, but // unfortunately it won't cause a repaint until the view is focused. diff --git a/Source/Core/DolphinQt2/GameList/GameTracker.cpp b/Source/Core/DolphinQt2/GameList/GameTracker.cpp index fb832512b5..6050feaa8d 100644 --- a/Source/Core/DolphinQt2/GameList/GameTracker.cpp +++ b/Source/Core/DolphinQt2/GameList/GameTracker.cpp @@ -28,9 +28,6 @@ GameTracker::GameTracker(QObject* parent) : QFileSystemWatcher(parent) connect(m_loader, &GameLoader::GameLoaded, this, &GameTracker::GameLoaded); m_loader_thread.start(); - - for (QString dir : Settings::Instance().GetPaths()) - AddDirectory(dir); } GameTracker::~GameTracker()