X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsLoader.cpp;h=683f0925fc603a8e2b8b4687fcf9bd3fc0e5d67b;hb=94c65074e029937b549f5ed5af1001fadbe408be;hp=987a973139088f5a6e763d7fc1e0297fb9957640;hpb=244de5d2c10a990828eafdd72283fc87742dc133;p=lyx.git diff --git a/src/graphics/GraphicsLoader.cpp b/src/graphics/GraphicsLoader.cpp index 987a973139..683f0925fc 100644 --- a/src/graphics/GraphicsLoader.cpp +++ b/src/graphics/GraphicsLoader.cpp @@ -107,16 +107,17 @@ void LoaderQueue::loadNext() 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(); } @@ -163,7 +164,7 @@ void LoaderQueue::touch(Cache::ItemPtr const & item) typedef std::shared_ptr ImagePtr; -class Loader::Impl : public boost::signals2::trackable { +class Loader::Impl { friend class Loader; public: /// @@ -192,9 +193,9 @@ 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 signal_; - /// The connection of the signal StatusChanged - boost::signals2::connection sc_; + signals2::signal signal_; + /// The connection of the signal statusChanged + signals2::scoped_connection connection_; double displayPixelRatio() const { @@ -304,7 +305,7 @@ void Loader::startLoading() const } -void Loader::reload() const +void Loader::reload() const { pimpl_->cached_item_->startLoading(); } @@ -328,12 +329,12 @@ bool Loader::monitoring() const } -unsigned long Loader::checksum() const +void Loader::checkModifiedAsync() const { if (!pimpl_->cached_item_) - return 0; + return; - return pimpl_->cached_item_->checksum(); + pimpl_->cached_item_->checkModifiedAsync(); } @@ -363,7 +364,7 @@ void Loader::setDisplayPixelRatio(double scale) } -boost::signals2::connection Loader::connect(slot_type const & slot) const +signals2::connection Loader::connect(slot const & slot) const { return pimpl_->signal_.connect(slot); } @@ -403,7 +404,12 @@ void Loader::Impl::resetFile(FileName const & file) continue_monitoring = cached_item_->monitoring(); // cached_item_ is going to be reset, so the connected // signal needs to be disconnected. - sc_.disconnect(); + try { + // This can in theory throw a BufferException + connection_.disconnect(); + } catch (...) { + LYXERR(Debug::GRAPHICS, "Unable to disconnect signal."); + } cached_item_.reset(); if (status_ != Converting) { Cache::get().remove(old_file); @@ -429,7 +435,8 @@ void Loader::Impl::resetFile(FileName const & file) 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(); }); }