X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fgraphics%2FGraphicsCacheItem.cpp;h=2e8c415f36b6709d849389281d2a084f6e031a64;hb=68ee68103a77300c3aa01db9e63bd01b8243a0eb;hp=e2df63d4bcd94f4bbae05dd544691cc03c71520b;hpb=61b2bd5e7fd9399128342d9048aa814ae5f086fc;p=lyx.git diff --git a/src/graphics/GraphicsCacheItem.cpp b/src/graphics/GraphicsCacheItem.cpp index e2df63d4bc..2e8c415f36 100644 --- a/src/graphics/GraphicsCacheItem.cpp +++ b/src/graphics/GraphicsCacheItem.cpp @@ -25,8 +25,10 @@ #include "support/FileName.h" #include "support/filetools.h" #include "support/FileMonitor.h" +#include "support/lassert.h" #include "support/bind.h" +#include "support/TempFile.h" using namespace std; using namespace lyx::support; @@ -107,7 +109,7 @@ public: bool remove_loaded_file_; /// The image and its loading status. - boost::shared_ptr image_; + shared_ptr image_; /// ImageStatus status_; @@ -234,7 +236,7 @@ void CacheItem::Impl::reset() file_to_load_.erase(); to_.erase(); - if (image_.get()) + if (image_) image_.reset(); status_ = WaitingToLoad; @@ -315,7 +317,7 @@ static string const findTargetFormat(string const & from) FormatList const & formats = Cache::get().loadableFormats(); // There must be a format to load from. - LASSERT(!formats.empty(), /**/); + LASSERT(!formats.empty(), return string()); // Use the standard converter if we don't know the format to load // from. @@ -358,10 +360,16 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) return false; } - zipped_ = filename_.isZippedFile(); + zipped_ = formats.isZippedFile(filename_); if (zipped_) { - unzipped_filename_ = FileName::tempName( - filename_.toFilesystemEncoding()); + string tempname = unzippedFileName(filename_.toFilesystemEncoding()); + string const ext = getExtension(tempname); + tempname = changeExtension(tempname, "") + "-XXXXXX"; + if (!ext.empty()) + tempname = addExtension(tempname, ext); + TempFile tempfile(tempname); + tempfile.setAutoRemove(false); + unzipped_filename_ = tempfile.name(); if (unzipped_filename_.empty()) { status_ = ErrorConverting; LYXERR(Debug::GRAPHICS, "\tCould not create temporary file."); @@ -421,7 +429,9 @@ void CacheItem::Impl::convertToDisplayFormat() // Add some stuff to create a uniquely named temporary file. // This file is deleted in loadImage after it is loaded into memory. - FileName const to_file_base = FileName::tempName("CacheItem"); + TempFile tempfile("CacheItem"); + tempfile.setAutoRemove(false); + FileName const to_file_base = tempfile.name(); remove_loaded_file_ = true; // Connect a signal to this->imageConverted and pass this signal to