tdf#115131 made a common submenu for toolbars and notebookbars

Also added the submenu in base, maths and draw

Change-Id: I94850c09c08fd3848eabe2597679634f30fbc735
Reviewed-on: https://gerrit.libreoffice.org/49575
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: andreas_kainz <kainz.a@gmail.com>
Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
diff --git a/dbaccess/uiconfig/dbapp/menubar/menubar.xml b/dbaccess/uiconfig/dbapp/menubar/menubar.xml
index d57aa9c..480926d 100644
--- a/dbaccess/uiconfig/dbapp/menubar/menubar.xml
+++ b/dbaccess/uiconfig/dbapp/menubar/menubar.xml
@@ -86,6 +86,7 @@
                </menu:menupopup>
            </menu:menu>
            <menu:menuseparator/>
            <menu:menuitem menu:id=".uno:ToolbarMode"/>
            <menu:menuitem menu:id=".uno:AvailableToolbars"/>
            <menu:menuitem menu:id=".uno:StatusBarVisible"/>
            <menu:menuitem menu:id=".uno:DBPreview"/>
diff --git a/framework/Library_fwl.mk b/framework/Library_fwl.mk
index bb683ab..58e2864 100644
--- a/framework/Library_fwl.mk
+++ b/framework/Library_fwl.mk
@@ -70,7 +70,6 @@
    framework/source/uielement/newmenucontroller \
    framework/source/uielement/toolbarmodemenucontroller \
    framework/source/uielement/toolbarsmenucontroller \
    framework/source/uielement/notebookbarmenucontroller \
))

# vim: set noet sw=4 ts=4:
diff --git a/framework/inc/services.h b/framework/inc/services.h
index 7e1166d..5c780c0 100644
--- a/framework/inc/services.h
+++ b/framework/inc/services.h
@@ -53,7 +53,6 @@
#define IMPLEMENTATIONNAME_NEWMENUCONTROLLER                    "com.sun.star.comp.framework.NewMenuController"
#define IMPLEMENTATIONNAME_TOOLBARMODEMENUCONTROLLER            "com.sun.star.comp.framework.ToolbarModeMenuController"
#define IMPLEMENTATIONNAME_TOOLBARSMENUCONTROLLER               "com.sun.star.comp.framework.ToolBarsMenuController"
#define IMPLEMENTATIONNAME_NOTEBOOKBARMENUCONTROLLER            "com.sun.star.comp.framework.NotebookbarMenuController"
#define IMPLEMENTATIONNAME_HELPONSTARTUP                        "com.sun.star.comp.framework.HelpOnStartup"
#define IMPLEMENTATIONNAME_SHELLJOB                             "com.sun.star.comp.framework.ShellJob"
#define IMPLEMENTATIONNAME_FWK_TASKCREATOR                      "com.sun.star.comp.framework.TaskCreator"
diff --git a/framework/source/register/registertemp.cxx b/framework/source/register/registertemp.cxx
index 80ca3da..c7a6000 100644
--- a/framework/source/register/registertemp.cxx
+++ b/framework/source/register/registertemp.cxx
@@ -64,7 +64,6 @@
                        IFFACTORY( ::framework::DispatchRecorderSupplier                )   else
                        IFFACTORY( ::framework::ToolbarModeMenuController               )   else
                        IFFACTORY( ::framework::ToolbarsMenuController                  )   else
                        IFFACTORY( ::framework::NotebookbarMenuController               )   else
                        IFFACTORY( ::framework::FontMenuController                      )   else
                        IFFACTORY( ::framework::MacrosMenuController                    )   else
                        IFFACTORY( ::framework::NewMenuController                       )   else
diff --git a/framework/source/uielement/notebookbarmenucontroller.cxx b/framework/source/uielement/notebookbarmenucontroller.cxx
deleted file mode 100644
index 60e59c9b..0000000
--- a/framework/source/uielement/notebookbarmenucontroller.cxx
+++ /dev/null
@@ -1,323 +0,0 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * 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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#include <uielement/notebookbarmenucontroller.hxx>

#include <services.h>
#include <framework/sfxhelperfunctions.hxx>

#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/awt/MenuItemStyle.hpp>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/ui/UIElementType.hpp>
#include <officecfg/Office/UI/Notebookbar.hxx>
#include <officecfg/Office/UI/ToolbarMode.hxx>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <com/sun/star/frame/ModuleManager.hpp>

#include <vcl/menu.hxx>
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>
#include <rtl/ustrbuf.hxx>
#include <vcl/window.hxx>
#include <svtools/menuoptions.hxx>
#include <svtools/miscopt.hxx>
#include <unotools/confignode.hxx>

//  Defines

using namespace ::com::sun::star;
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::container;
using namespace ::com::sun::star::ui;

