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: pgpl0367UBNj8.pgp
Description: PGP signature

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to