]> git.lyx.org Git - lyx.git/blobdiff - src/graphics/PreviewLoader.cpp
whitespace only
[lyx.git] / src / graphics / PreviewLoader.cpp
index 7a969763fb804e6ba4d86840c29f2884ad036496..88320e4517b5106ce3cd1d13f7177b2a9a4cdcef 100644 (file)
@@ -253,6 +253,10 @@ private:
        ///
        mutable int font_scaling_factor_;
        ///
+       mutable int fg_color_;
+       ///
+       mutable int bg_color_;
+       ///
        QTimer * delay_refresh_;
        ///
        bool finished_generating_;
@@ -407,6 +411,13 @@ PreviewLoader::Impl::Impl(PreviewLoader & p, Buffer const & b)
        : parent_(p), buffer_(b), finished_generating_(true)
 {
        font_scaling_factor_ = int(buffer_.fontScalingFactor());
+       if (theApp()) {
+               fg_color_ = strtol(theApp()->hexName(foregroundColor()).c_str(), 0, 16);
+               bg_color_ = strtol(theApp()->hexName(backgroundColor()).c_str(), 0, 16);
+       } else {
+               fg_color_ = 0x0;
+               bg_color_ = 0xffffff;
+       }
        if (!pconverter_)
                pconverter_ = setConverter("lyxpreview");
 
@@ -433,10 +444,18 @@ PreviewImage const *
 PreviewLoader::Impl::preview(string const & latex_snippet) const
 {
        int fs = int(buffer_.fontScalingFactor());
-       if (font_scaling_factor_ != fs) {
-               // Schedule refresh of all previews on zoom changes.
+       int fg = 0x0;
+       int bg = 0xffffff;
+       if (theApp()) {
+               fg = strtol(theApp()->hexName(foregroundColor()).c_str(), 0, 16);
+               bg = strtol(theApp()->hexName(backgroundColor()).c_str(), 0, 16);
+       }
+       if (font_scaling_factor_ != fs || fg_color_ != fg || bg_color_ != bg) {
+               // Schedule refresh of all previews on zoom or color changes.
                // The previews are regenerated only after the zoom factor
                // has not been changed for about 1 second.
+               fg_color_ = fg;
+               bg_color_ = bg;
                delay_refresh_->start(1000);
        }
        // Don't try to access the cache until we are done.
@@ -450,6 +469,11 @@ PreviewLoader::Impl::preview(string const & latex_snippet) const
 void PreviewLoader::Impl::refreshPreviews()
 {
        font_scaling_factor_ = int(buffer_.fontScalingFactor());
+       // Reschedule refresh until the previous process completed.
+       if (!finished_generating_) {
+               delay_refresh_->start(1000);
+               return;
+       }
        Cache::const_iterator cit = cache_.begin();
        Cache::const_iterator cend = cache_.end();
        while (cit != cend)
@@ -615,6 +639,11 @@ void PreviewLoader::Impl::startLoading(bool wait)
        }
        of << "\\batchmode\n";
 
+       // Set \jobname of previews to the document name (see bug 9627)
+       of << "\\def\\jobname{"
+          << from_utf8(changeExtension(buffer_.latexName(true), ""))
+          << "}\n";
+
        LYXERR(Debug::LATEX, "Format = " << buffer_.params().getDefaultOutputFormat());
        string latexparam = "";
        bool docformat = !buffer_.params().default_output_format.empty()
@@ -741,6 +770,7 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval)
        if (git == in_progress_.end()) {
                lyxerr << "PreviewLoader::finishedGenerating(): unable to find "
                        "data for PID " << pid << endl;
+               finished_generating_ = true;
                return;
        }
 
@@ -749,8 +779,11 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval)
        LYXERR(Debug::GRAPHICS, "PreviewLoader::finishedInProgress("
                                << retval << "): processing " << status
                                << " for " << command);
-       if (retval > 0)
+       if (retval > 0) {
+               in_progress_.erase(git);
+               finished_generating_ = true;
                return;
+       }
 
        // Read the metrics file, if it exists
        vector<double> ascent_fractions(git->second.snippets.size());