[Libreoffice-commits] core.git: include/sfx2 sfx2/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue Feb 5 16:20:11 UTC 2019
include/sfx2/sfxbasemodel.hxx | 7 +++----
sfx2/source/doc/sfxbasemodel.cxx | 20 ++++++++++++++++++--
2 files changed, 21 insertions(+), 6 deletions(-)
New commits:
commit b030e83fccbff8d82a4c84462075baa8442cde54
Author: Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Tue Feb 5 14:35:17 2019 +0100
Commit: Miklos Vajna <vmiklos at collabora.com>
CommitDate: Tue Feb 5 17:19:48 2019 +0100
sfx2: allow storeToURL() on the main thread
This is similar to commit f1e775470e68fb1ca1fee390c10064c55932180d
(framework: allow storeSelf() on the main thread, 2019-01-30), just this
handles "save as" instead of "save".
The result is that combining this commit with the previous OnMainThread
ones allows all of document load/save/save-as/command-dispatch on the
main thread even when the action is invoked via remote UNO, which would
run on a non-main thread by default.
Change-Id: I7d50cceb66ecc6619fe25734107a2524ca872c2a
Reviewed-on: https://gerrit.libreoffice.org/67412
Reviewed-by: Miklos Vajna <vmiklos at collabora.com>
Tested-by: Jenkins
diff --git a/include/sfx2/sfxbasemodel.hxx b/include/sfx2/sfxbasemodel.hxx
index d885f1385333..0f93d8652b6c 100644
--- a/include/sfx2/sfxbasemodel.hxx
+++ b/include/sfx2/sfxbasemodel.hxx
@@ -407,6 +407,9 @@ public:
virtual void SAL_CALL storeToURL( const OUString& sURL,
const css::uno::Sequence< css::beans::PropertyValue >& seqArguments ) override;
+ SAL_DLLPRIVATE void
+ impl_store(const OUString& sURL,
+ const css::uno::Sequence<css::beans::PropertyValue>& seqArguments, bool bSaveTo);
// XLoadable
@@ -715,10 +718,6 @@ private:
SAL_DLLPRIVATE void ListenForStorage_Impl( const css::uno::Reference< css::embed::XStorage >& xStorage );
SAL_DLLPRIVATE OUString GetMediumFilterName_Impl();
- SAL_DLLPRIVATE void impl_store( const OUString& sURL,
- const css::uno::Sequence< css::beans::PropertyValue >& seqArguments ,
- bool bSaveTo ) ;
-
SAL_DLLPRIVATE void postEvent_Impl( const OUString& aName, const css::uno::Reference< css::frame::XController2 >& xController = css::uno::Reference< css::frame::XController2 >() );
SAL_DLLPRIVATE css::uno::Reference< css::frame::XTitle > impl_getTitleHelper ();
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index 9d8b48f35cf4..e163345dac7a 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -126,7 +126,7 @@
#include <sfx2/sfxresid.hxx>
#include <comphelper/profilezone.hxx>
#include <vcl/threadex.hxx>
-
+#include <unotools/mediadescriptor.hxx>
// namespaces
@@ -1504,6 +1504,17 @@ static bool SaveImplStatic(SfxObjectShell* pThis, const SfxItemSet* pParams)
return pThis->Save_Impl(pParams);
}
+/**
+ * Proxy around SfxBaseModel::impl_store(), as vcl::solarthread::syncExecute()
+ * does not seem to accept lambdas or void functions.
+ */
+static bool ImplStoreStatic(SfxBaseModel* pThis, const OUString& rURL,
+ const uno::Sequence<beans::PropertyValue>& rArgs, bool bSaveTo)
+{
+ pThis->impl_store(rURL, rArgs, bSaveTo);
+ return true;
+}
+
// XStorable2
@@ -1688,7 +1699,12 @@ void SAL_CALL SfxBaseModel::storeToURL( const OUString& rURL
{
SfxSaveGuard aSaveGuard(this, m_pData.get());
try {
- impl_store(rURL, rArgs, true);
+ utl::MediaDescriptor aDescriptor(rArgs);
+ bool bOnMainThread = aDescriptor.getUnpackedValueOrDefault("OnMainThread", false);
+ if (bOnMainThread)
+ vcl::solarthread::syncExecute(std::bind(&ImplStoreStatic, this, rURL, rArgs, true));
+ else
+ impl_store(rURL, rArgs, true);
}
catch (const uno::Exception &e)
{
More information about the Libreoffice-commits
mailing list