]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetExternal.cpp
Change string
[lyx.git] / src / insets / InsetExternal.cpp
index 633175c4b217b26d387df277709a9729a91234ce..79d47ca8a519aa2b3ee085b0792cc406c0799c17 100644 (file)
@@ -418,15 +418,26 @@ InsetExternal::InsetExternal(InsetExternal const & other)
 {}
 
 
-Inset * InsetExternal::clone() const
+InsetExternal::~InsetExternal()
 {
-       return new InsetExternal(*this);
+       InsetExternalMailer(*this).hideDialog();
 }
 
 
-InsetExternal::~InsetExternal()
+void InsetExternal::setBuffer(Buffer & buffer)
 {
-       InsetExternalMailer(*this).hideDialog();
+       if (buffer_) {
+               try {
+                       // a file may not be copied successfully when, e.g. buffer_
+                       // has already been closed.
+                       params_.filename = params_.filename.copyTo(&buffer);
+               } catch (ExceptionMessage const & message) {
+                       Alert::error(message.title_, message.details_);
+                       // failed to embed
+                       params_.filename.setEmbed(false);
+               }
+       }
+       Inset::setBuffer(buffer);
 }
 
 
@@ -450,15 +461,6 @@ void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_INSET_MODIFY: {
                InsetExternalParams p;
                InsetExternalMailer::string2params(to_utf8(cmd.argument()), buffer(), p);
-               if (!p.filename.empty()) {
-                       try {
-                               p.filename.enable(buffer().embedded(), &buffer());
-                       } catch (ExceptionMessage const & message) {
-                               Alert::error(message.title_, message.details_);
-                               // do not set parameter if an error happens
-                               break;
-                       }
-               }
                setParams(p);
                break;
        }
@@ -503,11 +505,7 @@ void InsetExternal::registerEmbeddedFiles(EmbeddedFileList & files) const
 
 void InsetExternal::updateEmbeddedFile(EmbeddedFile const & file)
 {
-       // when embedding is enabled, change of embedding status leads to actions
-       EmbeddedFile temp = file;
-       temp.enable(buffer().embedded(), &buffer());
-       // this will not be set if an exception is thorwn in enable()
-       params_.filename = temp;
+       params_.filename = file;
 }
 
 
@@ -734,7 +732,7 @@ void InsetExternal::read(Lexer & lex)
        InsetExternalParams params;
        if (params.read(buffer(), lex)) {
                // exception handling is not needed as long as embedded files are in place.
-               params.filename.enable(buffer().embedded(), &buffer());
+               params.filename.enable(buffer().embedded(), &buffer(), false);
                setParams(params);
        }
 }