commit 407ca104f22eab873ccbae44225c1447564b93e8
parent f85f795ea99d883122578b8125d4c4dde9156d43
Author: cfillion <cfillion@users.noreply.github.com>
Date: Mon, 27 Mar 2017 20:45:44 -0400
browser: do not load twice on opening (regression from 9de3174e1660c8774902d31bad7109b001066434)
Diffstat:
4 files changed, 25 insertions(+), 20 deletions(-)
diff --git a/src/browser.cpp b/src/browser.cpp
@@ -53,7 +53,7 @@ enum Timers { TIMER_FILTER = 1, TIMER_ABOUT };
Browser::Browser(ReaPack *reapack)
: Dialog(IDD_BROWSER_DIALOG), m_reapack(reapack),
- m_loading(false), m_currentIndex(-1)
+ m_loading(Idle), m_currentIndex(-1)
{
}
@@ -148,7 +148,6 @@ void Browser::onInit()
m_list->restoreState(data);
updateDisplayLabel();
- refresh();
}
void Browser::onClose()
@@ -527,8 +526,14 @@ void Browser::refresh(const bool stale)
{
// Do nothing when called again when (or while) the index downloading
// transaction finishes. populate() handles the next step of the loading process.
- if(m_loading)
+ switch(m_loading) {
+ case Done:
+ m_loading = Idle;
+ case Loading:
return;
+ case Idle:
+ break;
+ }
const vector<Remote> &remotes = m_reapack->config()->remotes.getEnabled();
@@ -547,9 +552,14 @@ void Browser::refresh(const bool stale)
}
if(Transaction *tx = m_reapack->setupTransaction()) {
- m_loading = true;
+ m_loading = Loading;
+
tx->fetchIndexes(remotes, stale);
- tx->onFinish([=] { populate(tx->getIndexes(remotes)); });
+ tx->onFinish([=] {
+ m_loading = Done;
+ populate(tx->getIndexes(remotes));
+ });
+
tx->runTasks();
}
}
@@ -563,8 +573,6 @@ void Browser::setFilter(const string &newFilter)
void Browser::populate(const vector<IndexPtr> &indexes)
{
- m_loading = false;
-
try {
Registry reg(Path::prefixRoot(Path::REGISTRY));
diff --git a/src/browser.hpp b/src/browser.hpp
@@ -101,6 +101,12 @@ private:
UninstalledView,
};
+ enum LoadState {
+ Idle,
+ Loading,
+ Done,
+ };
+
Entry makeEntry(const Package *, const Registry::Entry &, const IndexPtr &) const;
void onSelection();
@@ -141,7 +147,7 @@ private:
void aboutPackage(int index, bool focus = true);
ReaPack *m_reapack;
- bool m_loading;
+ LoadState m_loading;
int m_currentIndex;
Filter m_filter;
diff --git a/src/reapack.cpp b/src/reapack.cpp
@@ -76,7 +76,7 @@ std::string ReaPack::resourcePath()
ReaPack::ReaPack(REAPER_PLUGIN_HINSTANCE instance)
: syncAction(), browseAction(), importAction(), configAction(),
m_tx(nullptr), m_progress(nullptr), m_browser(nullptr), m_manager(nullptr),
- m_about(nullptr), m_inhibitBrowser(false), m_instance(instance)
+ m_about(nullptr), m_instance(instance)
{
m_mainWindow = GetMainHwnd();
m_useRootPath = new UseRootPath(resourcePath());
@@ -279,6 +279,7 @@ Browser *ReaPack::browsePackages()
}
m_browser = Dialog::Create<Browser>(m_instance, m_mainWindow, this);
+ m_browser->refresh();
m_browser->setCloseHandler([=] (INT_PTR) {
Dialog::Destroy(m_browser);
m_browser = nullptr;
@@ -359,17 +360,8 @@ void ReaPack::refreshManager()
void ReaPack::refreshBrowser()
{
- if(!m_browser)
- return;
-
- if(m_inhibitBrowser)
- m_inhibitBrowser = false;
- else {
- // set prenvively in case the transaction finishes immediately (eg. nothing to dl)
- m_inhibitBrowser = true;
+ if(m_browser)
m_browser->refresh();
- m_inhibitBrowser = m_tx != nullptr;
- }
}
void ReaPack::registerSelf()
diff --git a/src/reapack.hpp b/src/reapack.hpp
@@ -90,7 +90,6 @@ private:
Manager *m_manager;
About *m_about;
- bool m_inhibitBrowser;
REAPER_PLUGIN_HINSTANCE m_instance;
HWND m_mainWindow;
UseRootPath *m_useRootPath;