diff options
author | Szymon Kłos <szymon.klos@collabora.com> | 2021-11-10 11:33:03 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2021-11-11 10:45:44 +0100 |
commit | 5b868d0d2d8fe9b327f30083d83a8fba573c510e (patch) | |
tree | af5248a36b56d23c69f265fa21635fd0b935c835 | |
parent | c72e500ccaf0ce2261c5233b80fba9342778f810 (diff) |
Handle UNO command aliases in ToolBoxes
This allows to use ".uno:InsertSlide" which is an alias for
".uno:InsertPage"
in the notebookbar.
Change-Id: Ia52488b65e308a62b686e77b38cba3675deece73
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124952
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Reviewed-by: Andras Timar <andras.timar@collabora.com>
-rw-r--r-- | framework/source/uielement/generictoolbarcontroller.cxx | 8 | ||||
-rw-r--r-- | svtools/source/uno/toolboxcontroller.cxx | 25 |
2 files changed, 32 insertions, 1 deletions
diff --git a/framework/source/uielement/generictoolbarcontroller.cxx b/framework/source/uielement/generictoolbarcontroller.cxx index 31c22d03bbb1..9b9c23a73ffd 100644 --- a/framework/source/uielement/generictoolbarcontroller.cxx +++ b/framework/source/uielement/generictoolbarcontroller.cxx @@ -26,6 +26,7 @@ #include <com/sun/star/frame/status/Visibility.hpp> #include <com/sun/star/frame/ControlCommand.hpp> +#include <vcl/commandinfoprovider.hxx> #include <vcl/svapp.hxx> #include <vcl/toolbox.hxx> #include <vcl/weld.hxx> @@ -156,7 +157,12 @@ void SAL_CALL GenericToolbarController::execute( sal_Int16 KeyModifier ) aArgs[0].Name = "KeyModifier"; aArgs[0].Value <<= KeyModifier; - aTargetURL.Complete = aCommandURL; + // handle also command aliases + auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(m_aCommandURL, + vcl::CommandInfoProvider::GetModuleIdentifier(m_xFrame)); + OUString sRealCommand = vcl::CommandInfoProvider::GetRealCommandForCommand(aProperties); + + aTargetURL.Complete = sRealCommand.isEmpty() ? aCommandURL : sRealCommand; if ( m_xUrlTransformer.is() ) m_xUrlTransformer->parseStrict( aTargetURL ); diff --git a/svtools/source/uno/toolboxcontroller.cxx b/svtools/source/uno/toolboxcontroller.cxx index b8c9ba9b4a0d..d38ba52feabd 100644 --- a/svtools/source/uno/toolboxcontroller.cxx +++ b/svtools/source/uno/toolboxcontroller.cxx @@ -26,6 +26,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/frame/XLayoutManager.hpp> #include <com/sun/star/util/URLTransformer.hpp> +#include <vcl/commandinfoprovider.hxx> #include <vcl/svapp.hxx> #include <toolkit/helper/vclunohelper.hxx> #include <vcl/toolbox.hxx> @@ -517,6 +518,30 @@ void ToolboxController::bindListener() catch ( Exception& ) { } + + // it may be a command alias + if (!xDispatch.is()) + { + try + { + auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(listener.first, + vcl::CommandInfoProvider::GetModuleIdentifier(m_xFrame)); + OUString sRealCommand = vcl::CommandInfoProvider::GetRealCommandForCommand(aProperties); + + if (!sRealCommand.isEmpty()) + { + aTargetURL.Complete = sRealCommand; + if ( m_xUrlTransformer.is() ) + m_xUrlTransformer->parseStrict( aTargetURL ); + + xDispatch = xDispatchProvider->queryDispatch( aTargetURL, OUString(), 0 ); + } + } + catch ( Exception& ) + { + } + } + listener.second = xDispatch; Listener aListener( aTargetURL, xDispatch ); |