tdf#114260: Add gear button to Customize dialog

  * Allow renaming custom toolbars, custom menus, and standard sub-menus.
  * Move plus and minus buttons into the gear button

Change-Id: Id856da2498412b52e44b5623c4a5b9a3ed439fe3
Reviewed-on: https://gerrit.libreoffice.org/50553
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Muhammet Kara <muhammet.kara@pardus.org.tr>
Tested-by: Muhammet Kara <muhammet.kara@pardus.org.tr>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt@cib.de>
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index 882c578..1737744 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -117,10 +117,8 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe
    m_pContentsListBox->SetSelectHdl(
        LINK( this, SvxMenuConfigPage, SelectMenuEntry ) );

    m_pPlusBtn->SetClickHdl(
        LINK( this, SvxMenuConfigPage, AddMenuHdl ) );
    m_pMinusBtn->SetClickHdl(
        LINK( this, SvxMenuConfigPage, RemoveMenuHdl ) );
    m_pGearBtn->SetSelectHdl(
        LINK( this, SvxMenuConfigPage, GearHdl ) );

    m_pCommandCategoryListBox->SetSelectHdl(
        LINK( this, SvxMenuConfigPage, SelectCategory ) );
@@ -147,18 +145,9 @@ SvxMenuConfigPage::SvxMenuConfigPage(vcl::Window *pParent, const SfxItemSet& rSe

    if ( !bIsMenuBar )
    {
        // Context menus cannot be added/removed
        // These height requests are needed to keep the height of
        // the top level list boxes consistent for all tabs
        m_pTopLevelListBox->set_height_request(
            m_pPlusBtn->GetOptimalSize().Height() );
        m_pCommandCategoryListBox->set_height_request(
            m_pPlusBtn->GetOptimalSize().Height() );

        m_pPlusBtn->Disable();
        m_pMinusBtn->Disable();
        m_pPlusBtn->Hide();
        m_pMinusBtn->Hide();
        //TODO: Remove this when the gear button is implemented for context menus
        m_pGearBtn->Disable();
        m_pGearBtn->Hide();
    }
    else
    {
@@ -225,6 +214,16 @@ void SvxMenuConfigPage::UpdateButtonStates()
    m_pRemoveCommandButton->Enable( bIsValidSelection );

    m_pModifyBtn->Enable( bIsValidSelection && !bIsSeparator);

    //Handle the gear button
    if (m_bIsMenuBar)
    {
        SvxConfigEntry* pMenuData = GetTopLevelSelection();
        PopupMenu* pGearPopup = m_pGearBtn->GetPopupMenu();
        // Add option (gear_add) will always be enabled
        pGearPopup->EnableItem( "gear_delete", pMenuData->IsDeletable() );
        pGearPopup->EnableItem( "gear_rename", pMenuData->IsRenamable() );
    }
}

void SvxMenuConfigPage::DeleteSelectedTopLevel()
@@ -298,9 +297,6 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void )

    if ( pMenuData )
    {
        // Built-in menus cannot be deleted
        m_pMinusBtn->Enable( pMenuData->IsDeletable() );

        SvxEntries* pEntries = pMenuData->GetEntries();

        for (auto const& entry : *pEntries)
@@ -312,22 +308,59 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, SelectMenu, ListBox&, void )
    UpdateButtonStates();
}

IMPL_LINK_NOARG( SvxMenuConfigPage, AddMenuHdl, Button *, void )
IMPL_LINK( SvxMenuConfigPage, GearHdl, MenuButton *, pButton, void )
{
    VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
        nullptr, GetSaveInData()->GetEntries(), nullptr, true );
    OString sIdent = pButton->GetCurItemIdent();

    if ( pDialog->Execute() == RET_OK )
    if (sIdent == "gear_add")
    {
        GetSaveInData()->SetEntries( pDialog->GetEntries() );
        ReloadTopLevelListBox( pDialog->GetSelectedEntry() );
        GetSaveInData()->SetModified();
    }
}
        VclPtrInstance<SvxMainMenuOrganizerDialog> pDialog(
            nullptr, GetSaveInData()->GetEntries(), nullptr, true );

IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveMenuHdl, Button *, void )
{
    DeleteSelectedTopLevel();
        if ( pDialog->Execute() == RET_OK )
        {
            GetSaveInData()->SetEntries( pDialog->GetEntries() );
            ReloadTopLevelListBox( pDialog->GetSelectedEntry() );
            GetSaveInData()->SetModified();
        }
    }
    else if (sIdent == "gear_delete")
    {
        DeleteSelectedTopLevel();
    }
    else if (sIdent == "gear_rename")
    {
        SvxConfigEntry* pMenuData = GetTopLevelSelection();

        OUString sCurrentName( SvxConfigPageHelper::stripHotKey( pMenuData->GetName() ) );
        OUString sDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );

        SvxNameDialog aNameDialog( GetFrameWeld(), sCurrentName, sDesc );
        aNameDialog.set_help_id( HID_SVX_CONFIG_RENAME_MENU );
        aNameDialog.set_title( CuiResId( RID_SVXSTR_RENAME_MENU ) );

        if ( aNameDialog.run() == RET_OK )
        {
            OUString sNewName = aNameDialog.GetName();

            if ( sCurrentName == sNewName )
                return;

            pMenuData->SetName( sNewName );

            ReloadTopLevelListBox();

            GetSaveInData()->SetModified();
        }
    }
    else
    {
        //This block should never be reached
        SAL_WARN("cui.customize", "Unknown gear menu option: " << sIdent);
        return;
    }

    UpdateButtonStates();
}

IMPL_LINK_NOARG( SvxMenuConfigPage, SelectCategory, ListBox&, void )
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index f8a530c..5354265 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -126,10 +126,8 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(vcl::Window *pParent, const SfxItemSe
    m_pCommandCategoryListBox->SetSelectHdl(
        LINK( this, SvxToolbarConfigPage, SelectCategory ) );

    m_pPlusBtn->SetClickHdl(
        LINK( this, SvxToolbarConfigPage, AddToolbarHdl ) );
    m_pMinusBtn->SetClickHdl(
        LINK( this, SvxToolbarConfigPage, RemoveToolbarHdl ) );
    m_pGearBtn->SetSelectHdl(
        LINK( this, SvxToolbarConfigPage, GearHdl ) );

    m_pMoveUpButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
    m_pMoveDownButton->SetClickHdl ( LINK( this, SvxToolbarConfigPage, MoveHdl) );
@@ -334,77 +332,119 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbarEntry, SvTreeListBox *, void
    UpdateButtonStates();
}

