#include "support/lassert.h"
#include "support/Timeout.h"
-#include "support/bind.h"
-
+#include <list>
#include <queue>
#include <memory>
#include <set>
LoaderQueue::LoaderQueue() : timer(s_millisecs_, Timeout::ONETIME),
- running_(false)
+ running_(false)
{
- timer.timeout.connect(bind(&LoaderQueue::loadNext, this));
+ // Disconnected when this is destroyed
+ timer.timeout.connect([this](){ loadNext(); });
}
void LoaderQueue::startLoader()
{
LYXERR(Debug::GRAPHICS, "LoaderQueue: waking up");
- running_ = true ;
+ running_ = true;
timer.setTimeout(s_millisecs_);
timer.start();
}
typedef std::shared_ptr<Image> ImagePtr;
-class Loader::Impl : public boost::signals2::trackable {
+class Loader::Impl {
friend class Loader;
public:
///
/// We modify a local copy of the image once it is loaded.
ImagePtr image_;
/// This signal is emitted when the image loading status changes.
- boost::signals2::signal<void()> signal_;
- /// The connection of the signal StatusChanged
- boost::signals2::connection sc_;
+ signal<void()> signal_;
+ /// The connection of the signal statusChanged
+ scoped_connection connection_;
double displayPixelRatio() const
{
void Loader::startLoading() const
{
- if (pimpl_->status_ != WaitingToLoad || !pimpl_->cached_item_)
+ if (pimpl_->status_ != WaitingToLoad || !pimpl_->cached_item_
+ || pimpl_->cached_item_->status() == Converting)
return;
pimpl_->startLoading();
}
-void Loader::reload() const
+void Loader::reload() const
{
pimpl_->cached_item_->startLoading();
}
}
-boost::signals2::connection Loader::connect(slot_type const & slot) const
+connection Loader::connect(slot const & slot) const
{
return pimpl_->signal_.connect(slot);
}
// signal needs to be disconnected.
try {
// This can in theory throw a BufferException
- sc_.disconnect();
+ connection_.disconnect();
} catch (...) {
LYXERR(Debug::GRAPHICS, "Unable to disconnect signal.");
}
if (continue_monitoring && !cached_item_->monitoring())
cached_item_->startMonitoring();
- sc_ = cached_item_->connect(bind(&Impl::statusChanged, this));
+ // This is a scoped connection
+ connection_ = cached_item_->connect([this](){ statusChanged(); });
}