Date: prev next · Thread: first prev next last
2010 Archives by date, by thread · List index


Hi,

chatting with some folks yesterday at the OOo congress for business
and administration, and two users approached me with a problem most
prevalent when saving to network volumes:

LibO save progress bars are basically driven by the xml export code
(when saving to odf, of course), but there's some non-trivial
postprocessing happening inside
sfx2/source/doc/objstor.cxx:SaveTo_Impl(), some of which is bound to
IO. The observed behaviour thusly, when saving to a slowish network
volume, is that the save progress bar is stuck at 100% (because all
xml content is written), but the apps are still unresponsive
(sometimes for a minute or so).

Changing SaveTo_Impl() to use async IO is prolly out of scope for
3.3, so another workaround would be to keep the progress bar from
reaching 100% before all work is finished - see attached patches 
for a sketchy attempt. Problem here: the progress bar will not move
either way, it's just not stuck at 100%, but at 90% now.

Any UX insight on how to best get this across? 

Cheers,

-- Thorsten
diff --git a/sc/source/filter/xml/xmlexprt.cxx b/sc/source/filter/xml/xmlexprt.cxx
index e160861..102068a 100644
--- a/sc/source/filter/xml/xmlexprt.cxx
+++ b/sc/source/filter/xml/xmlexprt.cxx
@@ -730,7 +730,8 @@ void ScXMLExport::CollectSharedData(sal_Int32& nTableCount, sal_Int32& nShapesCo
         }
     }
     sal_Int32 nRef(nCellCount + (2 * nTableCount) + (2 * nShapesCount));
-    GetProgressBarHelper()->SetReference(nRef);
+    // leave ~10% for zip swappage
+    GetProgressBarHelper()->SetReference(nRef*10/9);
     GetProgressBarHelper()->SetValue(0);
 }
 
diff --git a/xmloff/source/draw/sdxmlexp.cxx b/xmloff/source/draw/sdxmlexp.cxx
index 82d6078..5868fab 100644
--- a/xmloff/source/draw/sdxmlexp.cxx
+++ b/xmloff/source/draw/sdxmlexp.cxx
@@ -620,8 +620,9 @@ void SAL_CALL SdXMLExport::setSourceDocument( const Reference< lang::XComponent
             }
         }
 
-        // #82003# init progress bar
-        GetProgressBarHelper()->SetReference(mnObjectCount);
+        // #82003# init progress bar - leave ~10% of progress for
+        // final zip swappage
+        GetProgressBarHelper()->SetReference(std::max(mnObjectCount*10/9,sal_uInt32(1)));
     }
 
     // add namespaces
diff --git a/sw/source/filter/xml/xmlexp.cxx b/sw/source/filter/xml/xmlexp.cxx
index ba0bde7..117fd28 100644
--- a/sw/source/filter/xml/xmlexp.cxx
+++ b/sw/source/filter/xml/xmlexp.cxx
@@ -325,7 +325,8 @@ sal_uInt32 SwXMLExport::exportDoc( enum XMLTokenEnum eClass )
             nRef *= 2; // for the above styles, xmloff will increment by 2!
             // #i93174#: count all paragraphs for the progress bar
             nRef += aDocStat.nAllPara; // 1: only content, no autostyle
-            pProgress->SetReference( nRef );
+            // leave ~10% for zip swappage
+            pProgress->SetReference( nRef*10/9 );
             pProgress->SetValue( 0 );
         }
     }

Attachment: pgpxf0CExTL7b.pgp
Description: PGP signature


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.