summaryrefslogtreecommitdiff
path: root/embeddedobj
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2021-09-29 14:56:43 +0200
committerMiklos Vajna <vmiklos@collabora.com>2021-09-29 15:49:12 +0200
commita92ce1ed68b3f6522db76e8caa7e69cf2f66fc22 (patch)
treebf268e500c1822d778dd1a19e6d026e5caffa6aa /embeddedobj
parente9564f1d727e89e8ab7c441a80a3944de10b3d3d (diff)
embeddedobj: add a status indicator for the Further objects dialog
Inserting a large file can take a while, and we do it on the main thread, so the UI is frozen during the operation. Create the progressbar in cui, which is allowed to link against sfx2/ and then pass it down to embeddedobj/. Similarly for the label of the progressbar, again because cui is allowed to link against svx/. Change-Id: I53fec4e14df647b140647d9ff5a3a37c0aa9e72e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/122825 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'embeddedobj')
-rw-r--r--embeddedobj/source/msole/xdialogcreator.cxx25
1 files changed, 25 insertions, 0 deletions
diff --git a/embeddedobj/source/msole/xdialogcreator.cxx b/embeddedobj/source/msole/xdialogcreator.cxx
index 226528516953..d5ecdf587909 100644
--- a/embeddedobj/source/msole/xdialogcreator.cxx
+++ b/embeddedobj/source/msole/xdialogcreator.cxx
@@ -29,6 +29,7 @@
#include <com/sun/star/datatransfer/DataFlavor.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/ucb/CommandAbortedException.hpp>
+#include <com/sun/star/task/XStatusIndicatorFactory.hpp>
#include <osl/thread.h>
#include <osl/file.hxx>
@@ -40,6 +41,7 @@
#include <comphelper/processfactory.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <cppuhelper/weak.hxx>
+#include <comphelper/sequenceashashmap.hxx>
#include "xdialogcreator.hxx"
#include <oleembobj.hxx>
@@ -215,8 +217,31 @@ embed::InsertedObjectInfo SAL_CALL MSOLEDialogObjectCreator::createInstanceByDia
if ( !xEmbCreator.is() )
throw uno::RuntimeException();
+ uno::Reference<task::XStatusIndicator> xProgress;
+ OUString aProgressText;
+ comphelper::SequenceAsHashMap aMap(aInObjArgs);
+ auto it = aMap.find("StatusIndicator");
+ if (it != aMap.end())
+ {
+ it->second >>= xProgress;
+ }
+ it = aMap.find("StatusIndicatorText");
+ if (it != aMap.end())
+ {
+ it->second >>= aProgressText;
+ }
+ if (xProgress.is())
+ {
+ xProgress->start(aProgressText, 100);
+ }
+
aObjectInfo.Object.set( xEmbCreator->createInstanceInitFromMediaDescriptor( xStorage, sEntName, aMediaDescr, aObjArgs ),
uno::UNO_QUERY );
+
+ if (xProgress.is())
+ {
+ xProgress->end();
+ }
}
if ( ( io.dwFlags & IOF_CHECKDISPLAYASICON) && io.hMetaPict != nullptr )