IMPL_LINK_NOARG( SvxToolbarConfigPage, AddToolbarHdl, Button *, void )
IMPL_LINK( SvxToolbarConfigPage, GearHdl, MenuButton *, pButton, void )
{
    OUString prefix = CuiResId( RID_SVXSTR_NEW_TOOLBAR );
    OString sIdent = pButton->GetCurItemIdent();

    OUString aNewName =
        SvxConfigPageHelper::generateCustomName( prefix, GetSaveInData()->GetEntries() );

    OUString aNewURL =
        SvxConfigPageHelper::generateCustomURL( GetSaveInData()->GetEntries() );

    VclPtrInstance< SvxNewToolbarDialog > pNameDialog( nullptr, aNewName );

    // Reflect the actual m_pSaveInListBox into the new toolbar dialog
    for ( sal_Int32 i = 0; i < m_pSaveInListBox->GetEntryCount(); ++i )
    if (sIdent == "gear_add")
    {
        SaveInData* pData =
            static_cast<SaveInData*>(m_pSaveInListBox->GetEntryData( i ));
        OUString prefix = CuiResId( RID_SVXSTR_NEW_TOOLBAR );

        const sal_Int32 nInsertPos =
            pNameDialog->m_pSaveInListBox->InsertEntry( m_pSaveInListBox->GetEntry( i ) );
        OUString aNewName =
            SvxConfigPageHelper::generateCustomName( prefix, GetSaveInData()->GetEntries() );

        pNameDialog->m_pSaveInListBox->SetEntryData( nInsertPos, pData );
    }
        OUString aNewURL =
            SvxConfigPageHelper::generateCustomURL( GetSaveInData()->GetEntries() );

    pNameDialog->m_pSaveInListBox->SelectEntryPos(
        m_pSaveInListBox->GetSelectedEntryPos() );
        VclPtrInstance< SvxNewToolbarDialog > pNameDialog( nullptr, aNewName );

    if ( pNameDialog->Execute() == RET_OK )
    {
        aNewName = pNameDialog->GetName();

        // Where to save the new toolbar? (i.e. Modulewise or documentwise)
        sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->GetSelectedEntryPos();

        ToolbarSaveInData* pData =
            static_cast<ToolbarSaveInData*>(
                pNameDialog->m_pSaveInListBox->GetEntryData( nInsertPos ) );

        if ( GetSaveInData() != pData )
        // Reflect the actual m_pSaveInListBox into the new toolbar dialog
        for ( sal_Int32 i = 0; i < m_pSaveInListBox->GetEntryCount(); ++i )
        {
            m_pSaveInListBox->SelectEntryPos( nInsertPos );
            m_pSaveInListBox->GetSelectHdl().Call(*m_pSaveInListBox);
            SaveInData* pData =
                static_cast<SaveInData*>(m_pSaveInListBox->GetEntryData( i ));

            const sal_Int32 nInsertPos =
                pNameDialog->m_pSaveInListBox->InsertEntry( m_pSaveInListBox->GetEntry( i ) );

            pNameDialog->m_pSaveInListBox->SetEntryData( nInsertPos, pData );
        }

        SvxConfigEntry* pToolbar =
            new SvxConfigEntry( aNewName, aNewURL, true, /*bParentData*/false );
        pNameDialog->m_pSaveInListBox->SelectEntryPos(
            m_pSaveInListBox->GetSelectedEntryPos() );

        pToolbar->SetUserDefined();
        pToolbar->SetMain();
        if ( pNameDialog->Execute() == RET_OK )
        {
            aNewName = pNameDialog->GetName();

        pData->CreateToolbar( pToolbar );
            // Where to save the new toolbar? (i.e. Modulewise or documentwise)
            sal_Int32 nInsertPos = pNameDialog->m_pSaveInListBox->GetSelectedEntryPos();

        nInsertPos = m_pTopLevelListBox->InsertEntry( pToolbar->GetName() );
        m_pTopLevelListBox->SetEntryData( nInsertPos, pToolbar );
        m_pTopLevelListBox->SelectEntryPos( nInsertPos );
        m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);
            ToolbarSaveInData* pData =
                static_cast<ToolbarSaveInData*>(
                    pNameDialog->m_pSaveInListBox->GetEntryData( nInsertPos ) );

        pData->SetModified();
            if ( GetSaveInData() != pData )
            {
                m_pSaveInListBox->SelectEntryPos( nInsertPos );
                m_pSaveInListBox->GetSelectHdl().Call(*m_pSaveInListBox);
            }

            SvxConfigEntry* pToolbar =
                new SvxConfigEntry( aNewName, aNewURL, true, false );

            pToolbar->SetUserDefined();
            pToolbar->SetMain();

            pData->CreateToolbar( pToolbar );

            nInsertPos = m_pTopLevelListBox->InsertEntry( pToolbar->GetName() );
            m_pTopLevelListBox->SetEntryData( nInsertPos, pToolbar );
            m_pTopLevelListBox->SelectEntryPos( nInsertPos );
            m_pTopLevelListBox->GetSelectHdl().Call(*m_pTopLevelListBox);

            pData->SetModified();
        }
    }
}

