summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorTamás Zolnai <tamas.zolnai@collabora.com>2019-02-15 18:37:40 +0100
committerAndras Timar <andras.timar@collabora.com>2019-02-17 11:03:21 +0100
commit1b70f748224a7e24d9368449db0be19d6e593e66 (patch)
treee65d37e80b8bce6efeeec72cd0c51ccf5cd1ad33 /framework
parent1195bca0342647ae974ed5a1db2b41c5eddf1d4a (diff)
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 <tamas.zolnai@collabora.com> (cherry picked from commit dc3a2546bd0ad0afe20cba9940934405174fd593) Change-Id: I459f489c15ea7a25514f379b1800b926cc2087ce Reviewed-on: https://gerrit.libreoffice.org/67920 Reviewed-by: Andras Timar <andras.timar@collabora.com> Tested-by: Andras Timar <andras.timar@collabora.com>
Diffstat (limited to 'framework')
-rw-r--r--framework/inc/services/layoutmanager.hxx1
-rw-r--r--framework/source/layoutmanager/layoutmanager.cxx65
2 files changed, 66 insertions, 0 deletions
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;