namespace framework
{

DEFINE_XSERVICEINFO_MULTISERVICE_2      (   NotebookbarMenuController                  ,
                                            OWeakObject                             ,
                                            SERVICENAME_POPUPMENUCONTROLLER         ,
                                            IMPLEMENTATIONNAME_NOTEBOOKBARMENUCONTROLLER
                                        )

DEFINE_INIT_SERVICE                     (   NotebookbarMenuController, {} )

NotebookbarMenuController::NotebookbarMenuController( const css::uno::Reference< css::uno::XComponentContext >& xContext ) :
    svt::PopupMenuControllerBase( xContext ),
    m_xContext( xContext )
{
}

NotebookbarMenuController::~NotebookbarMenuController()
{
}

void NotebookbarMenuController::fillPopupMenu( Reference< css::awt::XPopupMenu > const & rPopupMenu )
{
    if ( SvtMiscOptions().DisableUICustomization() )
        return;

    SolarMutexGuard aSolarMutexGuard;
    resetPopupMenu( rPopupMenu );

    const Reference<frame::XModuleManager> xModuleManager  = frame::ModuleManager::create( m_xContext );
    vcl::EnumContext::Application eApp = vcl::EnumContext::GetApplicationEnum(xModuleManager->identify(m_xFrame));

    OUStringBuffer aPath("org.openoffice.Office.UI.Notebookbar/Applications/");
    switch ( eApp )
    {
        case vcl::EnumContext::Application::Writer:
            aPath.append("Writer");
            break;
        case vcl::EnumContext::Application::Calc:
            aPath.append("Calc");
            break;
        case vcl::EnumContext::Application::Impress:
            aPath.append("Impress");
            break;
        default:
            break;
    }
    aPath.append("/Implementations");

    const utl::OConfigurationTreeRoot aImplementationsNode(
                                        m_xContext,
                                        aPath.makeStringAndClear(),
                                        false);
    if ( !aImplementationsNode.isValid() )
        return;

    const Sequence<OUString> aImplNodeNames (aImplementationsNode.getNodeNames());
    const sal_Int32 nCount(aImplNodeNames.getLength());

    for ( sal_Int32 nReadIndex = 0; nReadIndex < nCount; ++nReadIndex )
    {
        const utl::OConfigurationNode aImplNode(aImplementationsNode.openNode(aImplNodeNames[nReadIndex]));
        if ( !aImplNode.isValid() )
            continue;

        OUString aLabel = comphelper::getString( aImplNode.getNodeValue( "Label" ) );
        OUString aFile = comphelper::getString( aImplNode.getNodeValue( "File" ) );
        m_xPopupMenu->insertItem( nReadIndex+1, aLabel, css::awt::MenuItemStyle::RADIOCHECK, m_xPopupMenu->getItemCount() );
        rPopupMenu->setCommand( nReadIndex+1, aFile );
    }
}

// XEventListener
void SAL_CALL NotebookbarMenuController::disposing( const EventObject& )
{
    Reference< css::awt::XMenuListener > xHolder(static_cast<OWeakObject *>(this), UNO_QUERY );

    osl::MutexGuard aLock( m_aMutex );
    m_xFrame.clear();
    m_xDispatch.clear();

    if ( m_xPopupMenu.is() )
        m_xPopupMenu->removeMenuListener( Reference< css::awt::XMenuListener >(static_cast<OWeakObject *>(this), UNO_QUERY ));
    m_xPopupMenu.clear();
}

// XStatusListener
void SAL_CALL NotebookbarMenuController::statusChanged( const FeatureStateEvent& Event )
{
    OUString aFeatureURL( Event.FeatureURL.Complete );

    // All other status events will be processed here
    osl::ClearableMutexGuard aLock( m_aMutex );
    Reference< css::awt::XPopupMenu > xPopupMenu( m_xPopupMenu );
    aLock.clear();

    if ( xPopupMenu.is() )
    {
        SolarMutexGuard aGuard;
        VCLXPopupMenu* pXPopupMenu = static_cast<VCLXPopupMenu *>(VCLXMenu::GetImplementation( xPopupMenu ));
        PopupMenu*     pVCLPopupMenu = pXPopupMenu ? static_cast<PopupMenu *>(pXPopupMenu->GetMenu()) : nullptr;

        SAL_WARN_IF(!pVCLPopupMenu, "fwk.uielement", "worrying lack of popup menu");
        if (!pVCLPopupMenu)
            return;

        bool bSetCheckmark      = false;
        bool bCheckmark         = false;
        for ( sal_uInt16 i = 0; i < pVCLPopupMenu->GetItemCount(); i++ )
        {
            sal_uInt16 nId = pVCLPopupMenu->GetItemId( i );
            if ( nId == 0 )
                continue;

            OUString aCmd = pVCLPopupMenu->GetItemCommand( nId );
            if ( aCmd == aFeatureURL )
            {
                // Enable/disable item
                pVCLPopupMenu->EnableItem( nId, Event.IsEnabled );

                // Checkmark
                if ( Event.State >>= bCheckmark )
                    bSetCheckmark = true;

                if ( bSetCheckmark )
                    pVCLPopupMenu->CheckItem( nId, bCheckmark );
                else
                {
                    OUString aItemText;

                    if ( Event.State >>= aItemText )
                        pVCLPopupMenu->SetItemText( nId, aItemText );
                }
            }
        }
    }
}

// XMenuListener
void SAL_CALL NotebookbarMenuController::itemSelected( const css::awt::MenuEvent& rEvent )
{
    Reference< css::awt::XPopupMenu >   xPopupMenu;
    Reference< XURLTransformer >        xURLTransformer;
    Reference< XFrame >                 xFrame;

    osl::ClearableMutexGuard aLock( m_aMutex );
    xPopupMenu             = m_xPopupMenu;
    xURLTransformer        = m_xURLTransformer;
    xFrame                 = m_xFrame;
    aLock.clear();

    if ( xPopupMenu.is() )
    {
        VCLXPopupMenu* pPopupMenu = static_cast<VCLXPopupMenu *>(VCLXPopupMenu::GetImplementation( xPopupMenu ));
        if ( pPopupMenu )
        {
            SolarMutexGuard aSolarMutexGuard;
            PopupMenu* pVCLPopupMenu = static_cast<PopupMenu *>(pPopupMenu->GetMenu());

            OUString aCmd( pVCLPopupMenu->GetItemCommand( rEvent.MenuId ));
            URL aTargetURL;
            Sequence<PropertyValue> aArgs;

            OUStringBuffer aBuf(".uno:Notebookbar?File:string=");
            aBuf.append( aCmd );
            aTargetURL.Complete = aBuf.makeStringAndClear();

            xURLTransformer->parseStrict( aTargetURL );
            Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY );
            if ( xDispatchProvider.is() )
            {
                Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch(
                                                        aTargetURL, OUString(), 0 );

                ExecuteInfo* pExecuteInfo = new ExecuteInfo;
                pExecuteInfo->xDispatch     = xDispatch;
                pExecuteInfo->aTargetURL    = aTargetURL;
                pExecuteInfo->aArgs         = aArgs;
                Application::PostUserEvent( LINK(nullptr, NotebookbarMenuController, ExecuteHdl_Impl), pExecuteInfo );
            }
        }
    }
}

