framework/inc/services/layoutmanager.hxx | 1 framework/source/layoutmanager/layoutmanager.cxx | 65 ++++++++++ officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu | 5 sw/UIConfig_swriter.mk | 1 sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml | 29 ++++ 5 files changed, 101 insertions(+)
New commits: commit 1b70f748224a7e24d9368449db0be19d6e593e66 Author: Tamás Zolnai <[email protected]> AuthorDate: Fri Feb 15 18:37:40 2019 +0100 Commit: Andras Timar <[email protected]> CommitDate: Sun Feb 17 11:03:21 2019 +0100 MSForms: Introduce a new Forms menu which is compatible with MS Word * It's a Writer only menu by now * Displayed when the compatibility option is set * The menubar is changed during creation, so the option has an effect only after a restart. * MS compatible Forms menu contains only some ActiveX controls now Reviewed-on: https://gerrit.libreoffice.org/67904 Tested-by: Jenkins Reviewed-by: Tamás Zolnai <[email protected]> (cherry picked from commit dc3a2546bd0ad0afe20cba9940934405174fd593) Change-Id: I459f489c15ea7a25514f379b1800b926cc2087ce Reviewed-on: https://gerrit.libreoffice.org/67920 Reviewed-by: Andras Timar <[email protected]> Tested-by: Andras Timar <[email protected]> diff --git a/framework/inc/services/layoutmanager.hxx b/framework/inc/services/layoutmanager.hxx index ed3ec629e7e7..7f5495d42085 100644 --- a/framework/inc/services/layoutmanager.hxx +++ b/framework/inc/services/layoutmanager.hxx @@ -178,6 +178,7 @@ namespace framework void implts_reset( bool bAttach ); void implts_updateMenuBarClose(); bool implts_resetMenuBar(); + void implts_createMSCompatibleMenuBar(const OUString& rName); // locking diff --git a/framework/source/layoutmanager/layoutmanager.cxx b/framework/source/layoutmanager/layoutmanager.cxx index 9560a88f3013..1ed8fe5cd6f9 100644 --- a/framework/source/layoutmanager/layoutmanager.cxx +++ b/framework/source/layoutmanager/layoutmanager.cxx @@ -76,6 +76,7 @@ #include <comphelper/uno3.hxx> #include <rtl/instance.hxx> #include <unotools/cmdoptions.hxx> +#include <unotools/compatibilityviewoptions.hxx> #include <rtl/ref.hxx> #include <rtl/strbuf.hxx> @@ -159,6 +160,14 @@ void LayoutManager::implts_createMenuBar(const OUString& rMenuBarName) { SolarMutexClearableGuard aWriteLock; + // Create a customized menu if compatibility mode is on + SvtCompatibilityViewOptions aCompOptions; + if( aCompOptions.HasMSOCompatibleFormsMenu() && m_aModuleIdentifier == "com.sun.star.text.TextDocument" ) + { + implts_createMSCompatibleMenuBar(rMenuBarName); + } + + // Create the default menubar otherwise if (!m_bInplaceMenuSet && !m_xMenuBar.is()) { m_xMenuBar = implts_createElement( rMenuBarName ); @@ -211,6 +220,8 @@ void LayoutManager::impl_clearUpMenuBar() { implts_lock(); + implts_resetInplaceMenuBar(); + // Clear up VCL menu bar to prepare shutdown if ( m_xContainerWindow.is() ) { @@ -2536,6 +2547,60 @@ bool LayoutManager::implts_resetMenuBar() return false; } +void LayoutManager::implts_createMSCompatibleMenuBar( const OUString& aName ) +{ + SolarMutexClearableGuard aWriteLock; + + // Find Forms menu in the original menubar + m_xMenuBar = implts_createElement( aName ); + uno::Reference< XUIElementSettings > xMenuBarSettings(m_xMenuBar, UNO_QUERY); + uno::Reference< container::XIndexReplace > xMenuIndex(xMenuBarSettings->getSettings(true), UNO_QUERY); + + sal_Int32 nFormsMenu = -1; + for (sal_Int32 nIndex = 0; nIndex < xMenuIndex->getCount(); ++nIndex) + { + uno::Sequence< beans::PropertyValue > aProps; + xMenuIndex->getByIndex( nIndex ) >>= aProps; + OUString aCommand; + for (sal_Int32 nSeqInd = 0; nSeqInd < aProps.getLength(); ++nSeqInd) + { + if (aProps[nSeqInd].Name == "CommandURL") + { + aProps[nSeqInd].Value >>= aCommand; + break; + } + } + + if (aCommand == ".uno:FormatFormMenu") + nFormsMenu = nIndex; + } + assert(nFormsMenu != -1); + + // Create the MS compatible Forms menu + css::uno::Reference< css::ui::XUIElement > xFormsMenu = implts_createElement( "private:resource/menubar/mscompatibleformsmenu" ); + if(!xFormsMenu.is()) + return; + + // Merge the MS compatible Forms menu into the menubar + uno::Reference< XUIElementSettings > xFormsMenuSettings(xFormsMenu, UNO_QUERY); + uno::Reference< container::XIndexAccess > xFormsMenuIndex(xFormsMenuSettings->getSettings(true)); + + assert(xFormsMenuIndex->getCount() >= 1); + uno::Sequence< beans::PropertyValue > aNewFormsMenu; + xFormsMenuIndex->getByIndex( 0 ) >>= aNewFormsMenu; + xMenuIndex->replaceByIndex(nFormsMenu, uno::makeAny(aNewFormsMenu)); + + setMergedMenuBar( xMenuIndex ); + + // Clear up the temporal forms menubar + Reference< XComponent > xFormsMenuComp( xFormsMenu, UNO_QUERY ); + if ( xFormsMenuComp.is() ) + xFormsMenuComp->dispose(); + xFormsMenu.clear(); + + aWriteLock.clear(); +} + IMPL_LINK_NOARG(LayoutManager, MenuBarClose, void*, void) { SolarMutexClearableGuard aReadLock; diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu index 17fba1909d22..eb0dfc04a909 100644 --- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu +++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu @@ -6547,6 +6547,11 @@ <value xml:lang="en-US">Navigate</value> </prop> </node> + <node oor:name=".uno:MSCompatActiveXControls" oor:op="replace"> + <prop oor:name="Label" oor:type="xs:string"> + <value xml:lang="en-US">ActiveX Controls</value> + </prop> + </node> </node> </node> </oor:component-data> diff --git a/sw/UIConfig_swriter.mk b/sw/UIConfig_swriter.mk index caa24da40f0c..2df36e32b49c 100644 --- a/sw/UIConfig_swriter.mk +++ b/sw/UIConfig_swriter.mk @@ -11,6 +11,7 @@ $(eval $(call gb_UIConfig_UIConfig,modules/swriter)) $(eval $(call gb_UIConfig_add_menubarfiles,modules/swriter,\ sw/uiconfig/swriter/menubar/menubar \ + sw/uiconfig/swriter/menubar/mscompatibleformsmenu \ )) $(eval $(call gb_UIConfig_add_popupmenufiles,modules/swriter,\ diff --git a/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml new file mode 100644 index 000000000000..4b8f5ea0e714 --- /dev/null +++ b/sw/uiconfig/swriter/menubar/mscompatibleformsmenu.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * +--> +<menu:menubar xmlns:menu="http://openoffice.org/2001/menu"> + <menu:menu menu:id=".uno:FormatFormMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:SwitchControlDesignMode"/> + <menu:menuitem menu:id=".uno:ControlProperties"/> + <menu:menuseparator/> + <menu:menu menu:id=".uno:MSCompatActiveXControls"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:Label"/> + <menu:menuitem menu:id=".uno:Edit"/> + <menu:menuitem menu:id=".uno:CheckBox"/> + <menu:menuitem menu:id=".uno:RadioButton"/> + <menu:menuitem menu:id=".uno:ListBox"/> + <menu:menuitem menu:id=".uno:Pushbutton"/> + <menu:menuitem menu:id=".uno:DateField"/> + </menu:menupopup> + </menu:menu> + </menu:menupopup> + </menu:menu> +</menu:menubar> _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
