X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetExternal.cpp;h=097dc7d3e06479395cde5682569918fe1ee6e50d;hb=f3cb98c784cea4c778ad11496985f452a703d6a2;hp=1c3d1247464e6c7411d938c8caae988f98d07ec4;hpb=b63421b7dc65e0c721f8928d1330b9bb2cff43d8;p=lyx.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index 1c3d124746..097dc7d3e0 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -30,6 +30,7 @@ #include "MetricsInfo.h" #include "OutputParams.h" #include "output_latex.h" +#include "TocBackend.h" #include "frontends/alert.h" #include "frontends/Application.h" @@ -68,13 +69,20 @@ namespace Alert = frontend::Alert; namespace external { -TempName::TempName() : tempfile_(new support::TempFile("lyxextXXXXXX.tmp")) +TempName::TempName() { // must have an extension for the converter code to work correctly. + support::TempFile f("lyxextXXXXXX.tmp"); + // Let f go out of scope here and delete the file ourselves in + // ~TempName(), since otherwise external processes would not be able + // to use the file on windows (bug 9925). This is not as safe as + // keeping a support::TempFile member would be, but the best we can do. + f.setAutoRemove(false); + tempname_ = f.name(); } -TempName::TempName(TempName const & that) : tempfile_(0) +TempName::TempName(TempName const & that) { *this = that; } @@ -82,15 +90,17 @@ TempName::TempName(TempName const & that) : tempfile_(0) TempName::~TempName() { - delete tempfile_; + tempname_.removeFile(); } TempName & TempName::operator=(TempName const & other) { if (this != &other) { - delete tempfile_; - tempfile_ = new support::TempFile("lyxextXXXXXX.tmp"); + tempname_.removeFile(); + support::TempFile f("lyxextXXXXXX.tmp"); + f.setAutoRemove(false); + tempname_ = f.name(); } return *this; } @@ -98,7 +108,7 @@ TempName & TempName::operator=(TempName const & other) support::FileName TempName::operator()() const { - return tempfile_->name(); + return tempname_; } } // namespace external @@ -272,7 +282,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) case EX_FILENAME: { lex.eatLine(); string const name = lex.getString(); - filename.set(name, buffer.originFilePath()); + filename = buffer.getReferencedFileName(name); break; } @@ -372,6 +382,33 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) } +namespace { + +docstring screenLabel(InsetExternalParams const & params, + Buffer const & buffer) +{ + external::Template const * const ptr = + external::getTemplatePtr(params); + if (!ptr) + // FIXME UNICODE + return bformat((_("External template %1$s is not installed")), + from_utf8(params.templatename())); + // FIXME UNICODE + docstring gui = _(ptr->guiName); + gui += ": "; + + if (params.filename.empty()) + gui += "???"; + else + gui += from_utf8(params.filename.relFileName(buffer.filePath())); + + return gui; +} + +} // namespace anon + + + InsetExternal::InsetExternal(Buffer * buf) : Inset(buf), renderer_(new RenderButton) { @@ -460,6 +497,17 @@ bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, } +void InsetExternal::addToToc(DocIterator const & cpit, bool output_active, + UpdateType) const +{ + DocIterator pit = cpit; + pit.push_back(CursorSlice(const_cast(*this))); + shared_ptr toc = buffer().tocBackend().toc("external"); + docstring str = screenLabel(params_, buffer()); + toc->push_back(TocItem(pit, 0, str, output_active)); +} + + bool InsetExternal::showInsetDialog(BufferView * bv) const { bv->showDialog("external", params2string(params(), bv->buffer()), @@ -498,28 +546,6 @@ graphics::Params get_grfx_params(InsetExternalParams const & eparams) return gparams; } - -docstring screenLabel(InsetExternalParams const & params, - Buffer const & buffer) -{ - external::Template const * const ptr = - external::getTemplatePtr(params); - if (!ptr) - // FIXME UNICODE - return bformat((_("External template %1$s is not installed")), - from_utf8(params.templatename())); - // FIXME UNICODE - docstring gui = _(ptr->guiName); - gui += ": "; - - if (params.filename.empty()) - gui += "???"; - else - gui += from_utf8(params.filename.relFileName(buffer.filePath())); - - return gui; -} - } // namespace anon @@ -599,10 +625,8 @@ void InsetExternal::setParams(InsetExternalParams const & p) LASSERT(false, return); break; case PREVIEW_INSTANT: { - //FIXME: why is the value below immediately forgotten? - RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); renderer_.reset(new RenderMonitoredPreview(this)); - preview_ptr = renderer_->asMonitoredPreview(); + RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); preview_ptr->fileChanged(bind(&InsetExternal::fileChanged, this)); if (preview_ptr->monitoring()) preview_ptr->stopMonitoring();