Here's a cleaned up version, minus all the debug stuff.
rh
Index: frontends/qt4/GuiView.cpp =================================================================== --- frontends/qt4/GuiView.cpp (revision 33727) +++ frontends/qt4/GuiView.cpp (working copy) @@ -351,6 +351,8 @@ /// QFutureWatcher<docstring> autosave_watcher_; QFutureWatcher<docstring> preview_watcher_; + /// + string last_export_format; #else struct DummyWatcher { bool isRunning(){return false;} }; DummyWatcher preview_watcher_; @@ -447,6 +449,7 @@ QFutureWatcher<docstring> const * watcher = static_cast<QFutureWatcher<docstring> const *>(sender()); message(watcher->result()); + errors(d.last_export_format); #endif } @@ -2824,6 +2827,7 @@ QFuture<docstring> f = QtConcurrent::run(exportAndDestroy, doc_buffer->clone(), format); d.setPreviewFuture(f); + d.last_export_format = doc_buffer->bufferFormat(); #else bool const update_unincluded = doc_buffer->params().maintain_unincluded_children @@ -2844,6 +2848,7 @@ QFuture<docstring> f = QtConcurrent::run(previewAndDestroy, doc_buffer->clone(), format); d.setPreviewFuture(f); + d.last_export_format = doc_buffer->bufferFormat(); #else bool const update_unincluded = doc_buffer->params().maintain_unincluded_children @@ -2863,6 +2868,7 @@ QFuture<docstring> f = QtConcurrent::run(exportAndDestroy, master->clone(), format); d.setPreviewFuture(f); + d.last_export_format = doc_buffer->bufferFormat(); #else bool const update_unincluded = master->params().maintain_unincluded_children @@ -2880,6 +2886,7 @@ QFuture<docstring> f = QtConcurrent::run(previewAndDestroy, master->clone(), format); d.setPreviewFuture(f); + d.last_export_format = doc_buffer->bufferFormat(); #else master->preview(format); #endif Index: frontends/qt4/GuiErrorList.cpp =================================================================== --- frontends/qt4/GuiErrorList.cpp (revision 33727) +++ frontends/qt4/GuiErrorList.cpp (working copy) @@ -108,8 +108,9 @@ errorsLW->clear(); descriptionTB->setPlainText(QString()); - ErrorList::const_iterator it = errorList().begin(); - ErrorList::const_iterator end = errorList().end(); + ErrorList const & el = errorList(); + ErrorList::const_iterator it = el.begin(); + ErrorList::const_iterator end = el.end(); for (; it != end; ++it) errorsLW->addItem(toqstr(it->error)); errorsLW->setCurrentRow(0); Index: Buffer.cpp =================================================================== --- Buffer.cpp (revision 33727) +++ Buffer.cpp (working copy) @@ -3300,17 +3300,26 @@ bool const success = theConverters().convert(this, FileName(filename), tmp_result_file, FileName(absFileName()), backend_format, format, error_list); - // Emit the signal to show the error list. + + // Emit the signal to show the error list or copy it back to the + // cloned Buffer so that it cab be emitted afterwards. if (format != backend_format) { - errors(error_type); + if (d->cloned_buffer_) { + d->cloned_buffer_->d->errorLists[error_type] = + d->errorLists[error_type]; + } else + errors(error_type); // also to the children, in case of master-buffer-view std::vector<Buffer *> clist = getChildren(); for (vector<Buffer *>::const_iterator cit = clist.begin(); - cit != clist.end(); ++cit) - (*cit)->errors(error_type, true); + cit != clist.end(); ++cit) { + if (d->cloned_buffer_) { + (*cit)->d->cloned_buffer_->d->errorLists[error_type] = + (*cit)->d->errorLists[error_type]; + } else + (*cit)->errors(error_type, true); + } } - if (!success) - return false; if (d->cloned_buffer_) { // Enable reverse dvi or pdf to work by copying back the texrow @@ -3318,8 +3327,13 @@ // FIXME: There is a possibility of concurrent access to texrow // here from the main GUI thread that should be securized. d->cloned_buffer_->d->texrow = d->texrow; + string const error_type = bufferFormat(); + d->cloned_buffer_->d->errorLists[error_type] = d->errorLists[error_type]; } + if (!success) + return false; + if (put_in_tempdir) { result_file = tmp_result_file.absFilename(); return true;