]> git.lyx.org Git - features.git/commitdiff
Embedding: paste an inset with an embedded file may fail, if the source buffer has...
authorBo Peng <bpeng@lyx.org>
Sun, 16 Mar 2008 05:10:41 +0000 (05:10 +0000)
committerBo Peng <bpeng@lyx.org>
Sun, 16 Mar 2008 05:10:41 +0000 (05:10 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23771 a592a061-630c-0410-9148-cb99ea01b6c8

src/insets/InsetBibtex.cpp
src/insets/InsetExternal.cpp
src/insets/InsetGraphics.cpp
src/insets/InsetInclude.cpp

index 69e8f7bba24b174a7d84e813741daef357614ace..a74be8e1f0ac9f67d010cf8b827fc5eb4db82d05 100644 (file)
@@ -57,8 +57,15 @@ void InsetBibtex::setBuffer(Buffer & buffer)
        if (buffer_) {
                EmbeddedFileList::iterator it = bibfiles_.begin();
                EmbeddedFileList::iterator it_end = bibfiles_.end();
-               for (; it != it_end; ++it)
-                       *it = it->copyTo(&buffer);
+               for (; it != it_end; ++it) {
+                       try {
+                               *it = it->copyTo(&buffer);
+                       } catch (ExceptionMessage const & message) {
+                               Alert::error(message.title_, message.details_);
+                               // failed to embed
+                               it->setEmbed(false);
+                       }               
+               }
        }
        Inset::setBuffer(buffer);
 }
index 63102bc506737faee5e3229e5ffde71a69ba33df..79d47ca8a519aa2b3ee085b0792cc406c0799c17 100644 (file)
 #include "MetricsInfo.h"
 #include "OutputParams.h"
 
+#include "frontends/alert.h"
+
 #include "graphics/PreviewLoader.h"
 
 #include "support/debug.h"
+#include "support/ExceptionMessage.h"
 #include "support/filetools.h"
 #include "support/gettext.h"
 #include "support/lstrings.h"
@@ -60,6 +63,8 @@ string defaultTemplateName;
 
 namespace lyx {
 
+namespace Alert = frontend::Alert;
+
 namespace external {
 
 TempName::TempName()
@@ -421,8 +426,17 @@ InsetExternal::~InsetExternal()
 
 void InsetExternal::setBuffer(Buffer & buffer)
 {
-       if (buffer_)
-               params_.filename = params_.filename.copyTo(&buffer);
+       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);
 }
 
index 3f61db4aaf894e54057ee5e491930d868c119efc..0953912cf970e013586565a1d8ccaf50cef3e333 100644 (file)
@@ -156,8 +156,17 @@ InsetGraphics::~InsetGraphics()
 
 void InsetGraphics::setBuffer(Buffer & buffer)
 {
-       if (buffer_)
-               params_.filename = params_.filename.copyTo(&buffer);
+       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);
 }
 
index 9b8428ae303117841e43caedf130986198203619..c0ce30f8b88668cbe6d0935ef859c7922b47dffc 100644 (file)
@@ -47,6 +47,7 @@
 
 #include "support/debug.h"
 #include "support/docstream.h"
+#include "support/ExceptionMessage.h"
 #include "support/FileNameList.h"
 #include "support/filetools.h"
 #include "support/gettext.h"
@@ -216,10 +217,17 @@ InsetInclude::~InsetInclude()
 void InsetInclude::setBuffer(Buffer & buffer)
 {
        if (buffer_) {
-               EmbeddedFile file_from = includedFilename(*buffer_, params());
-               EmbeddedFile file_to = file_from.copyTo(&buffer);
-               if (file_to.embedded())
-                       setParam("embed", from_utf8(file_to.inzipName()));
+               try {
+                       EmbeddedFile file_from = includedFilename(*buffer_, params());
+                       EmbeddedFile file_to = file_from.copyTo(&buffer);
+                       if (file_to.embedded())
+                               setParam("embed", from_utf8(file_to.inzipName()));
+               } catch (ExceptionMessage const & message) {
+                       Alert::error(message.title_, message.details_);
+                       // failed to embed
+                       setParam("embed", docstring());
+               }
+
        }
        buffer_ = &buffer;
        if (label_)