void SAL_CALL NotebookbarMenuController::itemActivated( const css::awt::MenuEvent& )
{
    OUString aActive;

    const Reference<frame::XModuleManager> xModuleManager  = frame::ModuleManager::create( m_xContext );
    vcl::EnumContext::Application eApp = vcl::EnumContext::GetApplicationEnum(xModuleManager->identify(m_xFrame));

    OUStringBuffer aPath("org.openoffice.Office.UI.ToolbarMode/Applications/");
    switch ( eApp )
    {
        case vcl::EnumContext::Application::Writer:
            aPath.append("Writer");
            aActive = officecfg::Office::UI::Notebookbar::ActiveWriter::get( m_xContext );
            break;
        case vcl::EnumContext::Application::Calc:
            aPath.append("Calc");
            aActive = officecfg::Office::UI::Notebookbar::ActiveCalc::get( m_xContext );
            break;
        case vcl::EnumContext::Application::Impress:
            aPath.append("Impress");
            aActive = officecfg::Office::UI::Notebookbar::ActiveImpress::get( m_xContext );
            break;
        default:
            break;
    }

    const utl::OConfigurationTreeRoot aModesNode(
                                        m_xContext,
                                        aPath.makeStringAndClear(),
                                        false);
    if ( !aModesNode.isValid() )
        return;

    // Entries are enabled only when Notebookbar mode is active
    bool bActive = comphelper::getString( aModesNode.getNodeValue( "Active" ) ) == "Notebookbar";

    for ( int i = 0; i < m_xPopupMenu->getItemCount(); ++i )
    {
        m_xPopupMenu->checkItem( i+1, aActive == m_xPopupMenu->getCommand( i+1 ) );
        m_xPopupMenu->enableItem( i+1, bActive );
    }
}

// XPopupMenuController
void SAL_CALL NotebookbarMenuController::setPopupMenu( const Reference< css::awt::XPopupMenu >& xPopupMenu )
{
    osl::MutexGuard aLock( m_aMutex );

    throwIfDisposed();

    if ( m_xFrame.is() && !m_xPopupMenu.is() )
    {
        // Create popup menu on demand
        SolarMutexGuard aSolarMutexGuard;

        m_xPopupMenu = xPopupMenu;
        m_xPopupMenu->addMenuListener( Reference< css::awt::XMenuListener >( static_cast<OWeakObject*>(this), UNO_QUERY ));
        fillPopupMenu( m_xPopupMenu );
    }
}

IMPL_STATIC_LINK( NotebookbarMenuController, ExecuteHdl_Impl, void*, p, void )
{
    ExecuteInfo* pExecuteInfo = static_cast<ExecuteInfo*>(p);
    try
    {
        // Asynchronous execution as this can lead to our own destruction!
        // Framework can recycle our current frame and the layout manager disposes all user interface
        // elements if a component gets detached from its frame!
        if ( pExecuteInfo->xDispatch.is() )
        {
            pExecuteInfo->xDispatch->dispatch( pExecuteInfo->aTargetURL, pExecuteInfo->aArgs );
        }
    }
    catch ( const Exception& )
    {
    }

    delete pExecuteInfo;
}

}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/framework/source/uielement/toolbarmodemenucontroller.cxx b/framework/source/uielement/toolbarmodemenucontroller.cxx
index 300d386..ff8c059 100644
--- a/framework/source/uielement/toolbarmodemenucontroller.cxx
+++ b/framework/source/uielement/toolbarmodemenucontroller.cxx
@@ -18,7 +18,6 @@
 */

#include <uielement/toolbarmodemenucontroller.hxx>

#include <services.h>
#include <framework/sfxhelperfunctions.hxx>

@@ -101,6 +100,12 @@
        case vcl::EnumContext::Application::Draw:
            aPath.append("Draw");
            break;
        case vcl::EnumContext::Application::Formula:
            aPath.append("Formula");
            break;
        case vcl::EnumContext::Application::Base:
            aPath.append("Base");
            break;
        default:
            break;
    }
