diff options
Diffstat (limited to 'sfx2/source/doc/objstor.cxx')
-rw-r--r-- | sfx2/source/doc/objstor.cxx | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx index 21515b2c6f3d..ead9a7c9fd9a 100644 --- a/sfx2/source/doc/objstor.cxx +++ b/sfx2/source/doc/objstor.cxx @@ -34,9 +34,9 @@ #ifndef _MSGBOX_HXX //autogen #include <vcl/msgbox.hxx> #endif -#include <svtools/eitem.hxx> -#include <svtools/stritem.hxx> -#include <svtools/intitem.hxx> +#include <svl/eitem.hxx> +#include <svl/stritem.hxx> +#include <svl/intitem.hxx> #include <tools/zcodec.hxx> #include <com/sun/star/frame/XStorable.hpp> #include <com/sun/star/frame/XModel.hpp> @@ -80,16 +80,15 @@ #include <comphelper/configurationhelper.hxx> #include <comphelper/interaction.hxx> #include <svtools/sfxecode.hxx> -#include <svtools/securityoptions.hxx> +#include <unotools/securityoptions.hxx> #include <cppuhelper/weak.hxx> #include <comphelper/processfactory.hxx> #include <tools/cachestr.hxx> -#include <svtools/addxmltostorageoptions.hxx> #include <unotools/streamwrap.hxx> -#include <svtools/saveopt.hxx> -#include <svtools/useroptions.hxx> -#include <svtools/pathoptions.hxx> +#include <unotools/saveopt.hxx> +#include <unotools/useroptions.hxx> +#include <unotools/pathoptions.hxx> #include <tools/urlobj.hxx> #include <tools/diagnose_ex.h> #include <unotools/localfilehelper.hxx> @@ -1872,7 +1871,19 @@ sal_Bool SfxObjectShell::DisconnectStorage_Impl( SfxMedium& rSrcMedium, SfxMediu { uno::Reference< embed::XOptimizedStorage > xOptStorage( xStorage, uno::UNO_QUERY_THROW ); ::rtl::OUString aBackupURL = rTargetMedium.GetBackup_Impl(); - if ( aBackupURL.getLength() ) + if ( !aBackupURL.getLength() ) + { + // the backup could not be created, try to disconnect the storage and close the source SfxMedium + // in this case the optimization is not possible, connect storage to a temporary file + rTargetMedium.ResetError(); + xOptStorage->writeAndAttachToStream( uno::Reference< io::XStream >() ); + rSrcMedium.CanDisposeStorage_Impl( sal_False ); + rSrcMedium.Close(); + + // now try to create the backup + rTargetMedium.GetBackup_Impl(); + } + else { // the following call will only compare stream sizes // TODO/LATER: this is a very risky part, since if the URL contents are different from the storage |