IMPL_LINK_NOARG( SvxToolbarConfigPage, RemoveToolbarHdl, Button *, void )
{
    SvxConfigEntry* pToolbar = GetTopLevelSelection();

    if ( pToolbar && pToolbar->IsDeletable() )
    else if (sIdent == "gear_delete")
    {
        DeleteSelectedTopLevel();
        UpdateButtonStates();
    }
        SvxConfigEntry* pToolbar = GetTopLevelSelection();

        if ( pToolbar && pToolbar->IsDeletable() )
        {
            DeleteSelectedTopLevel();
            UpdateButtonStates();
        }
    }
    else if (sIdent == "gear_rename")
    {
        sal_Int32 nSelectionPos = m_pTopLevelListBox->GetSelectedEntryPos();
        SvxConfigEntry* pToolbar =
            static_cast<SvxConfigEntry*>(m_pTopLevelListBox->GetEntryData( nSelectionPos ));
        ToolbarSaveInData* pSaveInData = static_cast<ToolbarSaveInData*>( GetSaveInData() );

        //Rename the toolbar
        OUString sCurrentName( SvxConfigPageHelper::stripHotKey( pToolbar->GetName() ) );
        OUString sDesc = CuiResId( RID_SVXSTR_LABEL_NEW_NAME );

        SvxNameDialog aNameDialog( GetFrameWeld(), sCurrentName, sDesc );
        aNameDialog.set_help_id( HID_SVX_CONFIG_RENAME_TOOLBAR );
        aNameDialog.set_title( CuiResId( RID_SVXSTR_RENAME_TOOLBAR ) );

        if ( aNameDialog.run() == RET_OK )
        {
            OUString sNewName = aNameDialog.GetName();

            if (sCurrentName == sNewName)
                return;

            pToolbar->SetName( sNewName );
            pSaveInData->ApplyToolbar( pToolbar );

            // have to use remove and insert to change the name
            m_pTopLevelListBox->RemoveEntry( nSelectionPos );
            nSelectionPos =
                    m_pTopLevelListBox->InsertEntry( sNewName, nSelectionPos );
            m_pTopLevelListBox->SetEntryData( nSelectionPos, pToolbar );
            m_pTopLevelListBox->SelectEntryPos( nSelectionPos );
        }
    }
    else
    {
        //This block should never be reached
        SAL_WARN("cui.customize", "Unknown gear menu option: " << sIdent);
        return;
    }
}

IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectCategory, ListBox&, void )
@@ -697,6 +737,7 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, ResetToolbarHdl, Button *, void )

void SvxToolbarConfigPage::UpdateButtonStates()
{
    SvxConfigEntry* pToolbar = GetTopLevelSelection();
    SvTreeListEntry* selection = m_pContentsListBox->GetCurEntry();

    bool  bIsSeparator =
@@ -710,6 +751,12 @@ void SvxToolbarConfigPage::UpdateButtonStates()
    m_pRemoveCommandButton->Enable( bIsValidSelection );

    m_pModifyBtn->Enable( bIsValidSelection && !bIsSeparator );

    // Handle the gear button
    PopupMenu* pPopup = m_pGearBtn->GetPopupMenu();
    // "gear_add" option is always enabled
    pPopup->EnableItem( "gear_delete", pToolbar && pToolbar->IsDeletable() );
    pPopup->EnableItem( "gear_rename", pToolbar && pToolbar->IsRenamable() );
}