@@ -116,6 +121,7 @@
    const Sequence<OUString> aModeNodeNames (aModesNode.getNodeNames());
    const sal_Int32 nCount(aModeNodeNames.getLength());
    SvtMiscOptions aMiscOptions;
    long nCountToolbar = 0;

    for ( sal_Int32 nReadIndex = 0; nReadIndex < nCount; ++nReadIndex )
    {
@@ -131,10 +137,13 @@
        // Allow Notebookbar only in experimental mode
        if ( isExperimental && !aMiscOptions.IsExperimentalMode() )
            continue;
        if ( !isExperimental )
            nCountToolbar++;

        m_xPopupMenu->insertItem( nReadIndex+1, aLabel, css::awt::MenuItemStyle::RADIOCHECK, nPosition );
        rPopupMenu->setCommand( nReadIndex+1, aCommandArg );
    }
    rPopupMenu->insertSeparator(nCountToolbar);
}

// XEventListener
@@ -223,8 +232,30 @@
        {
            SolarMutexGuard aSolarMutexGuard;
            PopupMenu* pVCLPopupMenu = static_cast<PopupMenu *>(pPopupMenu->GetMenu());

            OUString aCmd( pVCLPopupMenu->GetItemCommand( rEvent.MenuId ));

            {
                OUStringBuffer aBuf(".uno:Notebookbar?File:string=");
                aBuf.append( aCmd );
                URL aTargetURL;
                Sequence<PropertyValue> aArgs;

                aTargetURL.Complete = aBuf.makeStringAndClear();
                xURLTransformer->parseStrict( aTargetURL );
                Reference< XDispatchProvider > xDispatchProvider( m_xFrame, UNO_QUERY );
                if ( xDispatchProvider.is() )
                {
                    Reference< XDispatch > xDispatch = xDispatchProvider->queryDispatch(
                                                        aTargetURL, OUString(), 0 );

                    ExecuteInfo* pExecuteInfo = new ExecuteInfo;
                    pExecuteInfo->xDispatch     = xDispatch;
                    pExecuteInfo->aTargetURL    = aTargetURL;
                    pExecuteInfo->aArgs         = aArgs;
                    Application::PostUserEvent( LINK(nullptr,ToolbarModeMenuController, ExecuteHdl_Impl), pExecuteInfo );
                }
            }

            OUStringBuffer aBuf(".uno:ToolbarMode?Mode:string=");
            aBuf.append( aCmd );
            URL aTargetURL;
@@ -268,6 +299,12 @@
        case vcl::EnumContext::Application::Draw:
            aPath.append("Draw");
            break;
        case vcl::EnumContext::Application::Formula:
            aPath.append("Formula");
            break;
        case vcl::EnumContext::Application::Base:
            aPath.append("Base");
            break;
        default:
            break;
    }
diff --git a/framework/util/fwl.component b/framework/util/fwl.component
index b7a56dc..75e10b9 100644
--- a/framework/util/fwl.component
+++ b/framework/util/fwl.component
@@ -67,9 +67,6 @@
  <implementation name="com.sun.star.comp.framework.ToolBarsMenuController">
    <service name="com.sun.star.frame.PopupMenuController"/>
  </implementation>
  <implementation name="com.sun.star.comp.framework.NotebookbarMenuController">
    <service name="com.sun.star.frame.PopupMenuController"/>
  </implementation>
  <implementation name="com.sun.star.comp.framework.UriAbbreviation">
    <service name="com.sun.star.util.UriAbbreviation"/>
  </implementation>
diff --git a/include/vcl/EnumContext.hxx b/include/vcl/EnumContext.hxx
index f96265c..fb64302 100644
--- a/include/vcl/EnumContext.hxx
+++ b/include/vcl/EnumContext.hxx
@@ -43,6 +43,8 @@
        Chart,
        Draw,
        Impress,
        Formula,
        Base,

        // For your convenience to avoid duplicate code in the common
        // case that Draw and Impress use identical context configurations.
diff --git a/officecfg/Configuration_officecfg.mk b/officecfg/Configuration_officecfg.mk
index aea750c..20c7e0a 100644
--- a/officecfg/Configuration_officecfg.mk
+++ b/officecfg/Configuration_officecfg.mk
@@ -164,7 +164,6 @@
	org/openoffice/Office/UI/DrawWindowState.xcu \
	org/openoffice/Office/UI/ImpressWindowState.xcu \
	org/openoffice/Office/UI/MathWindowState.xcu \
	org/openoffice/Office/UI/Notebookbar.xcu \
	org/openoffice/Office/UI/ReportCommands.xcu \
	org/openoffice/Office/UI/Sidebar.xcu \
	org/openoffice/Office/UI/StartModuleWindowState.xcu \
