#include "support/ForkedCalls.h"
#include "support/lstrings.h"
-#include "support/bind.h"
#include "support/TempFile.h"
#include <atomic>
}
-lyx::Converter const * setConverter(string const & from)
-{
- typedef vector<string> FmtList;
- typedef lyx::graphics::Cache GCache;
- FmtList const & loadableFormats = GCache::get().loadableFormats();
- FmtList::const_iterator it = loadableFormats.begin();
- FmtList::const_iterator const end = loadableFormats.end();
-
- for (; it != end; ++it) {
- string const to = *it;
- if (from == to)
- continue;
-
- lyx::Converter const * ptr = lyx::theConverters().getConverter(from, to);
- if (ptr)
- return ptr;
- }
-
- // Show the error only once
-#ifdef LYX_USE_STD_CALL_ONCE
- // This is thread-safe.
- static once_flag flag;
- call_once(flag, [&](){
- LYXERR0("PreviewLoader::startLoading()\n"
- << "No converter from \"" << from
- << "\" format has been defined.");
- });
-#else
- // This is not thread-safe.
- static bool first = true;
- if (first) {
- first = false;
- LYXERR0("PreviewLoader::startLoading()\n"
- << "No converter from \"" << from
- << "\" format has been defined.");
- }
-#endif
- return 0;
-}
-
-
void setAscentFractions(vector<double> & ascent_fractions,
FileName const & metrics_file)
{
namespace lyx {
namespace graphics {
-class PreviewLoader::Impl : public boost::signals2::trackable {
+class PreviewLoader::Impl {
public:
///
Impl(PreviewLoader & p, Buffer const & b);
void refreshPreviews();
/// Emit this signal when an image is ready for display.
- boost::signals2::signal<void(PreviewImage const &)> imageReady;
+ signals2::signal<void(PreviewImage const &)> imageReady;
Buffer const & buffer() const { return buffer_; }
+ lyx::Converter const * setConverter(string const & from);
+
private:
/// Called by the ForkedCall process that generated the bitmap files.
void finishedGenerating(pid_t, int);
/// We don't own this
static lyx::Converter const * pconverter_;
+
+ signals2::scoped_connection connection_;
};
}
-boost::signals2::connection PreviewLoader::connect(slot_type const & slot) const
+signals2::connection PreviewLoader::connect(slot const & slot) const
{
return pimpl_->imageReady.connect(slot);
}
}
+lyx::Converter const * PreviewLoader::Impl::setConverter(string const & from)
+{
+ typedef vector<string> FmtList;
+ FmtList const & loadableFormats = graphics::Cache::get().loadableFormats();
+ FmtList::const_iterator it = loadableFormats.begin();
+ FmtList::const_iterator const end = loadableFormats.end();
+
+ for (; it != end; ++it) {
+ string const to = *it;
+ if (from == to)
+ continue;
+
+ lyx::Converter const * ptr = lyx::theConverters().getConverter(from, to);
+ if (ptr)
+ return ptr;
+ }
+
+ // Show the error only once. This is thread-safe.
+ static nullptr_t no_conv = [&]{
+ LYXERR0("PreviewLoader::startLoading()\n"
+ << "No converter from \"" << from
+ << "\" format has been defined.");
+ return nullptr;
+ } ();
+
+ return no_conv;
+}
+
+
PreviewLoader::Impl::~Impl()
{
delete delay_refresh_;
<< " " << quoteName(latexfile.toFilesystemEncoding())
<< " --dpi " << font_scaling_factor_;
- // FIXME XHTML
+ // FIXME XHTML
// The colors should be customizable.
if (!buffer_.isExporting()) {
ColorCode const fg = PreviewLoader::foregroundColor();
ColorCode const bg = PreviewLoader::backgroundColor();
- cs << " --fg " << theApp()->hexName(fg)
+ cs << " --fg " << theApp()->hexName(fg)
<< " --bg " << theApp()->hexName(bg);
}
cs << latexparam;
- if (buffer_.params().bibtex_command != "default")
- cs << " --bibtex=" << quoteName(buffer_.params().bibtex_command);
- else if (buffer_.params().encoding().package() == Encoding::japanese)
- cs << " --bibtex=" << quoteName(lyxrc.jbibtex_command);
- else
- cs << " --bibtex=" << quoteName(lyxrc.bibtex_command);
+ cs << " --bibtex=" << quoteName(buffer_.params().bibtexCommand());
if (buffer_.params().bufferFormat() == "lilypond-book")
cs << " --lilypond";
}
// Initiate the conversion from LaTeX to bitmap images files.
- ForkedCall::SignalTypePtr
- convert_ptr(new ForkedCall::SignalType);
- convert_ptr->connect(bind(&Impl::finishedGenerating, this, _1, _2));
+ ForkedCall::sigPtr convert_ptr = make_shared<ForkedCall::sig>();
+ // This is a scoped connection
+ connection_ = convert_ptr->connect([this](pid_t pid, int retval){
+ finishedGenerating(pid, retval);
+ });
ForkedCall call(buffer_.filePath());
int ret = call.startScript(command, convert_ptr);