summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/control/bindings.cxx14
-rw-r--r--sfx2/source/control/statcach.cxx30
-rw-r--r--sfx2/source/control/unoctitm.cxx9
-rw-r--r--sfx2/source/inc/statcach.hxx4
4 files changed, 41 insertions, 16 deletions
diff --git a/sfx2/source/control/bindings.cxx b/sfx2/source/control/bindings.cxx
index 3bdeb277a8fa..cfc899f03dd8 100644
--- a/sfx2/source/control/bindings.cxx
+++ b/sfx2/source/control/bindings.cxx
@@ -34,6 +34,7 @@
#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp>
#include <com/sun/star/frame/XDispatch.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
+#include <com/sun/star/frame/DispatchResultState.hpp>
#include <com/sun/star/frame/XStatusListener.hpp>
#include <com/sun/star/frame/FrameSearchFlag.hpp>
#include <com/sun/star/frame/XDispatchProviderInterception.hpp>
@@ -1014,10 +1015,15 @@ const SfxPoolItem* SfxBindings::Execute_Impl( sal_uInt16 nId, const SfxPoolItem*
aReq.AppendItem( **ppItems++ );
// cache binds to an external dispatch provider
- pCache->Dispatch( aReq.GetArgs(), nCallMode == SfxCallMode::SYNCHRON );
- SfxPoolItem *pVoid = new SfxVoidItem( nId );
- DeleteItemOnIdle( pVoid );
- return pVoid;
+ sal_Int16 eRet = pCache->Dispatch( aReq.GetArgs(), nCallMode == SfxCallMode::SYNCHRON );
+ SfxPoolItem *pPool;
+ if ( eRet == css::frame::DispatchResultState::DONTKNOW )
+ pPool = new SfxVoidItem( nId );
+ else
+ pPool = new SfxBoolItem( nId, eRet == css::frame::DispatchResultState::SUCCESS);
+
+ DeleteItemOnIdle( pPool );
+ return pPool;
}
// slot is handled internally by SfxDispatcher
diff --git a/sfx2/source/control/statcach.cxx b/sfx2/source/control/statcach.cxx
index d5165c43db6e..4721b05c1b4d 100644
--- a/sfx2/source/control/statcach.cxx
+++ b/sfx2/source/control/statcach.cxx
@@ -30,6 +30,8 @@
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/frame/FrameActionEvent.hpp>
#include <com/sun/star/frame/FrameAction.hpp>
+#include <framework/dispatchhelper.hxx>
+#include <com/sun/star/frame/DispatchResultState.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <cppuhelper/weak.hxx>
#include <svl/eitem.hxx>
@@ -162,17 +164,22 @@ void BindDispatch_Impl::Release()
}
-void BindDispatch_Impl::Dispatch( const uno::Sequence < beans::PropertyValue >& aProps, bool bForceSynchron )
+sal_Int16 BindDispatch_Impl::Dispatch( const css::uno::Sequence < css::beans::PropertyValue >& aProps, bool bForceSynchron )
{
+ sal_Int16 eRet = css::frame::DispatchResultState::DONTKNOW;
+
if ( xDisp.is() && aStatus.IsEnabled )
{
- sal_Int32 nLength = aProps.getLength();
- uno::Sequence < beans::PropertyValue > aProps2 = aProps;
- aProps2.realloc(nLength+1);
- aProps2[nLength].Name = "SynchronMode";
- aProps2[nLength].Value <<= bForceSynchron ;
- xDisp->dispatch( aURL, aProps2 );
+ ::rtl::Reference< ::framework::DispatchHelper > xHelper( new ::framework::DispatchHelper(nullptr));
+ css::uno::Any aResult = xHelper->executeDispatch(xDisp, aURL, bForceSynchron, aProps);
+
+ css::frame::DispatchResultEvent aEvent;
+ aResult >>= aEvent;
+
+ eRet = aEvent.State;
}
+
+ return eRet;
}
@@ -479,17 +486,22 @@ css::uno::Reference< css::frame::XDispatch > SfxStateCache::GetDispatch() const
return css::uno::Reference< css::frame::XDispatch > ();
}
-void SfxStateCache::Dispatch( const SfxItemSet* pSet, bool bForceSynchron )
+sal_Int16 SfxStateCache::Dispatch( const SfxItemSet* pSet, bool bForceSynchron )
{
// protect pDispatch against destruction in the call
css::uno::Reference < css::frame::XStatusListener > xKeepAlive( pDispatch );
+ sal_Int16 eRet = css::frame::DispatchResultState::DONTKNOW;
+
if ( pDispatch )
{
uno::Sequence < beans::PropertyValue > aArgs;
if (pSet)
TransformItems( nId, *pSet, aArgs );
- pDispatch->Dispatch( aArgs, bForceSynchron );
+
+ eRet = pDispatch->Dispatch( aArgs, bForceSynchron );
}
+
+ return eRet;
}
diff --git a/sfx2/source/control/unoctitm.cxx b/sfx2/source/control/unoctitm.cxx
index 3c00b5269f86..fbbebfeb152a 100644
--- a/sfx2/source/control/unoctitm.cxx
+++ b/sfx2/source/control/unoctitm.cxx
@@ -702,7 +702,14 @@ void SAL_CALL SfxDispatchController_Impl::dispatch( const css::util::URL& aURL,
{
// execute with arguments - call directly
pItem = pDispatcher->Execute(GetId(), nCall, xSet.get(), &aInternalSet, nModifier);
- bSuccess = (pItem != nullptr);
+ if ( pItem != nullptr )
+ {
+ if ( dynamic_cast< const SfxBoolItem *>( pItem ) != nullptr )
+ bSuccess = dynamic_cast< const SfxBoolItem *>( pItem )->GetValue();
+ else if ( dynamic_cast< const SfxVoidItem *>( pItem ) == nullptr )
+ bSuccess = true; // all other types are true
+ }
+ // else bSuccess = false look to line 664 it is false
}
else
{
diff --git a/sfx2/source/inc/statcach.hxx b/sfx2/source/inc/statcach.hxx
index c34c0890f5be..d55bb2dc6e5c 100644
--- a/sfx2/source/inc/statcach.hxx
+++ b/sfx2/source/inc/statcach.hxx
@@ -56,7 +56,7 @@ public:
void Release();
const css::frame::FeatureStateEvent& GetStatus() const { return aStatus;}
- void Dispatch( const css::uno::Sequence < css::beans::PropertyValue >& aProps, bool bForceSynchron = false );
+ sal_Int16 Dispatch( const css::uno::Sequence < css::beans::PropertyValue >& aProps, bool bForceSynchron = false );
};
class SfxStateCache
@@ -89,7 +89,7 @@ public:
const SfxSlotServer* GetSlotServer( SfxDispatcher &rDispat )
{ return GetSlotServer( rDispat, css::uno::Reference< css::frame::XDispatchProvider > () ); }
css::uno::Reference< css::frame::XDispatch > GetDispatch() const;
- void Dispatch( const SfxItemSet* pSet, bool bForceSynchron = false );
+ sal_Int16 Dispatch( const SfxItemSet* pSet, bool bForceSynchron = false );
bool IsControllerDirty() const
{ return bCtrlDirty; }
void ClearCache();