diff options
author | Tamás Zolnai <tamas.zolnai@collabora.com> | 2018-04-19 12:10:52 +0200 |
---|---|---|
committer | Tamás Zolnai <tamas.zolnai@collabora.com> | 2018-04-19 14:05:21 +0200 |
commit | 67919621cb0b95074c4401bdfced9d87b230cc2f (patch) | |
tree | b7364b38de39a3a260cbe956e8daba78fac3affd | |
parent | 4ec8afafea320f40806abc7bdc9149a9b26b3d4c (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
Change-Id: Iaf8a8082961cd174c038fc021d2c41fb7cb97bff
Reviewed-on: https://gerrit.libreoffice.org/53148
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
-rw-r--r-- | include/sfx2/shell.hxx | 8 | ||||
-rw-r--r-- | sfx2/source/control/dispatch.cxx | 18 | ||||
-rw-r--r-- | sfx2/source/control/shell.cxx | 15 | ||||
-rw-r--r-- | sw/inc/view.hxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/uiview/view2.cxx | 15 | ||||
-rw-r--r-- | sw/source/uibase/uiview/viewstat.cxx | 2 |
6 files changed, 42 insertions, 18 deletions
diff --git a/include/sfx2/shell.hxx b/include/sfx2/shell.hxx index 55e15f0e8655..e3339e9de113 100644 --- a/include/sfx2/shell.hxx +++ b/include/sfx2/shell.hxx @@ -487,6 +487,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 c05609f01ce7..d3e403d70e9c 100644 --- a/sfx2/source/control/dispatch.cxx +++ b/sfx2/source/control/dispatch.cxx @@ -306,22 +306,6 @@ bool SfxDispatcher::IsAppDispatcher() const return !xImp->pFrame; } -/// Decides if the request is FASTCALL or not, depending on arguments. -bool lcl_IsConditionalFastCall(SfxRequest const &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 */ @@ -330,7 +314,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 2f25891ce5e5..c89d162ebe9d 100644 --- a/sfx2/source/control/shell.cxx +++ b/sfx2/source/control/shell.cxx @@ -388,6 +388,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 a5307014b9c9..700ae7511f1e 100644 --- a/sw/inc/view.hxx +++ b/sw/inc/view.hxx @@ -488,6 +488,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 119f1761d2e2..4ef8b57ab786 100644 --- a/sw/source/uibase/uiview/view2.cxx +++ b/sw/source/uibase/uiview/view2.cxx @@ -115,6 +115,7 @@ #include <dbconfig.hxx> #include <dbmgr.hxx> #include <reffld.hxx> +#include <comphelper/lok.hxx> #include <PostItMgr.hxx> @@ -1217,6 +1218,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 6a7723cc33e4..73661dca0b1b 100644 --- a/sw/source/uibase/uiview/viewstat.cxx +++ b/sw/source/uibase/uiview/viewstat.cxx @@ -329,7 +329,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()) { |