From f033198c3f7614727ced136dc2354da08c0ebe11 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Fri, 20 Jun 2008 16:12:48 +0000 Subject: [PATCH] Avoid any signal/slot communication when the graphic is directly showable on screen. This should complete the fix to http://bugzilla.lyx.org/show_bug.cgi?id=4829 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@25340 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/graphics/GraphicsCacheItem.cpp | 35 ++++++++++++++---------------- src/graphics/GraphicsLoader.cpp | 5 ++++- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/graphics/GraphicsCacheItem.cpp b/src/graphics/GraphicsCacheItem.cpp index c5fc58c101..0859b44649 100644 --- a/src/graphics/GraphicsCacheItem.cpp +++ b/src/graphics/GraphicsCacheItem.cpp @@ -63,7 +63,7 @@ public: /** Load the image into memory. This is called either from * convertToDisplayFormat() direct or from imageConverted(). */ - void loadImage(); + bool loadImage(); /** Get a notification when the image conversion is done. * Connected to a signal on_finish_ which is passed to @@ -281,15 +281,14 @@ void CacheItem::Impl::imageConverted(bool success) // Add the converted file to the file cache ConverterCache::get().add(filename_, to_, file_to_load_); - loadImage(); + setStatus(loadImage() ? Loaded : ErrorLoading); } // This function gets called from the callback after the image has been // converted successfully. -void CacheItem::Impl::loadImage() +bool CacheItem::Impl::loadImage() { - setStatus(Loading); LYXERR(Debug::GRAPHICS, "Loading image."); image_.reset(Image::newImage()); @@ -305,13 +304,7 @@ void CacheItem::Impl::loadImage() if (remove_loaded_file_ && unzipped_filename_ != file_to_load_) file_to_load_.removeFile(); - if (!success) { - setStatus(ErrorLoading); - return; - } - - // Inform the outside world. - setStatus(Loaded); + return success; } @@ -354,12 +347,10 @@ static string const findTargetFormat(string const & from) bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) { - setStatus(Converting); - // First, check that the file exists! if (!filename_.isReadableFile()) { if (status_ != ErrorNoFile) { - setStatus(ErrorNoFile); + status_ = ErrorNoFile; LYXERR(Debug::GRAPHICS, "\tThe file is not readable"); } return true; @@ -370,7 +361,7 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) unzipped_filename_ = FileName::tempName( filename_.toFilesystemEncoding()); if (unzipped_filename_.empty()) { - setStatus(ErrorConverting); + status_ = ErrorConverting; LYXERR(Debug::GRAPHICS, "\tCould not create temporary file."); return true; } @@ -386,7 +377,7 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) from = formats.getFormatFromFile(filename); if (from.empty()) { - setStatus(ErrorConverting); + status_ = ErrorConverting; LYXERR(Debug::GRAPHICS, "\tCould not determine file format."); } LYXERR(Debug::GRAPHICS, "\n\tThe file contains " << from << " format data."); @@ -396,14 +387,14 @@ bool CacheItem::Impl::tryDisplayFormat(FileName & filename, string & from) // No conversion needed! LYXERR(Debug::GRAPHICS, "\tNo conversion needed (from == to)!"); file_to_load_ = filename; - loadImage(); + status_ = loadImage() ? Loaded : ErrorLoading; return true; } if (ConverterCache::get().inCache(filename, to_)) { LYXERR(Debug::GRAPHICS, "\tNo conversion needed (file in file cache)!"); file_to_load_ = ConverterCache::get().cacheName(filename, to_); - loadImage(); + status_ = loadImage() ? Loaded : ErrorLoading; return true; } return false; @@ -417,8 +408,14 @@ void CacheItem::Impl::convertToDisplayFormat() // Make a local copy in case we unzip it FileName filename; string from; - if (tryDisplayFormat(filename, from)) + if (tryDisplayFormat(filename, from)) { + // The image status has changed, tell it to the outside world. + statusChanged(); return; + } + + // We will need a conversion, tell it to the outside world. + setStatus(Converting); // Add some stuff to create a uniquely named temporary file. // This file is deleted in loadImage after it is loaded into memory. diff --git a/src/graphics/GraphicsLoader.cpp b/src/graphics/GraphicsLoader.cpp index 63b1ac4f18..9efdb5f80e 100644 --- a/src/graphics/GraphicsLoader.cpp +++ b/src/graphics/GraphicsLoader.cpp @@ -427,8 +427,11 @@ void Loader::Impl::startLoading() if (status_ != WaitingToLoad) return; - if (cached_item_->tryDisplayFormat()) + if (cached_item_->tryDisplayFormat()) { + status_ = Loaded; + createPixmap(); return; + } LoaderQueue::get().touch(cached_item_); } -- 2.39.2