diff --git a/officecfg/files.mk b/officecfg/files.mk
index 1e364ad..3d3a507 100644
--- a/officecfg/files.mk
+++ b/officecfg/files.mk
@@ -79,7 +79,6 @@
    Office/UI/ImpressWindowState \
    Office/UI/MathCommands \
    Office/UI/MathWindowState \
    Office/UI/Notebookbar \
    Office/UI/ReportCommands \
    Office/UI/Sidebar \
    Office/UI/StartModuleCommands \
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index 12d7ccd3d..9f82a29 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -355,7 +355,7 @@
          <value/>
        </prop>
        <prop oor:name="Controller">
          <value>com.sun.star.comp.framework.NotebookbarMenuController</value>
          <value>com.sun.star.comp.framework.ToolbarModeMenuController</value>
        </prop>
      </node>
      <node oor:name="c30" oor:op="replace">
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
index c55e868..74215c1 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
@@ -5937,7 +5937,7 @@
      </node>
      <node oor:name=".uno:ToolbarMode" oor:op="replace">
        <prop oor:name="Label" oor:type="xs:string">
          <value xml:lang="en-US">Toolbar ~Layout</value>
          <value xml:lang="en-US">User ~Interface</value>
        </prop>
      </node>
      <node oor:name=".uno:AvailableToolbars" oor:op="replace">
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Notebookbar.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Notebookbar.xcu
deleted file mode 100644
index 4ca9a78..0000000
--- a/officecfg/registry/data/org/openoffice/Office/UI/Notebookbar.xcu
+++ /dev/null
@@ -1,181 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE oor:component-data SYSTEM "../../../../../component-update.dtd">
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:install="http://openoffice.org/2004/installation" oor:name="Notebookbar" oor:package="org.openoffice.Office.UI">
  <prop oor:name="ActiveWriter">
    <value>notebookbar.ui</value>
  </prop>
  <prop oor:name="ActiveCalc">
    <value>notebookbar.ui</value>
  </prop>
  <prop oor:name="ActiveImpress">
    <value>notebookbar.ui</value>
  </prop>
  <node oor:name="Applications">
    <node oor:name="Writer" oor:op="replace">
      <node oor:name="Implementations">
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="TabbedCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed Compact</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_compact.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Full</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="Groups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="Single" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Contextual single</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_single.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
      </node>
    </node>
    <node oor:name="Calc" oor:op="replace">
      <node oor:name="Implementations">
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Full</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="Groups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
      </node>
    </node>
    <node oor:name="Impress" oor:op="replace">
      <node oor:name="Implementations">
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="Groups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Full</value>
          </prop>
          <prop oor:name="File">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>false</value>
          </prop>
        </node>
      </node>
    </node>
  </node>
</oor:component-data>
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/ToolbarMode.xcu b/officecfg/registry/data/org/openoffice/Office/UI/ToolbarMode.xcu
index 4ee4b4f..64959d5 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/ToolbarMode.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/ToolbarMode.xcu
@@ -1,6 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE oor:component-data SYSTEM "../../../../../component-update.dtd">
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:install="http://openoffice.org/2004/installation" oor:name="ToolbarMode" oor:package="org.openoffice.Office.UI">
  <prop oor:name="ActiveWriter">
    <value>notebookbar.ui</value>
  </prop>
  <prop oor:name="ActiveCalc">
    <value>notebookbar.ui</value>
  </prop>
  <prop oor:name="ActiveImpress">
    <value>notebookbar.ui</value>
  </prop>
  <node oor:name="Applications">
    <node oor:name="Writer" oor:op="replace">
      <prop oor:name="Active">
@@ -9,7 +18,7 @@
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Default</value>
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
@@ -86,9 +95,9 @@
            <value>Opened</value>
          </prop>
        </node>
        <node oor:name="Notebookbar" oor:op="replace">
        <node oor:name="ContextualGroups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Notebookbar</value>
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
@@ -100,7 +109,153 @@
            <value>3</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Notebookbar</value>
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="ContextualSingle" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Contextual Single</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>4</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_single.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>5</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="TabbedCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed Compact</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>6</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_compact.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>8</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>7</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
@@ -123,7 +278,7 @@
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Default</value>
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
@@ -200,9 +355,9 @@
            <value>Opened</value>
          </prop>
        </node>
        <node oor:name="Notebookbar" oor:op="replace">
        <node oor:name="ContextualGroups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Notebookbar</value>
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
@@ -214,7 +369,94 @@
            <value>3</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Notebookbar</value>
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>4</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>6</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>5</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
@@ -237,7 +479,7 @@
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Default</value>
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
@@ -289,9 +531,40 @@
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="Notebookbar" oor:op="replace">
        <node oor:name="ContextualGroups" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Notebookbar</value>
            <value xml:lang="en-US">Contextual groups</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>2</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groups.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
          <prop oor:name="HasMenubar">
            <value>true</value>
          </prop>
        </node>
        <node oor:name="Tabbed" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Tabbed</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
@@ -303,7 +576,7 @@
            <value>3</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Notebookbar</value>
            <value>notebookbar.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
