X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCacheItem.cpp;h=f54ce80ec3f0d790c1169745ace908d09eb1e888;hb=4ddc9e2501400f8bdc35d4d1fe56f39c49e82115;hp=c698168dee0c22a67e47eb7528e07b0f02d9a12f;hpb=244de5d2c10a990828eafdd72283fc87742dc133;p=lyx.git diff --git a/src/graphics/GraphicsCacheItem.cpp b/src/graphics/GraphicsCacheItem.cpp index c698168dee..f54ce80ec3 100644 --- a/src/graphics/GraphicsCacheItem.cpp +++ b/src/graphics/GraphicsCacheItem.cpp @@ -29,7 +29,6 @@ #include "support/lassert.h" #include "support/unique_ptr.h" -#include "support/bind.h" #include "support/TempFile.h" using namespace std; @@ -39,16 +38,18 @@ namespace lyx { namespace graphics { -class CacheItem::Impl : public boost::signals2::trackable { +class CacheItem::Impl { public: /// Impl(FileName const & file, FileName const & doc_file); + void startMonitor(); + /** * If no file conversion is needed, then tryDisplayFormat() calls * loadImage() directly. - * \return true if a conversion is necessary and no error occurred. + * \return true if a conversion is necessary and no error occurred. */ bool tryDisplayFormat(FileName & filename, string & from); @@ -95,9 +96,9 @@ public: /// The filename we refer too. FileName const filename_; /// The document filename this graphic item belongs to - FileName const & doc_file_; + FileName const doc_file_; /// - FileMonitor const monitor_; + ActiveFileMonitorPtr monitor_; /// Is the file compressed? bool zipped_; @@ -118,10 +119,7 @@ public: ImageStatus status_; /// This signal is emitted when the image loading status changes. - boost::signals2::signal statusChanged; - - /// The connection of the signal ConvProcess::finishedConversion, - boost::signals2::connection cc_; + signals2::signal statusChanged; /// unique_ptr converter_; @@ -167,20 +165,21 @@ void CacheItem::startLoading() const void CacheItem::startMonitoring() const { - if (!pimpl_->monitor_.monitoring()) - pimpl_->monitor_.start(); + pimpl_->startMonitor(); } bool CacheItem::monitoring() const { - return pimpl_->monitor_.monitoring(); + return (bool)pimpl_->monitor_; } -unsigned long CacheItem::checksum() const +void CacheItem::checkModifiedAsync() const { - return pimpl_->monitor_.checksum(); + if (!pimpl_->monitor_) + return; + pimpl_->monitor_->checkModifiedAsync(); } @@ -196,7 +195,7 @@ ImageStatus CacheItem::status() const } -boost::signals2::connection CacheItem::connect(slot_type const & slot) const +signals2::connection CacheItem::connect(slot_type const & slot) const { return pimpl_->statusChanged.connect(slot); } @@ -209,12 +208,19 @@ boost::signals2::connection CacheItem::connect(slot_type const & slot) const CacheItem::Impl::Impl(FileName const & file, FileName const & doc_file) : filename_(file), doc_file_(doc_file), - monitor_(file, 2000), zipped_(false), remove_loaded_file_(false), status_(WaitingToLoad) +{} + + +void CacheItem::Impl::startMonitor() { - monitor_.connect(bind(&Impl::startLoading, this)); + if (monitor_) + return; + monitor_ = FileSystemWatcher::activeMonitor(filename_); + // Disconnected at the same time as this is destroyed. + monitor_->connect([=](bool /* exists */){ startLoading(); }); } @@ -245,9 +251,6 @@ void CacheItem::Impl::reset() status_ = WaitingToLoad; - if (cc_.connected()) - cc_.disconnect(); - if (converter_) converter_.reset(); } @@ -271,7 +274,6 @@ void CacheItem::Impl::imageConverted(bool success) file_to_load_ = converter_ ? FileName(converter_->convertedFile()) : FileName(); converter_.reset(); - cc_.disconnect(); success = !file_to_load_.empty() && file_to_load_.isReadableFile(); @@ -317,10 +319,10 @@ bool CacheItem::Impl::loadImage() typedef vector FormatList; -static string const findTargetFormat(FormatList const & formats, string const & from) +static string const findTargetFormat(FormatList const & format_list, string const & from) { // There must be a format to load from. - LASSERT(!formats.empty(), return string()); + LASSERT(!theFormats().empty(), return string()); // Use the standard converter if we don't know the format to load // from. @@ -328,15 +330,15 @@ static string const findTargetFormat(FormatList const & formats, string const & return string("ppm"); // First ascertain if we can load directly with no conversion - FormatList::const_iterator it = formats.begin(); - FormatList::const_iterator end = formats.end(); + FormatList::const_iterator it = format_list.begin(); + FormatList::const_iterator end = format_list.end(); for (; it != end; ++it) { if (from == *it) return *it; } // So, we have to convert to a loadable format. Can we? - it = formats.begin(); + it = format_list.begin(); for (; it != end; ++it) { if (lyx::graphics::Converter::isReachable(from, *it)) return *it; @@ -363,7 +365,7 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) return false; } - zipped_ = formats.isZippedFile(filename_); + zipped_ = theFormats().isZippedFile(filename_); if (zipped_) { string tempname = unzippedFileName(filename_.toFilesystemEncoding()); string const ext = getExtension(tempname); @@ -388,7 +390,7 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) << "\tAttempting to convert image file: " << filename << "\n\twith displayed filename: " << to_utf8(displayed_filename)); - from = formats.getFormatFromFile(filename); + from = theFormats().getFormatFromFile(filename); if (from.empty()) { status_ = ErrorConverting; LYXERR(Debug::GRAPHICS, "\tCould not determine file format."); @@ -440,9 +442,13 @@ void CacheItem::Impl::convertToDisplayFormat() // Connect a signal to this->imageConverted and pass this signal to // the graphics converter so that we can load the modified file // on completion of the conversion process. - converter_ = make_unique(doc_file_, filename, to_file_base.absFileName(), + converter_ = make_unique(doc_file_, filename, + to_file_base.absFileName(), from, to_); - converter_->connect(bind(&Impl::imageConverted, this, _1)); + // Connection is closed at the same time as *this is destroyed. + converter_->connect([this](bool success){ + imageConverted(success); + }); converter_->startConversion(); }