summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2014-05-20 22:37:12 +0200
committerMichael Stahl <mstahl@redhat.com>2014-05-22 13:12:55 +0200
commit0e21019e0d61911b4c0ddef07691e9f9f6384cba (patch)
treec55891d8a3eade50e1ae8d904c5fe6767786e679
parent563c2367104d11bf437c52def5d5381f1af3b29a (diff)
fdo#68983: Revert "remove #if 0 block (from ...
... af34774d260a68fc02cd78ba90dd8d4afaf1a2a4)" This reverts commit cbd1a89676f39135ed2e9c47d20475b2053289b9. Conflicts: basic/source/uno/namecont.cxx Change-Id: I665f2e875c6b339ad718ca53fd0e54328efaeaff
-rw-r--r--basic/source/uno/namecont.cxx60
1 files changed, 44 insertions, 16 deletions
diff --git a/basic/source/uno/namecont.cxx b/basic/source/uno/namecont.cxx
index 8898781f1937..bc5f796cdada 100644
--- a/basic/source/uno/namecont.cxx
+++ b/basic/source/uno/namecont.cxx
@@ -1894,29 +1894,57 @@ void SfxLibraryContainer::storeLibraries_Impl( const uno::Reference< embed::XSto
if( pImplLib->implIsModified() || bComplete )
{
- {
- uno::Reference< embed::XStorage > xLibraryStor;
- if( bStorage )
+// For the moment don't copy storage (as an optimisation )
+// but instead always write to storage from memory.
+// Testing pImplLib->implIsModified() is not reliable,
+// IMHO the value of pImplLib->implIsModified() should
+// reflect whether the library ( in-memory ) model
+// is in sync with the library container's own storage. Currently
+// whenever the library model is written to *any* storage
+// pImplLib->implSetModified( sal_False ) is called
+// The way the code works, especially the way that sfx uses
+// temp storage when saving ( and later sets the root storage of the
+// library container ) and similar madness in dbaccess means some surgery
+// is required to make it possible to successfully use this optimisation
+#if 0
+ // Can we simply copy the storage?
+ if( !mbOldInfoFormat && !pImplLib->implIsModified() && !mbOasis2OOoFormat && xSourceLibrariesStor.is() )
{
try
{
- xLibraryStor = xTargetLibrariesStor->openStorageElement(
- rLib.aName,
- embed::ElementModes::READWRITE );
+ xSourceLibrariesStor->copyElementTo( rLib.aName, xTargetLibrariesStor, rLib.aName );
}
- catch(const uno::Exception& )
+ catch( const uno::Exception& )
{
- #if OSL_DEBUG_LEVEL > 0
- Any aError( ::cppu::getCaughtException() );
- SAL_WARN(
- "basic",
- "couldn't create sub storage for library \""
- << rLib.aName << "\". Exception: "
- << comphelper::anyToString(aError));
- #endif
- throw;
+ DBG_UNHANDLED_EXCEPTION();
+ // TODO: error handling?
}
}
+ else
+#endif
+ {
+ uno::Reference< embed::XStorage > xLibraryStor;
+ if( bStorage )
+ {
+ try
+ {
+ xLibraryStor = xTargetLibrariesStor->openStorageElement(
+ rLib.aName,
+ embed::ElementModes::READWRITE );
+ }
+ catch(const uno::Exception& )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ Any aError( ::cppu::getCaughtException() );
+ SAL_WARN(
+ "basic",
+ "couldn't create sub storage for library \""
+ << rLib.aName << "\". Exception: "
+ << comphelper::anyToString(aError));
+ #endif
+ throw;
+ }
+ }
// Maybe lib is not loaded?!
if( bComplete )