@@ -317,6 +590,161 @@
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarCompact" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar Compact</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>5</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_compact.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
        <node oor:name="GroupedbarFull" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Groupedbar</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>true</value>
          </prop>
          <prop oor:name="IsExperimental">
            <value>true</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>4</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>notebookbar_groupedbar_full.ui</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
      </node>
    </node>
    <node oor:name="Draw" oor:op="replace">
      <prop oor:name="Active">
        <value>Default</value>
      </prop>
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>0</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>false</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
              <it>private:resource/toolbar/standardbar</it>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
      </node>
    </node>
    <node oor:name="Formula" oor:op="replace">
      <prop oor:name="Active">
        <value>Default</value>
      </prop>
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>0</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value>false</value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
              <it>private:resource/toolbar/standardbar</it>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
      </node>
    </node>
    <node oor:name="Base" oor:op="replace">
      <prop oor:name="Active">
        <value>Default</value>
      </prop>
      <node oor:name="Modes">
        <node oor:name="Default" oor:op="replace">
          <prop oor:name="Label">
            <value xml:lang="en-US">Standard Toolbar</value>
          </prop>
          <prop oor:name="CommandArg">
            <value>Default</value>
          </prop>
          <prop oor:name="MenuPosition">
            <value>0</value>
          </prop>
          <prop oor:name="HasNotebookbar">
            <value> false </value>
          </prop>
          <prop oor:name="Toolbars">
            <value>
              <it>private:resource/toolbar/standardbar</it>
            </value>
          </prop>
          <prop oor:name="UserToolbars">
            <value>
            </value>
          </prop>
          <prop oor:name="Sidebar">
            <value>Arrow</value>
          </prop>
        </node>
      </node>
    </node>
  </node>
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/Notebookbar.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/Notebookbar.xcs
deleted file mode 100644
index 658df99..0000000
--- a/officecfg/registry/schema/org/openoffice/Office/UI/Notebookbar.xcs
+++ /dev/null
@@ -1,78 +0,0 @@
<?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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 -->
<!DOCTYPE oor:component-schema SYSTEM "../../../../../component-schema.dtd">
<oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Notebookbar" oor:package="org.openoffice.Office.UI" xml:lang="en-US">
  <info>
    <desc>Contains information about Notebookbar.</desc>
  </info>
  <templates>
    <group oor:name="Implementation">
      <info>
        <desc>The implementation description container.</desc>
      </info>
      <prop oor:name="Label" oor:type="xs:string" oor:nillable="false" oor:localized="true">
        <info>
          <desc>The implementation name.</desc>
       </info>
      </prop>
      <prop oor:name="File" oor:type="xs:string" oor:nillable="false">
        <info>
          <desc>The .ui file name.</desc>
        </info>
      </prop>
      <prop oor:name="HasMenubar" oor:type="xs:boolean" oor:nillable="false">
        <info>
          <desc>Determines if menubar is visible.</desc>
        </info>
      </prop>
    </group>
    <group oor:name="Application">
      <info>
        <desc>Describes notebookbar settings for one application.</desc>
      </info>
      <set oor:name="Implementations" oor:node-type="Implementation">
        <info>
          <desc>List of implementations.</desc>
        </info>
      </set>
    </group>
  </templates>
  <component>
    <prop oor:name="ActiveWriter" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Writer module.</desc>
      </info>
    </prop>
    <prop oor:name="ActiveCalc" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Calc module.</desc>
      </info>
    </prop>
    <prop oor:name="ActiveImpress" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Impress module.</desc>
      </info>
    </prop>
    <set oor:name="Applications" oor:node-type="Application">
      <info>
        <desc>List of implementations.</desc>
      </info>
    </set>
  </component>
</oor:component-schema>
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/ToolbarMode.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/ToolbarMode.xcs
index 5d0f418..d641e80 100644
--- a/officecfg/registry/schema/org/openoffice/Office/UI/ToolbarMode.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/UI/ToolbarMode.xcs
@@ -74,6 +74,12 @@
          </desc>
        </info>
      </prop>
      <prop oor:name="HasMenubar" oor:type="xs:boolean" oor:nillable="false">
        <info>
          <desc>Determines if menubar is visible.</desc>
        </info>
        <value>false</value>
      </prop>
    </group>
    <group oor:name="Application">
      <info>
@@ -92,6 +98,21 @@
    </group>
  </templates>
  <component>
    <prop oor:name="ActiveWriter" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Writer module.</desc>
      </info>
    </prop>
    <prop oor:name="ActiveCalc" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Calc module.</desc>
      </info>
    </prop>
    <prop oor:name="ActiveImpress" oor:type="xs:string" oor:nillable="false">
      <info>
        <desc>Contains name of currently used implementation in the Impress module.</desc>
      </info>
    </prop>
    <set oor:name="Applications" oor:node-type="Application">
      <info>
        <desc>Contains list of toolbar mode settings for each application.</desc>
diff --git a/postprocess/CustomTarget_registry.mk b/postprocess/CustomTarget_registry.mk
index 177558a..f89b0b0 100644
--- a/postprocess/CustomTarget_registry.mk
+++ b/postprocess/CustomTarget_registry.mk
@@ -182,7 +182,6 @@
	$(postprocess_XCS)/Office/UI/GenericCategories.xcs \
	$(postprocess_XCS)/Office/UI/GenericCommands.xcs \
	$(postprocess_XCS)/Office/UI/GlobalSettings.xcs \
	$(postprocess_XCS)/Office/UI/Notebookbar.xcs \
	$(postprocess_XCS)/Office/UI/Sidebar.xcs \
	$(postprocess_XCS)/Office/UI/StartModuleCommands.xcs \
	$(postprocess_XCS)/Office/UI/StartModuleWindowState.xcs \
@@ -247,7 +246,6 @@
	$(postprocess_XCU)/Office/UI/Factories.xcu \
	$(postprocess_XCU)/Office/UI/GenericCategories.xcu \
	$(postprocess_XCU)/Office/UI/GenericCommands.xcu \
	$(postprocess_XCU)/Office/UI/Notebookbar.xcu \
	$(postprocess_XCU)/Office/UI/Sidebar.xcu \
	$(postprocess_XCU)/Office/UI/StartModuleWindowState.xcu \
	$(postprocess_XCU)/Office/UI/ToolbarMode.xcu \