short SvxToolbarConfigPage::QueryReset()
@@ -735,8 +782,6 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void )
    if ( pToolbar == nullptr )
    {
        //TODO: Disable related buttons
        m_pPlusBtn->Enable( false );
        m_pMinusBtn->Enable( false );
        m_pInsertBtn->Enable( false );
        m_pResetBtn->Enable( false );

@@ -744,8 +789,6 @@ IMPL_LINK_NOARG( SvxToolbarConfigPage, SelectToolbar, ListBox&, void )
    }
    else
    {
        m_pPlusBtn->Enable();
        m_pMinusBtn->Enable( pToolbar->IsDeletable() );
        m_pInsertBtn->Enable();
        m_pResetBtn->Enable();
    }
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index b7aa0a2..8ee0080 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -1141,8 +1141,7 @@ SvxConfigPage::SvxConfigPage(vcl::Window *pParent, const SfxItemSet& rSet)
    get(m_pRemoveCommandButton, "remove");

    get(m_pTopLevelListBox, "toplevellist");
    get(m_pPlusBtn, "plusbtn");
    get(m_pMinusBtn, "minusbtn");
    get(m_pGearBtn, "gearbtn");
    get(m_pMoveUpButton, "up");
    get(m_pMoveDownButton, "down");
    get(m_pSaveInListBox, "savein");
@@ -1180,6 +1179,7 @@ SvxConfigPage::SvxConfigPage(vcl::Window *pParent, const SfxItemSet& rSet)
    m_pFunctions->SetDoubleClickHdl( LINK( this, SvxConfigPage, FunctionDoubleClickHdl ) );
    m_pFunctions->SetSelectHdl(
        LINK( this, SvxConfigPage, SelectFunctionHdl ) );
    m_pGearBtn->SetDropDown(PushButtonDropdownStyle::NONE);
}

SvxConfigPage::~SvxConfigPage()
@@ -1190,8 +1190,7 @@ SvxConfigPage::~SvxConfigPage()
void SvxConfigPage::dispose()
{
    m_pTopLevelListBox.clear();
    m_pPlusBtn.clear();
    m_pMinusBtn.clear();
    m_pGearBtn.clear();
    m_pSearchEdit.clear();
    m_pCommandCategoryListBox.clear();
    m_pEntries.clear();
@@ -2106,6 +2105,11 @@ bool SvxConfigEntry::IsDeletable()
    return !IsMain() || IsUserDefined();
}

bool SvxConfigEntry::IsRenamable()
{
    return !IsMain() || IsUserDefined();
}

