diff options
Diffstat (limited to 'framework/source/uielement/macrosmenucontroller.cxx')
-rw-r--r-- | framework/source/uielement/macrosmenucontroller.cxx | 40 |
1 files changed, 16 insertions, 24 deletions
diff --git a/framework/source/uielement/macrosmenucontroller.cxx b/framework/source/uielement/macrosmenucontroller.cxx index a4c5123f50c7..77f077204373 100644 --- a/framework/source/uielement/macrosmenucontroller.cxx +++ b/framework/source/uielement/macrosmenucontroller.cxx @@ -23,18 +23,15 @@ #include <com/sun/star/uno/XComponentContext.hpp> #include <com/sun/star/style/XStyleFamiliesSupplier.hpp> #include <officecfg/Office/Common.hxx> -#include <toolkit/awt/vclxmenu.hxx> #include <vcl/svapp.hxx> #include <vcl/commandinfoprovider.hxx> #include <osl/mutex.hxx> +#include <toolkit/awt/vclxmenu.hxx> #include <cppuhelper/supportsservice.hxx> using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::frame; -using namespace com::sun::star::beans; -using namespace com::sun::star::util; -using namespace com::sun::star::style; using namespace com::sun::star::container; namespace framework @@ -74,27 +71,20 @@ void MacrosMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu > cons if (bMacrosDisabled) return; - VCLXPopupMenu* pVCLPopupMenu = static_cast<VCLXPopupMenu *>(comphelper::getFromUnoTunnel<VCLXMenu>( rPopupMenu )); - PopupMenu* pPopupMenu = nullptr; - SolarMutexGuard aSolarMutexGuard; - resetPopupMenu( rPopupMenu ); - if ( pVCLPopupMenu ) - pPopupMenu = static_cast<PopupMenu *>(pVCLPopupMenu->GetMenu()); - - if (!pPopupMenu) - return; + resetPopupMenu(rPopupMenu); + assert(rPopupMenu->getItemCount() == 0); // insert basic OUString aCommand(".uno:MacroDialog"); auto aProperties = vcl::CommandInfoProvider::GetCommandProperties(aCommand, m_aModuleName); OUString aDisplayName = vcl::CommandInfoProvider::GetMenuLabelForCommand(aProperties); - pPopupMenu->InsertItem( 2, aDisplayName ); - pPopupMenu->SetItemCommand( 2, aCommand ); + rPopupMenu->insertItem(2, aDisplayName, 0, 0); + rPopupMenu->setCommand(2, aCommand); // insert providers but not basic or java - addScriptItems( pPopupMenu, 4); + addScriptItems(rPopupMenu, 4); } // XEventListener @@ -102,7 +92,7 @@ void SAL_CALL MacrosMenuController::disposing( const EventObject& ) { Reference< css::awt::XMenuListener > xHolder(this); - osl::MutexGuard aLock( m_aMutex ); + std::unique_lock aLock( m_aMutex ); m_xFrame.clear(); m_xDispatch.clear(); m_xContext.clear(); @@ -117,22 +107,24 @@ void SAL_CALL MacrosMenuController::disposing( const EventObject& ) // XStatusListener void SAL_CALL MacrosMenuController::statusChanged( const FeatureStateEvent& ) { - osl::MutexGuard aLock( m_aMutex ); + std::unique_lock aLock( m_aMutex ); if ( m_xPopupMenu.is() ) { fillPopupMenu( m_xPopupMenu ); } } -void MacrosMenuController::addScriptItems( PopupMenu* pPopupMenu, sal_uInt16 startItemId ) +void MacrosMenuController::addScriptItems(const Reference<css::awt::XPopupMenu>& rPopupMenu, sal_uInt16 startItemId) { - static const OUStringLiteral aCmdBase(u".uno:ScriptOrganizer?ScriptOrganizer.Language:string="); - static const OUStringLiteral ellipsis( u"..." ); - static const OUStringLiteral providerKey(u"com.sun.star.script.provider.ScriptProviderFor"); + static constexpr OUStringLiteral aCmdBase(u".uno:ScriptOrganizer?ScriptOrganizer.Language:string="); + static constexpr OUStringLiteral ellipsis( u"..." ); + static constexpr OUString providerKey(u"com.sun.star.script.provider.ScriptProviderFor"_ustr); sal_uInt16 itemId = startItemId; Reference< XContentEnumerationAccess > xEnumAccess( m_xContext->getServiceManager(), UNO_QUERY_THROW ); Reference< XEnumeration > xEnum = xEnumAccess->createContentEnumeration ( "com.sun.star.script.provider.LanguageScriptProvider" ); + sal_Int16 nPos = rPopupMenu->getItemCount(); + while ( xEnum->hasMoreElements() ) { Reference< XServiceInfo > xServiceInfo; @@ -155,8 +147,8 @@ void MacrosMenuController::addScriptItems( PopupMenu* pPopupMenu, sal_uInt16 sta } aCommand += aDisplayName; aDisplayName += ellipsis; - pPopupMenu->InsertItem( itemId, aDisplayName ); - pPopupMenu->SetItemCommand( itemId, aCommand ); + rPopupMenu->insertItem(itemId, aDisplayName, 0, nPos++); + rPopupMenu->setCommand(itemId, aCommand); itemId++; break; } |