framework/source/uielement/generictoolbarcontroller.cxx |    8 ++++-
 svtools/source/uno/toolboxcontroller.cxx                |   25 ++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

New commits:
commit 5b868d0d2d8fe9b327f30083d83a8fba573c510e
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Wed Nov 10 11:33:03 2021 +0100
Commit:     Andras Timar <andras.ti...@collabora.com>
CommitDate: Thu Nov 11 10:45:44 2021 +0100

    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 <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Andras Timar <andras.ti...@collabora.com>

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 );

Reply via email to