ToolbarSaveInData::ToolbarSaveInData(
    const uno::Reference < css::ui::XUIConfigurationManager >& xCfgMgr,
    const uno::Reference < css::ui::XUIConfigurationManager >& xParentCfgMgr,
diff --git a/cui/source/inc/SvxMenuConfigPage.hxx b/cui/source/inc/SvxMenuConfigPage.hxx
index 7f5eb33..f944ce3 100644
--- a/cui/source/inc/SvxMenuConfigPage.hxx
+++ b/cui/source/inc/SvxMenuConfigPage.hxx
@@ -53,8 +53,7 @@ private:
    DECL_LINK( SelectMenu, ListBox&, void );
    DECL_LINK( SelectMenuEntry, SvTreeListBox *, void );

    DECL_LINK( AddMenuHdl, Button *, void );
    DECL_LINK( RemoveMenuHdl, Button *, void );
    DECL_LINK( GearHdl, MenuButton *, void );

    DECL_LINK( SelectCategory, ListBox&, void );

diff --git a/cui/source/inc/SvxToolbarConfigPage.hxx b/cui/source/inc/SvxToolbarConfigPage.hxx
index d854f45..2129db9 100644
--- a/cui/source/inc/SvxToolbarConfigPage.hxx
+++ b/cui/source/inc/SvxToolbarConfigPage.hxx
@@ -54,8 +54,7 @@ private:
    DECL_LINK( SelectToolbarEntry, SvTreeListBox*, void );
    DECL_LINK( MoveHdl, Button *, void );

    DECL_LINK( AddToolbarHdl, Button *, void );
    DECL_LINK( RemoveToolbarHdl, Button *, void );
    DECL_LINK( GearHdl, MenuButton *, void );

    DECL_LINK( SelectCategory, ListBox&, void );

diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index 52bb3fa..c1c85c8 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -320,6 +320,7 @@ public:
    bool    IsModified() { return bIsModified; }

    bool    IsDeletable();
    bool    IsRenamable();

    void    SetVisible( bool b ) { bIsVisible = b; }
    bool    IsVisible() const { return bIsVisible; }
@@ -390,8 +391,7 @@ protected:
    // menu or toolbar are displayed
    VclPtr<ListBox>                            m_pTopLevelListBox;
    // Used to add and remove toolbars/menus
    VclPtr<PushButton>                         m_pPlusBtn;
    VclPtr<PushButton>                         m_pMinusBtn;
    VclPtr<MenuButton>                         m_pGearBtn;
    VclPtr<VclContainer>                       m_pEntries;
    VclPtr<SvTreeListBox>                      m_pContentsListBox;

diff --git a/cui/uiconfig/ui/menuassignpage.ui b/cui/uiconfig/ui/menuassignpage.ui
index e435280..bd77bf0 100644
--- a/cui/uiconfig/ui/menuassignpage.ui
+++ b/cui/uiconfig/ui/menuassignpage.ui
@@ -3,6 +3,34 @@
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <requires lib="LibreOffice" version="1.0"/>
  <object class="GtkMenu" id="gearmenu">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <child>
      <object class="GtkMenuItem" id="gear_add">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes" context="menuassignpage|gear_add">_Add...</property>
        <property name="use_underline">True</property>
      </object>
    </child>
    <child>
      <object class="GtkMenuItem" id="gear_delete">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes" context="menuassignpage|gear_delete">_Delete</property>
        <property name="use_underline">True</property>
      </object>
    </child>
    <child>
      <object class="GtkMenuItem" id="gear_rename">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="label" translatable="yes" context="menuassignpage|gear_rename">_Rename...</property>
        <property name="use_underline">True</property>
      </object>
    </child>
  </object>
  <object class="GtkImage" id="image1">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
@@ -23,15 +51,10 @@
    <property name="can_focus">False</property>
    <property name="stock">gtk-go-back</property>
  </object>
  <object class="GtkImage" id="image5">
  <object class="GtkImage" id="image7">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="pixbuf">svtools/res/list_add.png</property>
  </object>
  <object class="GtkImage" id="image6">
    <property name="visible">True</property>
    <property name="can_focus">False</property>
    <property name="pixbuf">extensions/res/buttonminus.png</property>
    <property name="pixbuf">sfx2/res/actionaction013.png</property>
  </object>
  <object class="GtkBox" id="MenuAssignPage">
    <property name="visible">True</property>
@@ -220,32 +243,23 @@
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="plusbtn">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="halign">end</property>
                <property name="margin_left">5</property>
                <property name="image">image5</property>
                <property name="always_show_image">True</property>
              </object>
              <packing>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="minusbtn">
              <object class="GtkButton" id="gearbtn:gearmenu">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="halign">end</property>
                <property name="margin_left">1</property>
                <property name="image">image6</property>
                <property name="image">image7</property>
                <property name="always_show_image">True</property>
                <child internal-child="accessible">
                  <object class="AtkObject" id="gearbtn:gearmenu-atkobject">
                    <property name="AtkObject::accessible-name" translatable="yes" context="menuassignpage|gearbtn">Gear Menu</property>
                    <property name="AtkObject::accessible-description" translatable="yes" context="menuassignpage|gearbtn">Contains commands to modify or delete the selected toolbar or the top level menu, and the command to add new toolbars or top level menus.</property>
                  </object>
                </child>
              </object>
              <packing>
                <property name="left_attach">2</property>
                <property name="left_attach">1</property>
                <property name="top_attach">0</property>
              </packing>
            </child>
@@ -595,8 +609,7 @@
    <widgets>
      <widget name="commandcategorylist"/>
      <widget name="toplevellist"/>
      <widget name="plusbtn"/>
      <widget name="minusbtn"/>
      <widget name="gearbtn:gearmenu"/>
      <widget name="searchEntry"/>
      <widget name="savein"/>
      <widget name="functionbtn"/>