summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2018-04-19 12:10:52 +0200
committerAndras Timar <andras.timar@collabora.com>2018-08-20 11:56:02 +0200
commitddece8025a51a37c2e3c4a504fc8d45800a20efc (patch)
tree3a8b500b42e7403e9a0c8214d7c98674cca47b55
parent1cf7f73c19d2f019d32c22699b27e86cc00c4745 (diff)
sw lok: Accept / reject change is always enabled in the context menu
Use conditional fastcall for allow executing these two uno commands even if there is no tracked changes at the cursor position instead of enable the menu slots unconditionally. See also: b6011f07254f8003929320ad842d8d09daca0e09 Reviewed-on: https://gerrit.libreoffice.org/53148 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com> (cherry picked from commit 67919621cb0b95074c4401bdfced9d87b230cc2f) Change-Id: Iaf8a8082961cd174c038fc021d2c41fb7cb97bff Reviewed-on: https://gerrit.libreoffice.org/53181 Reviewed-by: Jan Holesovsky <kendy@collabora.com> Tested-by: Jan Holesovsky <kendy@collabora.com> (cherry picked from commit faf9d81f0406038b2fddd0a85d64e4a39edf3196)
-rw-r--r--include/sfx2/shell.hxx8
-rw-r--r--sfx2/source/control/dispatch.cxx18
-rw-r--r--sfx2/source/control/shell.cxx15
-rw-r--r--sw/inc/view.hxx2
-rw-r--r--sw/source/uibase/uiview/view2.cxx15
-rw-r--r--sw/source/uibase/uiview/viewstat.cxx2
6 files changed, 42 insertions, 18 deletions
diff --git a/include/sfx2/shell.hxx b/include/sfx2/shell.hxx
index 4c7d12fd7049..00f48e1f882b 100644
--- a/include/sfx2/shell.hxx
+++ b/include/sfx2/shell.hxx
@@ -488,6 +488,14 @@ public:
/**
+ This method determines whether we need to execute without checking
+ the disabled state of the slot. This is used for dynamic conditions
+ while you can use SfxSlotMode::FASTCALL for a specific slotid in general.
+ */
+ virtual bool IsConditionalFastCall( const SfxRequest &rReq );
+
+ /**
+
This method controls the activation of SfxShell instance. First, by calling
the virtual method <SfxShell::Activate(sal_Bool)> which gives the subclass the
opportunity to respond to the event.
diff --git a/sfx2/source/control/dispatch.cxx b/sfx2/source/control/dispatch.cxx
index 93394c368512..fdb3073ef1f0 100644
--- a/sfx2/source/control/dispatch.cxx
+++ b/sfx2/source/control/dispatch.cxx
@@ -312,22 +312,6 @@ bool SfxDispatcher::IsAppDispatcher() const
return !xImp->pFrame;
}
-/// Decides if the request is FASTCALL or not, depending on arguments.
-bool lcl_IsConditionalFastCall(SfxRequest &rReq)
-{
- sal_uInt16 nId = rReq.GetSlot();
- bool bRet = false;
-
- if (nId == SID_UNDO || nId == SID_REDO)
- {
- const SfxItemSet* pArgs = rReq.GetArgs();
- if (pArgs && pArgs->HasItem(SID_REPAIRPACKAGE))
- bRet = true;
- }
-
- return bRet;
-}
-
/** Helper function to check whether a slot can be executed and
check the execution itself
*/
@@ -336,7 +320,7 @@ void SfxDispatcher::Call_Impl(SfxShell& rShell, const SfxSlot &rSlot, SfxRequest
SFX_STACK(SfxDispatcher::Call_Impl);
// The slot may be called (meaning enabled)
- if ( rSlot.IsMode(SfxSlotMode::FASTCALL) || rShell.CanExecuteSlot_Impl(rSlot) || lcl_IsConditionalFastCall(rReq))
+ if ( rSlot.IsMode(SfxSlotMode::FASTCALL) || rShell.CanExecuteSlot_Impl(rSlot) || rShell.IsConditionalFastCall(rReq))
{
if ( GetFrame() )
{
diff --git a/sfx2/source/control/shell.cxx b/sfx2/source/control/shell.cxx
index 4703f7921972..48c78a3dde78 100644
--- a/sfx2/source/control/shell.cxx
+++ b/sfx2/source/control/shell.cxx
@@ -400,6 +400,21 @@ bool SfxShell::CanExecuteSlot_Impl( const SfxSlot &rSlot )
return aSet.GetItemState(nId) != SfxItemState::DISABLED;
}
+bool SfxShell::IsConditionalFastCall( const SfxRequest &rReq )
+{
+ sal_uInt16 nId = rReq.GetSlot();
+ bool bRet = false;
+
+ if (nId == SID_UNDO || nId == SID_REDO)
+ {
+ const SfxItemSet* pArgs = rReq.GetArgs();
+ if (pArgs && pArgs->HasItem(SID_REPAIRPACKAGE))
+ bRet = true;
+ }
+ return bRet;
+}
+
+
void ShellCall_Impl( void* pObj, void* pArg )
{
static_cast<SfxShell*>(pObj)->ExecuteSlot( *static_cast<SfxRequest*>(pArg) );
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index a2321ce13531..15f3d4e6b5c8 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -503,6 +503,8 @@ public:
void ExecSearch(SfxRequest&);
void ExecViewOptions(SfxRequest &);
+ virtual bool IsConditionalFastCall( const SfxRequest &rReq ) override;
+
void StateViewOptions(SfxItemSet &);
void StateSearch(SfxItemSet &);
void GetState(SfxItemSet&);
diff --git a/sw/source/uibase/uiview/view2.cxx b/sw/source/uibase/uiview/view2.cxx
index 512658ca9ac9..5aed6dc097cd 100644
--- a/sw/source/uibase/uiview/view2.cxx
+++ b/sw/source/uibase/uiview/view2.cxx
@@ -123,6 +123,7 @@
#include <dbconfig.hxx>
#include <dbmgr.hxx>
#include <reffld.hxx>
+#include <comphelper/lok.hxx>
#include <PostItMgr.hxx>
@@ -1249,6 +1250,20 @@ void SwView::Execute(SfxRequest &rReq)
rReq.Done();
}
+bool SwView::IsConditionalFastCall( const SfxRequest &rReq )
+{
+ sal_uInt16 nId = rReq.GetSlot();
+ bool bRet = false;
+
+ if (nId == FN_REDLINE_ACCEPT_DIRECT || nId == FN_REDLINE_REJECT_DIRECT)
+ {
+ if (comphelper::LibreOfficeKit::isActive())
+ bRet = true;
+ }
+ return bRet || SfxShell::IsConditionalFastCall(rReq);
+
+}
+
/// invalidate page numbering field
void SwView::UpdatePageNums(sal_uInt16 nPhyNum, sal_uInt16 nVirtNum, const OUString& rPgStr)
{
diff --git a/sw/source/uibase/uiview/viewstat.cxx b/sw/source/uibase/uiview/viewstat.cxx
index 95b1688b209d..99c15e7b2561 100644
--- a/sw/source/uibase/uiview/viewstat.cxx
+++ b/sw/source/uibase/uiview/viewstat.cxx
@@ -322,7 +322,7 @@ void SwView::GetState(SfxItemSet &rSet)
}
// LibreOfficeKit wants to handle changes by index, so always allow here.
- if (bDisable && !comphelper::LibreOfficeKit::isActive())
+ if (bDisable)
rSet.DisableItem(nWhich);
if (comphelper::LibreOfficeKit::isActive())
{