]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetExternal.cpp
Fix GRAPHICS_EDIT of InsetGraphics
[lyx.git] / src / insets / InsetExternal.cpp
index ee7bc0508ed239d2c742924a1e642b3b424f7318..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;
        }
@@ -495,21 +497,15 @@ bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd,
 }
 
 
-void InsetExternal::registerEmbeddedFiles(Buffer const & buffer,
-       EmbeddedFileList & files) const
+void InsetExternal::registerEmbeddedFiles(EmbeddedFileList & files) const
 {
-       files.registerFile(params_.filename, this, buffer);
+       files.registerFile(params_.filename, this, buffer());
 }
 
 
-void InsetExternal::updateEmbeddedFile(Buffer const & buf,
-       EmbeddedFile const & file)
+void InsetExternal::updateEmbeddedFile(EmbeddedFile const & file)
 {
-       // when embedding is enabled, change of embedding status leads to actions
-       EmbeddedFile temp = file;
-       temp.enable(buf.embedded(), &buf);
-       // this will not be set if an exception is thorwn in enable()
-       params_.filename = temp;
+       params_.filename = file;
 }
 
 
@@ -736,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);
        }
 }