diff --git a/sc/uiconfig/scalc/menubar/menubar.xml b/sc/uiconfig/scalc/menubar/menubar.xml
index b9a909c2..2c3b1d2 100644
--- a/sc/uiconfig/scalc/menubar/menubar.xml
+++ b/sc/uiconfig/scalc/menubar/menubar.xml
@@ -143,7 +143,6 @@
            <menu:menuseparator/>
            <menu:menuitem menu:id=".uno:ToolbarMode"/>
            <menu:menuitem menu:id=".uno:AvailableToolbars"/>
            <menu:menuitem menu:id=".uno:Notebookbar"/>
            <menu:menuitem menu:id=".uno:InputLineVisible"/>
            <menu:menuitem menu:id=".uno:StatusBarVisible"/>
            <menu:menuitem menu:id=".uno:ShowImeStatusWindow"/>
diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml
index a087af9..f72ab87 100644
--- a/sd/uiconfig/sdraw/menubar/menubar.xml
+++ b/sd/uiconfig/sdraw/menubar/menubar.xml
@@ -102,6 +102,7 @@
      <menu:menuitem menu:id=".uno:PageMode" menu:style="radio"/>
      <menu:menuitem menu:id=".uno:MasterPage" menu:style="radio"/>
      <menu:menuseparator/>
      <menu:menuitem menu:id=".uno:ToolbarMode"/>
      <menu:menuitem menu:id=".uno:AvailableToolbars"/>
      <menu:menuitem menu:id=".uno:StatusBarVisible"/>
      <menu:menuitem menu:id=".uno:ShowRuler"/>
diff --git a/sd/uiconfig/simpress/menubar/menubar.xml b/sd/uiconfig/simpress/menubar/menubar.xml
index d1e1c34..227045f 100644
--- a/sd/uiconfig/simpress/menubar/menubar.xml
+++ b/sd/uiconfig/simpress/menubar/menubar.xml
@@ -114,7 +114,6 @@
            <menu:menuseparator/>
            <menu:menuitem menu:id=".uno:ToolbarMode"/>
            <menu:menuitem menu:id=".uno:AvailableToolbars"/>
            <menu:menuitem menu:id=".uno:Notebookbar"/>
            <menu:menuitem menu:id=".uno:StatusBarVisible"/>
            <menu:menuitem menu:id=".uno:ShowRuler"/>
            <menu:menuitem menu:id=".uno:LeftPaneImpress"/>
diff --git a/sfx2/source/appl/appserv.cxx b/sfx2/source/appl/appserv.cxx
index d73bc3a..4bdb5ed 100644
--- a/sfx2/source/appl/appserv.cxx
+++ b/sfx2/source/appl/appserv.cxx
@@ -165,6 +165,12 @@
            case vcl::EnumContext::Application::Draw:
                return OUString( "Draw" );
                break;
            case vcl::EnumContext::Application::Formula:
                return OUString( "Formula" );
                break;
            case vcl::EnumContext::Application::Base:
                return OUString( "Base" );
                break;
            default:
                return OUString();
                break;
