X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetExternal.cpp;h=9b9f85c3b43eb823ffdbebec7c78db09260ce066;hb=2047ea5eb436d98d485bed672ed218f9bd708ce6;hp=daa5831107cf3b23b403049c4bca88f6bb502fcb;hpb=68be651e890d643359062aa9cb980ffcc4812840;p=features.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index daa5831107..9b9f85c3b4 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -69,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; } @@ -83,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; } @@ -99,7 +108,7 @@ TempName & TempName::operator=(TempName const & other) support::FileName TempName::operator()() const { - return tempfile_->name(); + return tempname_; } } // namespace external @@ -107,6 +116,7 @@ support::FileName TempName::operator()() const InsetExternalParams::InsetExternalParams() : display(true), + preview_mode(PREVIEW_OFF), lyxscale(defaultLyxScale), draft(false) { @@ -273,7 +283,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; } @@ -409,7 +419,7 @@ InsetExternal::InsetExternal(Buffer * buf) // Mouse hover is not copied and remains empty InsetExternal::InsetExternal(InsetExternal const & other) : Inset(other), - boost::signals::trackable(), + boost::signals2::trackable(), params_(other.params_), renderer_(other.renderer_->clone(this)) {} @@ -616,10 +626,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();