diff --git a/sfx2/source/notebookbar/SfxNotebookBar.cxx b/sfx2/source/notebookbar/SfxNotebookBar.cxx
index 450c3c1..a341bf3 100644
--- a/sfx2/source/notebookbar/SfxNotebookBar.cxx
+++ b/sfx2/source/notebookbar/SfxNotebookBar.cxx
@@ -22,7 +22,7 @@
#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp>
#include <com/sun/star/util/URLTransformer.hpp>
#include <com/sun/star/frame/XLayoutManager.hpp>
#include <officecfg/Office/UI/Notebookbar.hxx>
#include <officecfg/Office/UI/ToolbarMode.hxx>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <com/sun/star/frame/ModuleManager.hpp>
#include <unotools/confignode.hxx>
@@ -82,13 +82,13 @@
    switch ( eApp )
    {
        case vcl::EnumContext::Application::Writer:
            officecfg::Office::UI::Notebookbar::ActiveWriter::set( sFileName, aBatch );
            officecfg::Office::UI::ToolbarMode::ActiveWriter::set( sFileName, aBatch );
            break;
        case vcl::EnumContext::Application::Calc:
            officecfg::Office::UI::Notebookbar::ActiveCalc::set( sFileName, aBatch );
            officecfg::Office::UI::ToolbarMode::ActiveCalc::set( sFileName, aBatch );
            break;
        case vcl::EnumContext::Application::Impress:
            officecfg::Office::UI::Notebookbar::ActiveImpress::set( sFileName, aBatch );
            officecfg::Office::UI::ToolbarMode::ActiveImpress::set( sFileName, aBatch );
            break;
        default:
            break;
@@ -101,13 +101,13 @@
    switch ( eApp )
    {
        case vcl::EnumContext::Application::Writer:
            return officecfg::Office::UI::Notebookbar::ActiveWriter::get();
            return officecfg::Office::UI::ToolbarMode::ActiveWriter::get();
            break;
        case vcl::EnumContext::Application::Calc:
            return officecfg::Office::UI::Notebookbar::ActiveCalc::get();
            return officecfg::Office::UI::ToolbarMode::ActiveCalc::get();
            break;
        case vcl::EnumContext::Application::Impress:
            return officecfg::Office::UI::Notebookbar::ActiveImpress::get();
            return officecfg::Office::UI::ToolbarMode::ActiveImpress::get();
            break;
        default:
            break;
@@ -118,7 +118,7 @@
static utl::OConfigurationTreeRoot lcl_getCurrentImplConfigRoot()
{
    return utl::OConfigurationTreeRoot(::comphelper::getProcessComponentContext(),
                                       "org.openoffice.Office.UI.Notebookbar/",
                                       "org.openoffice.Office.UI.ToolbarMode/",
                                       true);
}

@@ -133,7 +133,7 @@
    vcl::EnumContext::Application eApp = vcl::EnumContext::GetApplicationEnum( xModuleManager->identify( xFrame ) );
    OUString aActive = lcl_getNotebookbarFileName( eApp );

    const utl::OConfigurationNode aImplsNode = rNotebookbarNode.openNode("Applications/" + lcl_getAppName( eApp) + "/Implementations");
    const utl::OConfigurationNode aImplsNode = rNotebookbarNode.openNode("Applications/" + lcl_getAppName( eApp) + "/Modes");
    const Sequence<OUString> aModeNodeNames( aImplsNode.getNodeNames() );
    const sal_Int32 nCount( aModeNodeNames.getLength() );

@@ -143,7 +143,7 @@
        if ( !aImplNode.isValid() )
            continue;

        OUString aCommandArg = comphelper::getString( aImplNode.getNodeValue( "File" ) );
        OUString aCommandArg = comphelper::getString( aImplNode.getNodeValue( "CommandArg" ) );

        if ( aCommandArg == aActive )
        {
diff --git a/solenv/clang-format/blacklist b/solenv/clang-format/blacklist
index 407db28..50e828b 100644
--- a/solenv/clang-format/blacklist
+++ b/solenv/clang-format/blacklist
@@ -5282,7 +5282,6 @@
framework/inc/uielement/menubarmerger.hxx
framework/inc/uielement/menubarwrapper.hxx
framework/inc/uielement/newmenucontroller.hxx
framework/inc/uielement/notebookbarmenucontroller.hxx
framework/inc/uielement/progressbarwrapper.hxx
framework/inc/uielement/rootitemcontainer.hxx
framework/inc/uielement/spinfieldtoolbarcontroller.hxx
@@ -5478,7 +5477,6 @@
framework/source/uielement/menubarmerger.cxx
framework/source/uielement/menubarwrapper.cxx
framework/source/uielement/newmenucontroller.cxx
framework/source/uielement/notebookbarmenucontroller.cxx
framework/source/uielement/objectmenucontroller.cxx
framework/source/uielement/popuptoolbarcontroller.cxx
framework/source/uielement/progressbarwrapper.cxx
diff --git a/starmath/uiconfig/smath/menubar/menubar.xml b/starmath/uiconfig/smath/menubar/menubar.xml
index 9367961..d88de25 100644
--- a/starmath/uiconfig/smath/menubar/menubar.xml
+++ b/starmath/uiconfig/smath/menubar/menubar.xml
@@ -77,6 +77,7 @@
      <menu:menuitem menu:id=".uno:Draw"/>
      <menu:menuitem menu:id=".uno:RedrawAutomatic"/>
      <menu:menuseparator/>
      <menu:menuitem menu:id=".uno:ToolbarMode"/>
      <menu:menuitem menu:id=".uno:AvailableToolbars"/>
      <menu:menuitem menu:id=".uno:StatusBarVisible"/>
      <menu:menuitem menu:id=".uno:ShowImeStatusWindow"/>
diff --git a/sw/uiconfig/sglobal/menubar/menubar.xml b/sw/uiconfig/sglobal/menubar/menubar.xml
index ab133da..9d52c03 100644
--- a/sw/uiconfig/sglobal/menubar/menubar.xml
+++ b/sw/uiconfig/sglobal/menubar/menubar.xml
@@ -170,7 +170,6 @@
      <menu:menuseparator/>
      <menu:menuitem menu:id=".uno:ToolbarMode"/>
      <menu:menuitem menu:id=".uno:AvailableToolbars"/>
      <menu:menuitem menu:id=".uno:Notebookbar"/>
      <menu:menuitem menu:id=".uno:StatusBarVisible"/>
      <menu:menu menu:id=".uno:RulerMenu">
        <menu:menupopup>
diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index cfcc9cd..2f35c43 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -170,7 +170,6 @@
      <menu:menuseparator/>
      <menu:menuitem menu:id=".uno:ToolbarMode"/>
      <menu:menuitem menu:id=".uno:AvailableToolbars"/>
      <menu:menuitem menu:id=".uno:Notebookbar"/>
      <menu:menuitem menu:id=".uno:StatusBarVisible"/>
      <menu:menu menu:id=".uno:RulerMenu">
        <menu:menupopup>
diff --git a/vcl/source/window/EnumContext.cxx b/vcl/source/window/EnumContext.cxx
index 3e34314..e6a1543 100644
--- a/vcl/source/window/EnumContext.cxx
+++ b/vcl/source/window/EnumContext.cxx
@@ -124,7 +124,8 @@
    AddEntry("com.sun.star.chart2.ChartDocument", EnumContext::Application::Chart);
    AddEntry("com.sun.star.drawing.DrawingDocument", EnumContext::Application::Draw);
    AddEntry("com.sun.star.presentation.PresentationDocument", EnumContext::Application::Impress);

    AddEntry("com.sun.star.formula.FormulaProperties", EnumContext::Application::Formula);
    AddEntry("com.sun.star.sdb.OfficeDatabaseDocument", EnumContext::Application::Base);
    AddEntry("any", EnumContext::Application::Any);
    AddEntry("none", EnumContext::Application::NONE);