rework treeview initial toggle button col to be like expander col

cause this assumption is baked into the vcl one making it hard
to adapt remaining cases

Change-Id: I75dd5264c65b1ffbf4d26c9a86f6d4d08b400d90
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95622
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/basctl/source/basicide/moduldl2.cxx b/basctl/source/basicide/moduldl2.cxx
index 3c9d64a..c94cfe7 100644
--- a/basctl/source/basicide/moduldl2.cxx
+++ b/basctl/source/basicide/moduldl2.cxx
@@ -648,8 +648,8 @@ void LibPage::InsertLib()
            weld::TreeView& rView = xLibDlg->GetLibBox();
            rView.append();
            const int nRow = rView.n_children() - 1;
            rView.set_toggle(nRow, TRISTATE_TRUE, 0);
            rView.set_text(nRow, aLibName, 1);
            rView.set_toggle(nRow, TRISTATE_TRUE);
            rView.set_text(nRow, aLibName, 0);
            rView.set_cursor(rView.find_text(aLibName));
        }
    }
@@ -682,9 +682,9 @@ void LibPage::InsertLib()
            weld::TreeView& rView = xLibDlg->GetLibBox();
            for (int nLib = 0, nChildren = rView.n_children(); nLib < nChildren; ++nLib)
            {
                if (rView.get_toggle(nLib, 0) == TRISTATE_TRUE)
                if (rView.get_toggle(nLib) == TRISTATE_TRUE)
                {
                    OUString aLibName(rView.get_text(nLib, 1));
                    OUString aLibName(rView.get_text(nLib));
                    Reference< script::XLibraryContainer2 > xModLibContainer( m_aCurDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY );
                    Reference< script::XLibraryContainer2 > xDlgLibContainer( m_aCurDocument.getLibraryContainer( E_DIALOGS ), UNO_QUERY );

diff --git a/basctl/source/basicide/moduldlg.cxx b/basctl/source/basicide/moduldlg.cxx
index 3b65007..7aeae82 100644
--- a/basctl/source/basicide/moduldlg.cxx
+++ b/basctl/source/basicide/moduldlg.cxx
@@ -897,6 +897,7 @@ LibDialog::LibDialog(weld::Window* pParent)
{
    m_xLibBox->set_size_request(m_xLibBox->get_approximate_digit_width() * 28,
                                m_xLibBox->get_height_rows(8));
    m_xLibBox->enable_toggle_buttons(weld::ColumnToggleType::Check);
    // tdf#93476 The libraries should be listed alphabetically
    m_xLibBox->make_sorted();
}
diff --git a/basctl/source/dlged/managelang.cxx b/basctl/source/dlged/managelang.cxx
index 77a40f0..d36c238 100644
--- a/basctl/source/dlged/managelang.cxx
+++ b/basctl/source/dlged/managelang.cxx
@@ -226,9 +226,7 @@ SetDefaultLanguageDialog::SetDefaultLanguageDialog(weld::Window* pParent, std::s
{
    m_xLanguageLB->set_size_request(-1, m_xLanguageLB->get_height_rows(10));
    m_xCheckLangLB->set_size_request(-1, m_xCheckLangLB->get_height_rows(10));
    std::vector<int> aWidths;
    aWidths.push_back(m_xCheckLangLB->get_checkbox_column_width());
    m_xCheckLangLB->set_column_fixed_widths(aWidths);
    m_xCheckLangLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    if (m_xLocalizationMgr->isLibraryLocalized())
    {
@@ -270,8 +268,8 @@ void SetDefaultLanguageDialog::FillLanguageBox()
            LanguageType eLang = m_xLanguageCB->get_id(j);
            m_xCheckLangLB->append();
            const int nRow = m_xCheckLangLB->n_children() - 1;
            m_xCheckLangLB->set_toggle(nRow, TRISTATE_FALSE, 0);
            m_xCheckLangLB->set_text(nRow, m_xLanguageCB->get_text(j), 1);
            m_xCheckLangLB->set_toggle(nRow, TRISTATE_FALSE);
            m_xCheckLangLB->set_text(nRow, m_xLanguageCB->get_text(j), 0);
            m_xCheckLangLB->set_id(nRow, OUString::number(eLang.get()));
        }
        m_xLanguageCB.reset();
@@ -304,7 +302,7 @@ Sequence< Locale > SetDefaultLanguageDialog::GetLocales() const
    const sal_Int32 nCount = m_xCheckLangLB->n_children();
    for (sal_Int32 i = 0; i < nCount; ++i)
    {
        if (m_xCheckLangLB->get_toggle(i, 0) == TRISTATE_TRUE)
        if (m_xCheckLangLB->get_toggle(i) == TRISTATE_TRUE)
        {
            LanguageType eType(m_xCheckLangLB->get_id(i).toUInt32());
            aLocaleSeq.push_back(LanguageTag::convertToLocale(eType));
diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx
index c40c07d..90f4210 100644
--- a/cui/source/customize/SvxMenuConfigPage.cxx
+++ b/cui/source/customize/SvxMenuConfigPage.cxx
@@ -115,22 +115,10 @@ IMPL_LINK(SvxMenuConfigPage, MenuEntriesSizeAllocHdl, const Size&, rSize, void)
    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
    std::vector<int> aWidths;

    int nExpectedSize = 16;

    int nStandardImageColWidth = rTreeView.get_checkbox_column_width();
    int nMargin = nStandardImageColWidth - nExpectedSize;
    if (nMargin < 16)
        nMargin = 16;
    int nMargin = 16;

    if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_LARGE)
        nExpectedSize = 24;
    else if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_32)
        nExpectedSize = 32;

    int nImageColWidth = nExpectedSize + nMargin;

    aWidths.push_back(nImageColWidth);
    aWidths.push_back(rSize.Width() - (nImageColWidth + nStandardImageColWidth));
    aWidths.push_back(rSize.Width() - (nMargin + nStandardImageColWidth));
    rTreeView.set_column_fixed_widths(aWidths);
}

@@ -279,7 +267,7 @@ void SvxMenuConfigPage::SelectElement()
            auto const& entry = (*pEntries)[nIdx];
            OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
            rTreeView.set_id(rIter, sId);
            InsertEntryIntoUI(entry, rTreeView, rIter, 0);
            InsertEntryIntoUI(entry, rTreeView, rIter, true);
        });
    }

@@ -369,7 +357,7 @@ IMPL_LINK_NOARG( SvxMenuConfigPage, AddCommandHdl, weld::Button&, void )
    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
    SvxConfigEntry* pEntry =
        reinterpret_cast<SvxConfigEntry*>(rTreeView.get_id(nPos).toInt64());
    InsertEntryIntoUI(pEntry, rTreeView, nPos, 0);
    InsertEntryIntoUI(pEntry, rTreeView, nPos, true);
}

IMPL_LINK_NOARG( SvxMenuConfigPage, RemoveCommandHdl, weld::Button&, void )
@@ -389,7 +377,7 @@ IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
        SvxConfigEntry* pNewEntryData = new SvxConfigEntry;
        pNewEntryData->SetUserDefined();
        int nPos = AppendEntry(pNewEntryData, -1);
        InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
        InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, true);
    }
    else if (rIdent == "insertsubmenu")
    {
@@ -410,7 +398,7 @@ IMPL_LINK(SvxMenuConfigPage, InsertHdl, const OString&, rIdent, void)
            pNewEntryData->SetUserDefined();

            int nPos = AppendEntry(pNewEntryData, -1);
            InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, 0);
            InsertEntryIntoUI(pNewEntryData, rTreeView, nPos, true);

            ReloadTopLevelListBox();

diff --git a/cui/source/customize/SvxNotebookbarConfigPage.cxx b/cui/source/customize/SvxNotebookbarConfigPage.cxx
index b8c3a8d..7354f1c 100644
--- a/cui/source/customize/SvxNotebookbarConfigPage.cxx
+++ b/cui/source/customize/SvxNotebookbarConfigPage.cxx
@@ -124,29 +124,10 @@ SvxNotebookbarConfigPage::SvxNotebookbarConfigPage(weld::Container* pPage,
        new SvxNotebookbarEntriesListBox(m_xBuilder->weld_tree_view("toolcontents"), this));
    m_xDropTargetHelper.reset(
        new SvxConfigPageFunctionDropTarget(*this, m_xContentsListBox->get_widget()));
    std::vector<int> aWidths;
    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
    Size aSize(m_xFunctions->get_size_request());
    rTreeView.set_size_request(aSize.Width(), aSize.Height());

    int nExpectedSize = 16;

    int nStandardImageColWidth = rTreeView.get_checkbox_column_width();
    int nMargin = nStandardImageColWidth - nExpectedSize;
    if (nMargin < 16)
        nMargin = 16;

    if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_LARGE)
        nExpectedSize = 24;
    else if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_32)
        nExpectedSize = 32;

    int nImageColWidth = nExpectedSize + nMargin;

    aWidths.push_back(nStandardImageColWidth);
    aWidths.push_back(nImageColWidth);
    rTreeView.set_column_fixed_widths(aWidths);

    rTreeView.set_hexpand(true);
    rTreeView.set_vexpand(true);
    rTreeView.set_help_id(HID_SVX_CONFIG_NOTEBOOKBAR_CONTENTS);
@@ -219,7 +200,7 @@ void SvxConfigPage::InsertEntryIntoNotebookbarTabUI(const OUString& sClassId,
                                                    const OUString& sUIItemId,
                                                    const OUString& sUIItemCommand,
                                                    weld::TreeView& rTreeView,
                                                    weld::TreeIter& rIter, int nStartCol)
                                                    weld::TreeIter& rIter)
{
    css::uno::Reference<css::container::XNameAccess> m_xCommandToLabelMap;
    uno::Reference<uno::XComponentContext> xContext = ::comphelper::getProcessComponentContext();
@@ -249,7 +230,7 @@ void SvxConfigPage::InsertEntryIntoNotebookbarTabUI(const OUString& sClassId,

    if (sClassId == "GtkSeparatorMenuItem" || sClassId == "GtkSeparator")
    {
        rTreeView.set_text(rIter, "--------------------------------------------", nStartCol + 1);
        rTreeView.set_text(rIter, "--------------------------------------------", 0);
    }
    else
    {
@@ -257,8 +238,8 @@ void SvxConfigPage::InsertEntryIntoNotebookbarTabUI(const OUString& sClassId,
            aName = sUIItemId;
        auto xImage = GetSaveInData()->GetImage(sUIItemCommand);
        if (xImage.is())
            rTreeView.set_image(rIter, xImage, nStartCol);
        rTreeView.set_text(rIter, aName, nStartCol + 1);
            rTreeView.set_image(rIter, xImage, -1);
        rTreeView.set_text(rIter, aName, 0);
        rTreeView.set_id(rIter, sUIItemId);
    }
}
@@ -465,15 +446,15 @@ void SvxNotebookbarConfigPage::SelectElement()
            {
                if (aEntries[nIdx].sVisibleValue == "True")
                {
                    rTreeView.set_toggle(rIter, TRISTATE_TRUE, 0);
                    rTreeView.set_toggle(rIter, TRISTATE_TRUE);
                }
                else
                {
                    rTreeView.set_toggle(rIter, TRISTATE_FALSE, 0);
                    rTreeView.set_toggle(rIter, TRISTATE_FALSE);
                }
            }
            InsertEntryIntoNotebookbarTabUI(aEntries[nIdx].sClassId, aEntries[nIdx].sDisplayName,
                                            aEntries[nIdx].sActionName, rTreeView, rIter, 1);
                                            aEntries[nIdx].sActionName, rTreeView, rIter);
        });

    aEntries.clear();
@@ -532,7 +513,7 @@ void SvxNotebookbarEntriesListBox::ChangedVisibility(int nRow)
    OUString sNotebookbarInterface = getFileName(m_pPage->GetFileName());

    OUString sVisible;
    if (m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE)
    if (m_xControl->get_toggle(nRow) == TRISTATE_TRUE)
        sVisible = "True";
    else
        sVisible = "False";
@@ -556,9 +537,8 @@ IMPL_LINK(SvxNotebookbarEntriesListBox, KeyInputHdl, const KeyEvent&, rKeyEvent,
    if (rKeyEvent.GetKeyCode() == KEY_SPACE)
    {
        int nRow = m_xControl->get_selected_index();
        m_xControl->set_toggle(
            nRow, m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE ? TRISTATE_FALSE : TRISTATE_TRUE,
            0);
        m_xControl->set_toggle(nRow, m_xControl->get_toggle(nRow) == TRISTATE_TRUE ? TRISTATE_FALSE
                                                                                   : TRISTATE_TRUE);
        ChangedVisibility(nRow);
        return true;
    }
diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx
index 5efa328..0854044 100644
--- a/cui/source/customize/SvxToolbarConfigPage.cxx
+++ b/cui/source/customize/SvxToolbarConfigPage.cxx
@@ -53,29 +53,10 @@ SvxToolbarConfigPage::SvxToolbarConfigPage(weld::Container* pPage, weld::DialogC
    m_xContentsListBox.reset(new SvxToolbarEntriesListBox(m_xBuilder->weld_tree_view("toolcontents"), this));
    m_xDropTargetHelper.reset(new SvxConfigPageFunctionDropTarget(*this, m_xContentsListBox->get_widget()));

    std::vector<int> aWidths;
    weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
    Size aSize(m_xFunctions->get_size_request());
    rTreeView.set_size_request(aSize.Width(), aSize.Height());

    int nExpectedSize = 16;

    int nStandardImageColWidth = rTreeView.get_checkbox_column_width();
    int nMargin = nStandardImageColWidth - nExpectedSize;
    if (nMargin < 16)
        nMargin = 16;

    if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_LARGE)
        nExpectedSize = 24;
    else if (SvxConfigPageHelper::GetImageType() & css::ui::ImageType::SIZE_32)
        nExpectedSize = 32;

    int nImageColWidth = nExpectedSize + nMargin;

    aWidths.push_back(nStandardImageColWidth);
    aWidths.push_back(nImageColWidth);
    rTreeView.set_column_fixed_widths(aWidths);

    rTreeView.set_hexpand(true);
    rTreeView.set_vexpand(true);
    rTreeView.set_help_id( HID_SVX_CONFIG_TOOLBAR_CONTENTS );
@@ -467,7 +448,7 @@ IMPL_LINK(SvxToolbarConfigPage, InsertHdl, const OString&, rIdent, void)
        pNewEntryData->SetUserDefined();

        int nPos = AppendEntry(pNewEntryData, -1);
        InsertEntryIntoUI(pNewEntryData, m_xContentsListBox->get_widget(), nPos, 1);
        InsertEntryIntoUI(pNewEntryData, m_xContentsListBox->get_widget(), nPos);

        static_cast<ToolbarSaveInData*>( GetSaveInData())->ApplyToolbar( pToolbar );

@@ -516,7 +497,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
            else
                pEntry->SetName( aNewName );

            m_xContentsListBox->set_text(nActEntry, aNewName, 2);
            m_xContentsListBox->set_text(nActEntry, aNewName, 0);
            bNeedsApply = true;
        }
    }
@@ -564,8 +545,8 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)

                    OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
                    m_xContentsListBox->insert(nActEntry, sId);
                    m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
                    m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE);
                    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry);

                    m_xContentsListBox->select(nActEntry);
                    m_xContentsListBox->scroll_to_row(nActEntry);
@@ -604,8 +585,8 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)

            OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
            m_xContentsListBox->insert(nActEntry, sId);
            m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
            m_xContentsListBox->set_toggle(nActEntry, pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE);
            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry);

            m_xContentsListBox->select(nActEntry);
            m_xContentsListBox->scroll_to_row(nActEntry);
@@ -638,7 +619,7 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
        {
            pEntry->SetName( aSystemName );
            m_xContentsListBox->set_text(
                nActEntry, SvxConfigPageHelper::stripHotKey(aSystemName), 2);
                nActEntry, SvxConfigPageHelper::stripHotKey(aSystemName), 0);
            bNeedsApply = true;
        }

@@ -661,8 +642,8 @@ IMPL_LINK(SvxToolbarConfigPage, ModifyItemHdl, const OString&, rIdent, void)
            OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
            m_xContentsListBox->insert(nActEntry, sId);
            m_xContentsListBox->set_toggle(nActEntry,
                pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry, 1);
                pEntry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE);
            InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nActEntry);

            m_xContentsListBox->select(nActEntry);
            m_xContentsListBox->scroll_to_row(nActEntry);
@@ -793,8 +774,8 @@ void SvxToolbarConfigPage::SelectElement()
        OUString sId(OUString::number(reinterpret_cast<sal_Int64>(entry)));
        m_xContentsListBox->insert(i, sId);
        if (entry->IsBinding() && !entry->IsSeparator())
            m_xContentsListBox->set_toggle(i,  entry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        InsertEntryIntoUI(entry, m_xContentsListBox->get_widget(), i, 1);
            m_xContentsListBox->set_toggle(i,  entry->IsVisible() ? TRISTATE_TRUE : TRISTATE_FALSE);
        InsertEntryIntoUI(entry, m_xContentsListBox->get_widget(), i);
        ++i;
    }

@@ -820,10 +801,10 @@ void SvxToolbarConfigPage::AddFunction(int nTarget)
    if ( pEntry->IsBinding() ) //TODO sep ?
    {
        pEntry->SetVisible(true);
        m_xContentsListBox->set_toggle(nNewLBEntry, TRISTATE_TRUE, 0);
        m_xContentsListBox->set_toggle(nNewLBEntry, TRISTATE_TRUE);
    }

    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nNewLBEntry, 1);
    InsertEntryIntoUI(pEntry, m_xContentsListBox->get_widget(), nNewLBEntry);

    // Changes are not visible on the toolbar until this point
    // TODO: Figure out a way to show the changes on the toolbar, but revert if
@@ -854,7 +835,7 @@ void SvxToolbarEntriesListBox::ChangedVisibility(int nRow)

    if (pEntryData->IsBinding())
    {
        pEntryData->SetVisible(m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE);
        pEntryData->SetVisible(m_xControl->get_toggle(nRow) == TRISTATE_TRUE);

        SvxConfigEntry* pToolbar = m_pPage->GetTopLevelSelection();

@@ -879,7 +860,7 @@ IMPL_LINK(SvxToolbarEntriesListBox, KeyInputHdl, const KeyEvent&, rKeyEvent, boo
        SvxConfigEntry* pEntryData = reinterpret_cast<SvxConfigEntry*>(m_xControl->get_id(nRow).toInt64());
        if (pEntryData->IsBinding() && !pEntryData->IsSeparator())
        {
            m_xControl->set_toggle(nRow, m_xControl->get_toggle(nRow, 0) == TRISTATE_TRUE ? TRISTATE_FALSE : TRISTATE_TRUE, 0);
            m_xControl->set_toggle(nRow, m_xControl->get_toggle(nRow) == TRISTATE_TRUE ? TRISTATE_FALSE : TRISTATE_TRUE);
            ChangedVisibility(nRow);
        }
        return true;
diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx
index 412ecf3..e7cea5f 100644
--- a/cui/source/customize/cfg.cxx
+++ b/cui/source/customize/cfg.cxx
@@ -926,6 +926,7 @@ SvxMenuEntriesListBox::SvxMenuEntriesListBox(std::unique_ptr<weld::TreeView> xCo
    , m_xDropDown(m_xControl->create_virtual_device())
    , m_pPage(pPg)
{
    m_xControl->enable_toggle_buttons(weld::ColumnToggleType::Check);
    CreateDropDown();
    m_xControl->connect_key_press(LINK(this, SvxMenuEntriesListBox, KeyInputHdl));
}
@@ -1507,7 +1508,8 @@ int SvxConfigPage::AppendEntry(

namespace
{
    template<typename itertype> void TmplInsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, itertype& rIter, int nStartCol, SaveInData* pSaveInData, VirtualDevice& rDropDown)
    template<typename itertype> void TmplInsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, itertype& rIter, SaveInData* pSaveInData,
                                                           VirtualDevice& rDropDown, bool bMenu)
    {
        OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pNewEntryData)));

@@ -1515,37 +1517,37 @@ namespace

        if (pNewEntryData->IsSeparator())
        {
            rTreeView.set_text(rIter, "----------------------------------", nStartCol + 1);
            rTreeView.set_text(rIter, "----------------------------------", 0);
        }
        else
        {
            auto xImage = pSaveInData->GetImage(pNewEntryData->GetCommand());
            if (xImage.is())
                rTreeView.set_image(rIter, xImage, nStartCol);
                rTreeView.set_image(rIter, xImage, -1);
            OUString aName = SvxConfigPageHelper::stripHotKey( pNewEntryData->GetName() );
            rTreeView.set_text(rIter, aName, nStartCol + 1);
            rTreeView.set_text(rIter, aName, 0);
        }

        if (nStartCol == 0)  // menus
        if (bMenu)  // menus
        {
            if (pNewEntryData->IsPopup() || pNewEntryData->GetStyle() & css::ui::ItemStyle::DROP_DOWN)
                rTreeView.set_image(rIter, rDropDown, nStartCol + 2);
                rTreeView.set_image(rIter, rDropDown, 1);
            else
                rTreeView.set_image(rIter, css::uno::Reference<css::graphic::XGraphic>(), nStartCol + 2);
                rTreeView.set_image(rIter, css::uno::Reference<css::graphic::XGraphic>(), 1);
        }
    }
}

void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, int nPos, int nStartCol)
void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, int nPos, bool bMenu)
{
    TmplInsertEntryIntoUI<int>(pNewEntryData, rTreeView, nPos, nStartCol,
            GetSaveInData(), m_xContentsListBox->get_dropdown_image());
    TmplInsertEntryIntoUI<int>(pNewEntryData, rTreeView, nPos, GetSaveInData(),
                               m_xContentsListBox->get_dropdown_image(), bMenu);
}

void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, weld::TreeIter& rIter, int nStartCol)
void SvxConfigPage::InsertEntryIntoUI(SvxConfigEntry* pNewEntryData, weld::TreeView& rTreeView, weld::TreeIter& rIter, bool bMenu)
{
    TmplInsertEntryIntoUI<weld::TreeIter>(pNewEntryData, rTreeView, rIter, nStartCol,
            GetSaveInData(), m_xContentsListBox->get_dropdown_image());
    TmplInsertEntryIntoUI<weld::TreeIter>(pNewEntryData, rTreeView, rIter, GetSaveInData(),
                                          m_xContentsListBox->get_dropdown_image(), bMenu);
}

IMPL_LINK(SvxConfigPage, MoveHdl, weld::Button&, rButton, void)
diff --git a/cui/source/dialogs/hangulhanjadlg.cxx b/cui/source/dialogs/hangulhanjadlg.cxx
index 34e93ed..25fadc4 100644
--- a/cui/source/dialogs/hangulhanjadlg.cxx
+++ b/cui/source/dialogs/hangulhanjadlg.cxx
@@ -761,7 +761,7 @@ namespace svx

            DBG_ASSERT( xDict.is(), "-HangulHanjaOptionsDialog::OkHdl(): someone is evaporated..." );

            bool bActive = m_xDictsLB->get_toggle(n, 0) == TRISTATE_TRUE;
            bool bActive = m_xDictsLB->get_toggle(n) == TRISTATE_TRUE;
            xDict->setActive( bActive );
            Reference< util::XFlushable > xFlush( xDict, uno::UNO_QUERY );
            if( xFlush.is() )
@@ -890,9 +890,7 @@ namespace svx
        m_xDictsLB->set_size_request(m_xDictsLB->get_approximate_digit_width() * 32,
                                     m_xDictsLB->get_height_rows(5));

        std::vector<int> aWidths;
        aWidths.push_back(m_xDictsLB->get_checkbox_column_width());
        m_xDictsLB->set_column_fixed_widths(aWidths);
        m_xDictsLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

        m_xDictsLB->connect_changed( LINK( this, HangulHanjaOptionsDialog, DictsLB_SelectHdl ) );

@@ -927,8 +925,8 @@ namespace svx
    {
        m_xDictsLB->append();
        int nRow = m_xDictsLB->n_children() - 1;
        m_xDictsLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xDictsLB->set_text(nRow, rName, 1);
        m_xDictsLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE);
        m_xDictsLB->set_text(nRow, rName, 0);
        m_xDictsLB->set_id(nRow, rName);
    }

diff --git a/cui/source/dialogs/multipat.cxx b/cui/source/dialogs/multipat.cxx
index bd12157..249a116 100644
--- a/cui/source/dialogs/multipat.cxx
+++ b/cui/source/dialogs/multipat.cxx
@@ -57,7 +57,7 @@ IMPL_LINK_NOARG(SvxPathSelectDialog, SelectHdl_Impl, weld::TreeView&, void)
void SvxMultiPathDialog::HandleEntryChecked(int nRow)
{
    m_xRadioLB->select(nRow);
    bool bChecked = m_xRadioLB->get_toggle(nRow, 0) == TRISTATE_TRUE;
    bool bChecked = m_xRadioLB->get_toggle(nRow) == TRISTATE_TRUE;
    if (bChecked)
    {
        // we have radio button behavior -> so uncheck the other entries
@@ -65,7 +65,7 @@ void SvxMultiPathDialog::HandleEntryChecked(int nRow)
        for (int i = 0; i < nCount; ++i)
        {
            if (i != nRow)
                m_xRadioLB->set_toggle(i, TRISTATE_FALSE, 0);
                m_xRadioLB->set_toggle(i, TRISTATE_FALSE);
        }
    }
}
@@ -79,8 +79,8 @@ void SvxMultiPathDialog::AppendEntry(const OUString& rText, const OUString& rId)
{
    m_xRadioLB->append();
    const int nRow = m_xRadioLB->n_children() - 1;
    m_xRadioLB->set_toggle(nRow, TRISTATE_FALSE, 0);
    m_xRadioLB->set_text(nRow, rText, 1);
    m_xRadioLB->set_toggle(nRow, TRISTATE_FALSE);
    m_xRadioLB->set_text(nRow, rText, 0);
    m_xRadioLB->set_id(nRow, rId);
}

@@ -147,7 +147,7 @@ IMPL_LINK_NOARG(SvxPathSelectDialog, AddHdl_Impl, weld::Button&, void)
IMPL_LINK_NOARG(SvxMultiPathDialog, DelHdl_Impl, weld::Button&, void)
{
    int nPos = m_xRadioLB->get_selected_index();
    bool bChecked = m_xRadioLB->get_toggle(nPos, 0) == TRISTATE_TRUE;
    bool bChecked = m_xRadioLB->get_toggle(nPos) == TRISTATE_TRUE;
    m_xRadioLB->remove(nPos);
    int nCnt = m_xRadioLB->n_children();
    if (nCnt)
@@ -158,7 +158,7 @@ IMPL_LINK_NOARG(SvxMultiPathDialog, DelHdl_Impl, weld::Button&, void)
            nPos = nCnt;
        if (bChecked)
        {
            m_xRadioLB->set_toggle(nPos, TRISTATE_TRUE, 0);
            m_xRadioLB->set_toggle(nPos, TRISTATE_TRUE);
            HandleEntryChecked(nPos);
        }
        m_xRadioLB->select(nPos);
@@ -193,13 +193,10 @@ SvxMultiPathDialog::SvxMultiPathDialog(weld::Window* pParent)
{
    m_xRadioLB->set_size_request(m_xRadioLB->get_approximate_digit_width() * 60,
                                 m_xRadioLB->get_text_height() * 10);

    std::vector<int> aWidths;
    aWidths.push_back(m_xRadioLB->get_checkbox_column_width());
    m_xRadioLB->set_column_fixed_widths(aWidths);
    m_xRadioLB->set_toggle_columns_as_radio();
    m_xRadioLB->enable_toggle_buttons(weld::ColumnToggleType::Radio);
    m_xRadioLB->connect_toggled(LINK(this, SvxMultiPathDialog, CheckHdl_Impl));
    m_xRadioLB->connect_changed(LINK(this, SvxMultiPathDialog, SelectHdl_Impl));

    m_xAddBtn->connect_clicked(LINK(this, SvxMultiPathDialog, AddHdl_Impl));
    m_xDelBtn->connect_clicked(LINK(this, SvxMultiPathDialog, DelHdl_Impl));

@@ -234,7 +231,7 @@ OUString SvxMultiPathDialog::GetPath() const
    OUString sWritable;
    for (int i = 0, nCount = m_xRadioLB->n_children(); i < nCount; ++i)
    {
        if (m_xRadioLB->get_toggle(i, 0) == TRISTATE_TRUE)
        if (m_xRadioLB->get_toggle(i) == TRISTATE_TRUE)
            sWritable = m_xRadioLB->get_id(i);
        else
        {
@@ -286,7 +283,7 @@ void SvxMultiPathDialog::SetPath( const OUString& rPath )

        if (nCount)
        {
            m_xRadioLB->set_toggle(nCount - 1, TRISTATE_TRUE, 0);
            m_xRadioLB->set_toggle(nCount - 1, TRISTATE_TRUE);
            HandleEntryChecked(nCount - 1);
        }
    }
diff --git a/cui/source/dialogs/srchxtra.cxx b/cui/source/dialogs/srchxtra.cxx
index 2a68293..5135017 100644
--- a/cui/source/dialogs/srchxtra.cxx
+++ b/cui/source/dialogs/srchxtra.cxx
@@ -114,9 +114,7 @@ SvxSearchAttributeDialog::SvxSearchAttributeDialog(weld::Window* pParent,
    m_xAttrLB->set_size_request(m_xAttrLB->get_approximate_digit_width() * 50,
                                m_xAttrLB->get_height_rows(12));

    std::vector<int> aWidths;
    aWidths.push_back(m_xAttrLB->get_checkbox_column_width());
    m_xAttrLB->set_column_fixed_widths(aWidths);
    m_xAttrLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    m_xOKBtn->connect_clicked(LINK( this, SvxSearchAttributeDialog, OKHdl));

@@ -150,8 +148,8 @@ SvxSearchAttributeDialog::SvxSearchAttributeDialog(weld::Window* pParent,
            {
                m_xAttrLB->append();
                const int nRow = m_xAttrLB->n_children() - 1;
                m_xAttrLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xAttrLB->set_text(nRow, SvxAttrNameTable::GetString(nId), 1);
                m_xAttrLB->set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE);
                m_xAttrLB->set_text(nRow, SvxAttrNameTable::GetString(nId), 0);
                m_xAttrLB->set_id(nRow, OUString::number(nSlot));
            }
            else
@@ -176,7 +174,7 @@ IMPL_LINK_NOARG(SvxSearchAttributeDialog, OKHdl, weld::Button&, void)
    for (int i = 0, nCount = m_xAttrLB->n_children(); i < nCount; ++i)
    {
        sal_uInt16 nSlot = m_xAttrLB->get_id(i).toUInt32();
        bool bChecked = m_xAttrLB->get_toggle(i, 0) == TRISTATE_TRUE;
        bool bChecked = m_xAttrLB->get_toggle(i) == TRISTATE_TRUE;

        sal_uInt16 j;
        for ( j = rList.Count(); j; )
diff --git a/cui/source/inc/cfg.hxx b/cui/source/inc/cfg.hxx
index 7b9fe84..afd25c1 100644
--- a/cui/source/inc/cfg.hxx
+++ b/cui/source/inc/cfg.hxx
@@ -338,7 +338,7 @@ public:
    void set_dropdown(int row, int col) { m_xControl->set_image(row, *m_xDropDown, col); }
    void set_id(int row, const OUString& rId) { m_xControl->set_id(row, rId); }
    void clear() { m_xControl->clear(); } //need frees ?
    void set_toggle(int row, TriState eState, int col) { m_xControl->set_toggle(row, eState, col); }
    void set_toggle(int row, TriState eState) { m_xControl->set_toggle(row, eState); }
    void scroll_to_row(int pos) { m_xControl->scroll_to_row(pos); }
    void select(int pos) { m_xControl->select(pos); }

@@ -455,15 +455,14 @@ protected:

    void                InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
                                          weld::TreeView& rTreeView, int nPos,
                                          int nStartCol);
                                          bool bMenu = false);
    void                InsertEntryIntoUI(SvxConfigEntry* pNewEntryData,
                                          weld::TreeView& rTreeView, weld::TreeIter& rIter,
                                          int nStartCol);
                                          bool bMenu = false);

    void InsertEntryIntoNotebookbarTabUI(const OUString& sClassId, const OUString& sUIItemId,
                                         const OUString& sUIItemCommand,
                                         weld::TreeView& rTreeView, weld::TreeIter& rIter,
                                         int nStartCol);
                                         weld::TreeView& rTreeView, weld::TreeIter& rIter);

    SvxEntries*     FindParentForChild( SvxEntries* pParentEntries,
                                        SvxConfigEntry* pChildData );
diff --git a/cui/source/options/certpath.cxx b/cui/source/options/certpath.cxx
index 3b491da..630f5e0 100644
--- a/cui/source/options/certpath.cxx
+++ b/cui/source/options/certpath.cxx
@@ -29,18 +29,12 @@ CertPathDialog::CertPathDialog(weld::Window* pParent)
    , m_sAddDialogText(m_xBuilder->weld_label("certdir")->get_label())
    , m_sManualLabel(m_xBuilder->weld_label("manual")->get_label())
{
    // these are just used to get translated strings

    m_xCertPathList->set_size_request(m_xCertPathList->get_approximate_digit_width() * 70,
                                      m_xCertPathList->get_height_rows(6));

    std::vector<int> aWidths;
    aWidths.push_back(m_xCertPathList->get_checkbox_column_width());
    aWidths.push_back(m_xCertPathList->get_approximate_digit_width() * 20);
    m_xCertPathList->set_column_fixed_widths(aWidths);
    m_xCertPathList->set_toggle_columns_as_radio();

    m_xCertPathList->enable_toggle_buttons(weld::ColumnToggleType::Radio);
    m_xCertPathList->connect_toggled(LINK(this, CertPathDialog, CheckHdl_Impl));

    m_xManualButton->connect_clicked( LINK( this, CertPathDialog, ManualHdl_Impl ) );
    m_xOKButton->connect_clicked( LINK( this, CertPathDialog, OKHdl_Impl ) );

@@ -159,7 +153,7 @@ IMPL_LINK(CertPathDialog, CheckHdl_Impl, const weld::TreeView::iter_col&, rRowCo

void CertPathDialog::HandleEntryChecked(int nRow)
{
    const bool bChecked = m_xCertPathList->get_toggle(nRow, 0) == TRISTATE_TRUE;
    const bool bChecked = m_xCertPathList->get_toggle(nRow) == TRISTATE_TRUE;
    if (bChecked)
    {
        // we have radio button behavior -> so uncheck the other entries
@@ -168,7 +162,7 @@ void CertPathDialog::HandleEntryChecked(int nRow)
        for (int i = 0; i < nCount; ++i)
        {
            if (i != nRow)
                m_xCertPathList->set_toggle(i, TRISTATE_FALSE, 0);
                m_xCertPathList->set_toggle(i, TRISTATE_FALSE);
        }
    }
}
@@ -182,12 +176,12 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
        //already exists, just select the original one
        if (sCertPath == rPath)
        {
            const bool bWantSelected = bSelect || m_xCertPathList->get_toggle(i, 0);
            m_xCertPathList->set_toggle(i, bWantSelected ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            const bool bWantSelected = bSelect || m_xCertPathList->get_toggle(i);
            m_xCertPathList->set_toggle(i, bWantSelected ? TRISTATE_TRUE : TRISTATE_FALSE);
            HandleEntryChecked(i);
            return;
        }
        else if (m_xCertPathList->get_text(i, 1) == rProfile)
        else if (m_xCertPathList->get_text(i, 0) == rProfile)
            nRow = i;
    }

@@ -199,9 +193,9 @@ void CertPathDialog::AddCertPath(const OUString &rProfile, const OUString &rPath
        m_xCertPathList->append();
        nRow = m_xCertPathList->n_children() - 1;
    }
    m_xCertPathList->set_toggle(nRow, bSelect ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xCertPathList->set_text(nRow, rProfile, 1);
    m_xCertPathList->set_text(nRow, rPath, 2);
    m_xCertPathList->set_toggle(nRow, bSelect ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xCertPathList->set_text(nRow, rProfile, 0);
    m_xCertPathList->set_text(nRow, rPath, 1);
    m_xCertPathList->set_id(nRow, rPath);
    HandleEntryChecked(nRow);
}
diff --git a/cui/source/options/fontsubs.cxx b/cui/source/options/fontsubs.cxx
index d6e724f..d0bb9ff 100644
--- a/cui/source/options/fontsubs.cxx
+++ b/cui/source/options/fontsubs.cxx
@@ -54,14 +54,15 @@ SvxFontSubstTabPage::SvxFontSubstTabPage(weld::Container* pPage, weld::DialogCon

    m_xCheckLB->set_size_request(m_xCheckLB->get_approximate_digit_width() * 60,
                                 m_xCheckLB->get_height_rows(8));
    m_xCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
    m_xCheckLB->set_help_id(HID_OFA_FONT_SUBST_CLB);
    m_xCheckLB->set_selection_mode(SelectionMode::Multiple);

    setColSizes(m_xCheckLB->get_size_request());
    m_xCheckLB->connect_size_allocate(LINK(this, SvxFontSubstTabPage, ResizeHdl));

    m_xCheckLB->set_centered_column(0);
    m_xCheckLB->set_centered_column(1);
    m_xCheckLB->set_centered_column(2);

    Link<weld::ComboBox&,void> aLink2(LINK(this, SvxFontSubstTabPage, SelectComboBoxHdl));
    Link<weld::Button&,void> aClickLink(LINK(this, SvxFontSubstTabPage, ClickHdl));
@@ -114,15 +115,14 @@ IMPL_LINK(SvxFontSubstTabPage, HeaderBarClick, int, nColumn, void)

void SvxFontSubstTabPage::setColSizes(const Size& rSize)
{
    int nW1 = m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(3)).Width();
    int nW2 = m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(4)).Width();
    int nW1 = m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(2)).Width();
    int nW2 = m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(3)).Width();
    int nMax = std::max( nW1, nW2 ) + 6; // width of the longest header + a little offset
    int nMin = m_xCheckLB->get_checkbox_column_width();
    nMax = std::max(nMax, nMin);
    const int nDoubleMax = 2*nMax;
    const int nRest = rSize.Width() - nDoubleMax;
    std::vector<int> aWidths;
    aWidths.push_back(1);   // just abandon the built-in column for checkbuttons and use another
    aWidths.push_back(nMax);
    aWidths.push_back(nMax);
    aWidths.push_back(nRest/2);
@@ -152,10 +152,10 @@ bool  SvxFontSubstTabPage::FillItemSet( SfxItemSet* )

    m_xCheckLB->all_foreach([this](weld::TreeIter& rIter) {
        SubstitutionStruct aAdd;
        aAdd.sFont = m_xCheckLB->get_text(rIter, 3);
        aAdd.sReplaceBy = m_xCheckLB->get_text(rIter, 4);
        aAdd.bReplaceAlways = m_xCheckLB->get_toggle(rIter, 1);
        aAdd.bReplaceOnScreenOnly = m_xCheckLB->get_toggle(rIter, 2);
        aAdd.sFont = m_xCheckLB->get_text(rIter, 2);
        aAdd.sReplaceBy = m_xCheckLB->get_text(rIter, 3);
        aAdd.bReplaceAlways = m_xCheckLB->get_toggle(rIter, 0);
        aAdd.bReplaceOnScreenOnly = m_xCheckLB->get_toggle(rIter, 1);
        m_xConfig->AddSubstitution(aAdd);
        return false;
    });
@@ -215,17 +215,17 @@ void  SvxFontSubstTabPage::Reset( const SfxItemSet* )
    {
        m_xCheckLB->append(xIter.get());
        const SubstitutionStruct* pSubs = m_xConfig->GetSubstitution(i);
        m_xCheckLB->set_toggle(*xIter, pSubs->bReplaceAlways ? TRISTATE_TRUE : TRISTATE_FALSE, 1);
        m_xCheckLB->set_toggle(*xIter, pSubs->bReplaceOnScreenOnly ? TRISTATE_TRUE : TRISTATE_FALSE, 2);
        m_xCheckLB->set_text(*xIter, pSubs->sFont, 3);
        m_xCheckLB->set_text(*xIter, pSubs->sReplaceBy, 4);
        m_xCheckLB->set_toggle(*xIter, pSubs->bReplaceAlways ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xCheckLB->set_toggle(*xIter, pSubs->bReplaceOnScreenOnly ? TRISTATE_TRUE : TRISTATE_FALSE, 1);
        m_xCheckLB->set_text(*xIter, pSubs->sFont, 2);
        m_xCheckLB->set_text(*xIter, pSubs->sReplaceBy, 3);
    }

    m_xCheckLB->thaw();

    m_xCheckLB->make_sorted();
    m_xCheckLB->set_sort_column(3);
    m_xCheckLB->set_sort_indicator(TRISTATE_TRUE, 3);
    m_xCheckLB->set_sort_column(2);
    m_xCheckLB->set_sort_indicator(TRISTATE_TRUE, 2);

    CheckEnable();

@@ -297,7 +297,7 @@ void SvxFontSubstTabPage::SelectHdl(const weld::Widget* pWin)
            if (nPos != -1)
            {
                // change entry
                m_xCheckLB->set_text(nPos, m_xFont2CB->get_active_text(), 4);
                m_xCheckLB->set_text(nPos, m_xFont2CB->get_active_text(), 3);
                m_xCheckLB->select(nPos);
            }
            else
@@ -308,10 +308,10 @@ void SvxFontSubstTabPage::SelectHdl(const weld::Widget* pWin)

                std::unique_ptr<weld::TreeIter> xIter(m_xCheckLB->make_iterator());
                m_xCheckLB->append(xIter.get());
                m_xCheckLB->set_toggle(*xIter, TRISTATE_FALSE, 0);
                m_xCheckLB->set_toggle(*xIter, TRISTATE_FALSE, 1);
                m_xCheckLB->set_toggle(*xIter, TRISTATE_FALSE, 2);
                m_xCheckLB->set_text(*xIter, sFont1, 3);
                m_xCheckLB->set_text(*xIter, sFont2, 4);
                m_xCheckLB->set_text(*xIter, sFont1, 2);
                m_xCheckLB->set_text(*xIter, sFont2, 3);
                m_xCheckLB->select(*xIter);
            }
        }
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index d9a54e0..16d30cf 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -88,15 +88,16 @@ SvxJavaOptionsPage::SvxJavaOptionsPage(weld::Container* pPage, weld::DialogContr
    m_xJavaList->set_size_request(m_xJavaList->get_approximate_digit_width() * 30,
                                  m_xJavaList->get_height_rows(8));

    m_xJavaList->enable_toggle_buttons(weld::ColumnToggleType::Radio);
    m_xJavaList->connect_toggled( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) );
    m_xJavaList->connect_changed( LINK( this, SvxJavaOptionsPage, SelectHdl_Impl ) );

    std::vector<int> aWidths;
    aWidths.push_back(m_xJavaList->get_checkbox_column_width());
    aWidths.push_back(m_xJavaList->get_pixel_size("Sun Microsystems Inc.").Width());
    m_xJavaList->set_column_fixed_widths(aWidths);
    m_xJavaList->set_toggle_columns_as_radio();

    m_xJavaEnableCB->connect_clicked( LINK( this, SvxJavaOptionsPage, EnableHdl_Impl ) );
    m_xJavaList->connect_toggled( LINK( this, SvxJavaOptionsPage, CheckHdl_Impl ) );
    m_xJavaList->connect_changed( LINK( this, SvxJavaOptionsPage, SelectHdl_Impl ) );
    m_xAddBtn->connect_clicked( LINK( this, SvxJavaOptionsPage, AddHdl_Impl ) );
    m_xParameterBtn->connect_clicked( LINK( this, SvxJavaOptionsPage, ParameterHdl_Impl ) );
    m_xClassPathBtn->connect_clicked( LINK( this, SvxJavaOptionsPage, ClassPathHdl_Impl ) );
diff --git a/cui/source/options/optlingu.cxx b/cui/source/options/optlingu.cxx
index da4aeb8..c925dab 100644
--- a/cui/source/options/optlingu.cxx
+++ b/cui/source/options/optlingu.cxx
@@ -849,12 +849,9 @@ SvxLinguTabPage::SvxLinguTabPage(weld::Container* pPage, weld::DialogController*
    , m_xLinguOptionsEditPB(m_xBuilder->weld_button("linguoptionsedit"))
    , m_xMoreDictsLink(m_xBuilder->weld_link_button("moredictslink"))
{
    std::vector<int> aWidths;
    aWidths.push_back(m_xLinguModulesCLB->get_checkbox_column_width());

    m_xLinguModulesCLB->set_column_fixed_widths(aWidths);
    m_xLinguDicsCLB->set_column_fixed_widths(aWidths);
    m_xLinguOptionsCLB->set_column_fixed_widths(aWidths);
    m_xLinguModulesCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
    m_xLinguDicsCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
    m_xLinguOptionsCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    m_xLinguModulesCLB->connect_changed( LINK( this, SvxLinguTabPage, SelectHdl_Impl ));
    m_xLinguModulesCLB->connect_row_activated(LINK(this, SvxLinguTabPage, BoxDoubleClickHdl_Impl));
@@ -994,7 +991,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
        DicUserData aData(m_xLinguDicsCLB->get_id(i).toUInt32());
        if (aData.GetEntryId() < nDics)
        {
            bool bChecked = m_xLinguDicsCLB->get_toggle(i, 0) == TRISTATE_TRUE;
            bool bChecked = m_xLinguDicsCLB->get_toggle(i) == TRISTATE_TRUE;
            uno::Reference< XDictionary > xDic( aDics.getConstArray()[ i ] );
            if (xDic.is())
            {
@@ -1027,7 +1024,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
        Any aAny;
        if (aData.IsCheckable())
        {
            bool bChecked = m_xLinguOptionsCLB->get_toggle(j, 0) == TRISTATE_TRUE;
            bool bChecked = m_xLinguOptionsCLB->get_toggle(j) == TRISTATE_TRUE;
            aAny <<= bChecked;
        }
        else if (aData.HasNumericValue())
@@ -1052,7 +1049,7 @@ bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
    }

    // automatic spell checking
    bool bNewAutoCheck = m_xLinguOptionsCLB->get_toggle(EID_SPELL_AUTO, 0) == TRISTATE_TRUE;
    bool bNewAutoCheck = m_xLinguOptionsCLB->get_toggle(EID_SPELL_AUTO) == TRISTATE_TRUE;
    const SfxPoolItem* pOld = GetOldItem( *rCoreSet, SID_AUTOSPELL_CHECK );
    if ( !pOld || static_cast<const SfxBoolItem*>(pOld)->GetValue() != bNewAutoCheck )
    {
@@ -1096,8 +1093,8 @@ void SvxLinguTabPage::AddDicBoxEntry(
    int nEntry = m_xLinguDicsCLB->n_children() - 1;
    DicUserData aData( GetDicUserData( rxDic, nIdx ) );
    m_xLinguDicsCLB->set_id(nEntry, OUString::number(aData.GetUserData()));
    m_xLinguDicsCLB->set_toggle(nEntry, aData.IsChecked() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguDicsCLB->set_text(nEntry, aTxt, 1);  // append at end
    m_xLinguDicsCLB->set_toggle(nEntry, aData.IsChecked() ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguDicsCLB->set_text(nEntry, aTxt, 0);  // append at end

    m_xLinguDicsCLB->thaw();
}
@@ -1139,8 +1136,8 @@ void SvxLinguTabPage::UpdateModulesBox_Impl()
        const ServiceInfo_Impl &rInfo = rAllDispSrvcArr[i];
        m_xLinguModulesCLB->append();
        m_xLinguModulesCLB->set_id(i, OUString::number(reinterpret_cast<sal_Int64>(&rInfo)));
        m_xLinguModulesCLB->set_toggle(i, rInfo.bConfigured ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xLinguModulesCLB->set_text(i, rInfo.sDisplayName, 1);
        m_xLinguModulesCLB->set_toggle(i, rInfo.bConfigured ? TRISTATE_TRUE : TRISTATE_FALSE);
        m_xLinguModulesCLB->set_text(i, rInfo.sDisplayName, 0);
    }
    if (nDispSrvcCount)
    {
@@ -1179,8 +1176,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
    if (pItem)
        bVal = static_cast<const SfxBoolItem *>(pItem)->GetValue();
    nUserData = OptionsUserData( EID_SPELL_AUTO, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sSpellAuto, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sSpellAuto, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1188,8 +1185,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_GRAMMAR_AUTO ) >>= bVal;
    nUserData = OptionsUserData( EID_GRAMMAR_AUTO, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sGrammarAuto, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sGrammarAuto, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1197,8 +1194,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_SPELL_UPPER_CASE ) >>= bVal;
    nUserData = OptionsUserData( EID_CAPITAL_WORDS, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sCapitalWords, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sCapitalWords, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1206,8 +1203,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_SPELL_WITH_DIGITS ) >>= bVal;
    nUserData = OptionsUserData( EID_WORDS_WITH_DIGITS, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sWordsWithDigits, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sWordsWithDigits, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1215,8 +1212,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_SPELL_SPECIAL ) >>= bVal;
    nUserData = OptionsUserData( EID_SPELL_SPECIAL, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sSpellSpecial, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sSpellSpecial, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1224,7 +1221,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_HYPH_MIN_WORD_LENGTH ) >>= nVal;
    nUserData = OptionsUserData( EID_NUM_MIN_WORDLEN, true, static_cast<sal_uInt16>(nVal), false, false).GetUserData();
    m_xLinguOptionsCLB->set_text(nEntry, sNumMinWordlen + " " + OUString::number(nVal), 1);
    m_xLinguOptionsCLB->set_text(nEntry, sNumMinWordlen + " " + OUString::number(nVal), 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
    nUPN_HYPH_MIN_WORD_LENGTH = nEntry;

@@ -1240,7 +1237,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
    if (pHyp)
        nVal = static_cast<sal_Int16>(pHyp->GetMinLead());
    nUserData = OptionsUserData( EID_NUM_PRE_BREAK, true, static_cast<sal_uInt16>(nVal), false, false).GetUserData();
    m_xLinguOptionsCLB->set_text(nEntry, sNumPreBreak + " " + OUString::number(nVal), 1);
    m_xLinguOptionsCLB->set_text(nEntry, sNumPreBreak + " " + OUString::number(nVal), 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
    nUPN_HYPH_MIN_LEADING = nEntry;

@@ -1251,7 +1248,7 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )
    if (pHyp)
        nVal = static_cast<sal_Int16>(pHyp->GetMinTrail());
    nUserData = OptionsUserData( EID_NUM_POST_BREAK, true, static_cast<sal_uInt16>(nVal), false, false).GetUserData();
    m_xLinguOptionsCLB->set_text(nEntry, sNumPostBreak + " " + OUString::number(nVal), 1);
    m_xLinguOptionsCLB->set_text(nEntry, sNumPostBreak + " " + OUString::number(nVal), 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));
    nUPN_HYPH_MIN_TRAILING = nEntry;

@@ -1260,8 +1257,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_HYPH_AUTO ) >>= bVal;
    nUserData = OptionsUserData( EID_HYPH_AUTO, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sHyphAuto, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sHyphAuto, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->append();
@@ -1269,8 +1266,8 @@ void SvxLinguTabPage::Reset( const SfxItemSet* rSet )

    aLngCfg.GetProperty( UPN_IS_HYPH_SPECIAL ) >>= bVal;
    nUserData = OptionsUserData( EID_HYPH_SPECIAL, false, 0, true, bVal).GetUserData();
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xLinguOptionsCLB->set_text(nEntry, sHyphSpecial, 1);
    m_xLinguOptionsCLB->set_toggle(nEntry, bVal ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xLinguOptionsCLB->set_text(nEntry, sHyphSpecial, 0);
    m_xLinguOptionsCLB->set_id(nEntry, OUString::number(nUserData));

    m_xLinguOptionsCLB->thaw();
@@ -1312,15 +1309,15 @@ IMPL_LINK(SvxLinguTabPage, ModulesBoxCheckButtonHdl_Impl, const weld::TreeView::
{
    if (!pLinguData)
        return;
    pLinguData->Reconfigure(m_xLinguModulesCLB->get_text(rRowCol.first, 1),
                            m_xLinguModulesCLB->get_toggle(rRowCol.first, 0) == TRISTATE_TRUE);
    pLinguData->Reconfigure(m_xLinguModulesCLB->get_text(rRowCol.first),
                            m_xLinguModulesCLB->get_toggle(rRowCol.first) == TRISTATE_TRUE);
}

IMPL_LINK(SvxLinguTabPage, DicsBoxCheckButtonHdl_Impl, const weld::TreeView::iter_col&, rRowCol, void)
{
    const uno::Reference<XDictionary> &rDic = aDics.getConstArray()[m_xLinguDicsCLB->get_iter_index_in_parent(rRowCol.first)];
    if (LinguMgr::GetIgnoreAllList() == rDic)
        m_xLinguDicsCLB->set_toggle(rRowCol.first, TRISTATE_TRUE, 0);
        m_xLinguDicsCLB->set_toggle(rRowCol.first, TRISTATE_TRUE);
}

IMPL_LINK(SvxLinguTabPage, ClickHdl_Impl, weld::Button&, rBtn, void)
@@ -1473,11 +1470,11 @@ IMPL_LINK(SvxLinguTabPage, ClickHdl_Impl, weld::Button&, rBtn, void)
                        aData.SetNumericValue( static_cast<sal_uInt8>(nVal) ); //! sets IsModified !
                        m_xLinguOptionsCLB->set_id(nEntry, OUString::number(aData.GetUserData()));
                        if (nEntry == nUPN_HYPH_MIN_WORD_LENGTH)
                            m_xLinguOptionsCLB->set_text(nEntry, sNumMinWordlen + " " + OUString::number(nVal), 1);
                            m_xLinguOptionsCLB->set_text(nEntry, sNumMinWordlen + " " + OUString::number(nVal), 0);
                        else if (nEntry == nUPN_HYPH_MIN_LEADING)
                            m_xLinguOptionsCLB->set_text(nEntry, sNumPreBreak + " " + OUString::number(nVal), 1);
                            m_xLinguOptionsCLB->set_text(nEntry, sNumPreBreak + " " + OUString::number(nVal), 0);
                        else if (nEntry == nUPN_HYPH_MIN_TRAILING)
                            m_xLinguOptionsCLB->set_text(nEntry, sNumPostBreak + " " + OUString::number(nVal), 1);
                            m_xLinguOptionsCLB->set_text(nEntry, sNumPostBreak + " " + OUString::number(nVal), 0);
                        m_xLinguOptionsCLB->set_id(nEntry, OUString::number(aData.GetUserData()));
                    }
                }
@@ -1556,9 +1553,7 @@ SvxEditModulesDlg::SvxEditModulesDlg(weld::Window* pParent, SvxLinguData_Impl& r
    m_xModulesCLB->set_size_request(m_xModulesCLB->get_approximate_digit_width() * 40,
                                    m_xModulesCLB->get_height_rows(12));

    std::vector<int> aWidths;
    aWidths.push_back(m_xModulesCLB->get_checkbox_column_width());
    m_xModulesCLB->set_column_fixed_widths(aWidths);
    m_xModulesCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    pDefaultLinguData.reset( new SvxLinguData_Impl( rLinguData ) );

@@ -1639,7 +1634,7 @@ IMPL_LINK( SvxEditModulesDlg, BoxCheckButtonHdl_Impl, const weld::TreeView::iter
        pData = reinterpret_cast<ModuleUserData_Impl*>(m_xModulesCLB->get_id(i).toInt64());
        if (!pData->IsParent() && pData->GetType() == TYPE_HYPH && i != nPos)
        {
            m_xModulesCLB->set_toggle(i, TRISTATE_FALSE, 0);
            m_xModulesCLB->set_toggle(i, TRISTATE_FALSE);
        }
    }
}
@@ -1696,8 +1691,8 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)
                OUString* pChange = aChange.getArray();
                pChange[nStart] = pData->GetImplName();
                bChanged |= pData->GetIndex() != nLocalIndex ||
                    static_cast<TriState>(pData->IsChecked()) != m_xModulesCLB->get_toggle(i, 0);
                if (m_xModulesCLB->get_toggle(i, 0))
                    static_cast<TriState>(pData->IsChecked()) != m_xModulesCLB->get_toggle(i);
                if (m_xModulesCLB->get_toggle(i))
                    nStart++;
                ++nLocalIndex;
            }
@@ -1728,8 +1723,8 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)
        OUString sId(OUString::number(reinterpret_cast<sal_Int64>(pUserData)));
        m_xModulesCLB->append(nullptr);
        m_xModulesCLB->set_id(nRow, sId);
        m_xModulesCLB->set_text(nRow, sSpell, 1);
        m_xModulesCLB->set_text_emphasis(nRow, true, 1);
        m_xModulesCLB->set_text(nRow, sSpell, 0);
        m_xModulesCLB->set_text_emphasis(nRow, true, 0);
        ++nRow;

        Sequence< OUString > aNames( rLinguData.GetSortedImplNames( eCurLanguage, TYPE_SPELL ) );
@@ -1765,9 +1760,9 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)

                m_xModulesCLB->append(nullptr);
                m_xModulesCLB->set_id(nRow, sId);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xModulesCLB->set_text(nRow, aTxt, 1);
                m_xModulesCLB->set_text_emphasis(nRow, false, 1);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
                m_xModulesCLB->set_text(nRow, aTxt, 0);
                m_xModulesCLB->set_text_emphasis(nRow, false, 0);
                ++nRow;
            }
        }
@@ -1778,8 +1773,8 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)
        sId = OUString::number(reinterpret_cast<sal_Int64>(pUserData));
        m_xModulesCLB->append(nullptr);
        m_xModulesCLB->set_id(nRow, sId);
        m_xModulesCLB->set_text(nRow, sGrammar, 1);
        m_xModulesCLB->set_text_emphasis(nRow, true, 1);
        m_xModulesCLB->set_text(nRow, sGrammar, 0);
        m_xModulesCLB->set_text_emphasis(nRow, true, 0);
        ++nRow;

        aNames = rLinguData.GetSortedImplNames( eCurLanguage, TYPE_GRAMMAR );
@@ -1816,9 +1811,9 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)

                m_xModulesCLB->append(nullptr);
                m_xModulesCLB->set_id(nRow, sId);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xModulesCLB->set_text(nRow, aTxt, 1);
                m_xModulesCLB->set_text_emphasis(nRow, false, 1);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
                m_xModulesCLB->set_text(nRow, aTxt, 0);
                m_xModulesCLB->set_text_emphasis(nRow, false, 0);
                ++nRow;
            }
        }
@@ -1829,8 +1824,8 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)
        sId = OUString::number(reinterpret_cast<sal_Int64>(pUserData));
        m_xModulesCLB->append(nullptr);
        m_xModulesCLB->set_id(nRow, sId);
        m_xModulesCLB->set_text(nRow, sHyph, 1);
        m_xModulesCLB->set_text_emphasis(nRow, true, 1);
        m_xModulesCLB->set_text(nRow, sHyph, 0);
        m_xModulesCLB->set_text_emphasis(nRow, true, 0);
        ++nRow;

        aNames = rLinguData.GetSortedImplNames( eCurLanguage, TYPE_HYPH );
@@ -1866,9 +1861,9 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)

                m_xModulesCLB->append(nullptr);
                m_xModulesCLB->set_id(nRow, sId);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xModulesCLB->set_text(nRow, aTxt, 1);
                m_xModulesCLB->set_text_emphasis(nRow, false, 1);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
                m_xModulesCLB->set_text(nRow, aTxt, 0);
                m_xModulesCLB->set_text_emphasis(nRow, false, 0);
                ++nRow;
            }
        }
@@ -1879,8 +1874,8 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)
        sId = OUString::number(reinterpret_cast<sal_Int64>(pUserData));
        m_xModulesCLB->append(nullptr);
        m_xModulesCLB->set_id(nRow, sId);
        m_xModulesCLB->set_text(nRow, sThes, 1);
        m_xModulesCLB->set_text_emphasis(nRow, true, 1);
        m_xModulesCLB->set_text(nRow, sThes, 0);
        m_xModulesCLB->set_text_emphasis(nRow, true, 0);
        ++nRow;

        aNames = rLinguData.GetSortedImplNames( eCurLanguage, TYPE_THES );
@@ -1916,9 +1911,9 @@ void SvxEditModulesDlg::LangSelectHdl_Impl(const SvxLanguageBox* pBox)

                m_xModulesCLB->append(nullptr);
                m_xModulesCLB->set_id(nRow, sId);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xModulesCLB->set_text(nRow, aTxt, 1);
                m_xModulesCLB->set_text_emphasis(nRow, false, 1);
                m_xModulesCLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
                m_xModulesCLB->set_text(nRow, aTxt, 0);
                m_xModulesCLB->set_text_emphasis(nRow, false, 0);
                ++nRow;
            }
        }
@@ -1937,7 +1932,7 @@ IMPL_LINK( SvxEditModulesDlg, UpDownHdl_Impl, weld::Button&, rBtn, void )

    OUString sId(m_xModulesCLB->get_id(nCurPos));
    OUString sStr(m_xModulesCLB->get_text(nCurPos));
    bool bIsChecked = m_xModulesCLB->get_toggle(nCurPos, nCurPos);
    bool bIsChecked = m_xModulesCLB->get_toggle(nCurPos);

    m_xModulesCLB->remove(nCurPos);

@@ -1945,7 +1940,7 @@ IMPL_LINK( SvxEditModulesDlg, UpDownHdl_Impl, weld::Button&, rBtn, void )

    m_xModulesCLB->insert_text(nDestPos, sStr);
    m_xModulesCLB->set_id(nDestPos, sId);
    m_xModulesCLB->set_toggle(nDestPos, bIsChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xModulesCLB->set_toggle(nDestPos, bIsChecked ? TRISTATE_TRUE : TRISTATE_FALSE);

    m_xModulesCLB->thaw();

diff --git a/cui/source/tabpages/autocdlg.cxx b/cui/source/tabpages/autocdlg.cxx
index 4f1c0f3..807f0cd 100644
--- a/cui/source/tabpages/autocdlg.cxx
+++ b/cui/source/tabpages/autocdlg.cxx
@@ -189,9 +189,7 @@ OfaAutocorrOptionsPage::OfaAutocorrOptionsPage(weld::Container* pPage, weld::Dia
    , m_sAccidentalCaps(CuiResId(RID_SVXSTR_CORRECT_ACCIDENTAL_CAPS_LOCK))
    , m_xCheckLB(m_xBuilder->weld_tree_view("checklist"))
{
    std::vector<int> aWidths;
    aWidths.push_back(m_xCheckLB->get_checkbox_column_width());
    m_xCheckLB->set_column_fixed_widths(aWidths);
    m_xCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
    m_xCheckLB->set_size_request(-1, m_xCheckLB->get_height_rows(10));
}

@@ -215,14 +213,14 @@ bool OfaAutocorrOptionsPage::FillItemSet( SfxItemSet* )
    ACFlags nFlags = pAutoCorrect->GetFlags();

    int nPos = 0;
    pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect,          m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord,     m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl,      m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr,          m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash,        m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace,    m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock,      m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::Autocorrect,          m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartWord,     m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CapitalStartSentence, m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgWeightUnderl,      m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::SetINetAttr,          m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgToEnEmDash,        m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::IgnoreDoubleSpace,    m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    pAutoCorrect->SetAutoCorrFlag(ACFlags::CorrectCapsLock,      m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);

    bool bReturn = nFlags != pAutoCorrect->GetFlags();
    if(bReturn )
@@ -243,8 +241,8 @@ void OfaAutocorrOptionsPage::InsertEntry(const OUString& rTxt)
{
    m_xCheckLB->append();
    const int nRow = m_xCheckLB->n_children() - 1;
    m_xCheckLB->set_toggle(nRow, TRISTATE_FALSE, CBCOL_FIRST);
    m_xCheckLB->set_text(nRow, rTxt, 1);
    m_xCheckLB->set_toggle(nRow, TRISTATE_FALSE);
    m_xCheckLB->set_text(nRow, rTxt, 0);
}

void OfaAutocorrOptionsPage::Reset( const SfxItemSet* )
@@ -265,14 +263,14 @@ void OfaAutocorrOptionsPage::Reset( const SfxItemSet* )
    InsertEntry(m_sAccidentalCaps);

    int nPos = 0;
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::Autocorrect) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartWord) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartSentence) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgWeightUnderl) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::SetINetAttr) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgToEnEmDash) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::IgnoreDoubleSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CorrectCapsLock) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::Autocorrect) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartWord) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CapitalStartSentence) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgWeightUnderl) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::SetINetAttr) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::ChgToEnEmDash) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::IgnoreDoubleSpace) ? TRISTATE_TRUE : TRISTATE_FALSE );
    m_xCheckLB->set_toggle( nPos++, bool(nFlags & ACFlags::CorrectCapsLock) ? TRISTATE_TRUE : TRISTATE_FALSE );

    m_xCheckLB->thaw();
}
@@ -374,6 +372,7 @@ OfaSwAutoFmtOptionsPage::OfaSwAutoFmtOptionsPage(weld::Container* pPage, weld::D
{
    m_xCheckLB->connect_changed(LINK(this, OfaSwAutoFmtOptionsPage, SelectHdl));
    m_xCheckLB->connect_row_activated(LINK(this, OfaSwAutoFmtOptionsPage, DoubleClickEditHdl));
    m_xCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    std::vector<int> aWidths;
    aWidths.push_back(m_xCheckLB->get_pixel_size(m_xCheckLB->get_column_title(0)).Width() * 2);
@@ -1578,6 +1577,7 @@ OfaQuoteTabPage::OfaQuoteTabPage(weld::Container* pPage, weld::DialogController*

    if ( bShowSWOptions )
    {
        m_xSwCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
        std::vector<int> aWidths;
        aWidths.push_back(m_xSwCheckLB->get_pixel_size(m_xSwCheckLB->get_column_title(0)).Width() * 2);
        aWidths.push_back(m_xSwCheckLB->get_pixel_size(m_xSwCheckLB->get_column_title(1)).Width() * 2);
@@ -1586,9 +1586,7 @@ OfaQuoteTabPage::OfaQuoteTabPage(weld::Container* pPage, weld::DialogController*
    }
    else
    {
        std::vector<int> aWidths;
        aWidths.push_back(m_xSwCheckLB->get_checkbox_column_width());
        m_xCheckLB->set_column_fixed_widths(aWidths);
        m_xCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
        m_xSwCheckLB->hide();
    }

@@ -1619,9 +1617,9 @@ bool OfaQuoteTabPage::FillItemSet( SfxItemSet*  )
    if (m_xCheckLB->get_visible())
    {
        int nPos = 0;
        pAutoCorrect->SetAutoCorrFlag(ACFlags::AddNonBrkSpace, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
        pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgOrdinalNumber, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
        pAutoCorrect->SetAutoCorrFlag(ACFlags::TransliterateRTL, m_xCheckLB->get_toggle(nPos++, CBCOL_FIRST) == TRISTATE_TRUE);
        pAutoCorrect->SetAutoCorrFlag(ACFlags::AddNonBrkSpace, m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
        pAutoCorrect->SetAutoCorrFlag(ACFlags::ChgOrdinalNumber, m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
        pAutoCorrect->SetAutoCorrFlag(ACFlags::TransliterateRTL, m_xCheckLB->get_toggle(nPos++) == TRISTATE_TRUE);
    }

    bool bModified = false;
@@ -1723,14 +1721,16 @@ void OfaQuoteTabPage::Reset( const SfxItemSet* )
        m_xCheckLB->freeze();
        m_xCheckLB->clear();

        CreateEntry(*m_xCheckLB, sNonBrkSpace, CBCOL_FIRST, 1);
        CreateEntry(*m_xCheckLB, sOrdinal, CBCOL_FIRST, 1);
        CreateEntry(*m_xCheckLB, sTransliterateRTL, CBCOL_FIRST, 1);

        int nPos = 0;
        m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::AddNonBrkSpace) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
        m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::ChgOrdinalNumber) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
        m_xCheckLB->set_toggle(nPos++, bool(nFlags & ACFlags::TransliterateRTL) ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
        m_xCheckLB->append();
        m_xCheckLB->set_toggle(nPos, bool(nFlags & ACFlags::AddNonBrkSpace) ? TRISTATE_TRUE : TRISTATE_FALSE);
        m_xCheckLB->set_text(nPos++, sNonBrkSpace, 0);
        m_xCheckLB->append();
        m_xCheckLB->set_toggle(nPos, bool(nFlags & ACFlags::ChgOrdinalNumber) ? TRISTATE_TRUE : TRISTATE_FALSE);
        m_xCheckLB->set_text(nPos++, sOrdinal, 0);
        m_xCheckLB->append();
        m_xCheckLB->set_toggle(nPos, bool(nFlags & ACFlags::TransliterateRTL) ? TRISTATE_TRUE : TRISTATE_FALSE);
        m_xCheckLB->set_text(nPos++, sTransliterateRTL, 0);

        m_xCheckLB->thaw();
    }
@@ -2134,9 +2134,7 @@ OfaSmartTagOptionsTabPage::OfaSmartTagOptionsTabPage(weld::Container* pPage, wel
    m_xSmartTagTypesLB->set_size_request(m_xSmartTagTypesLB->get_approximate_digit_width() * 50,
                                         m_xSmartTagTypesLB->get_height_rows(6));

    std::vector<int> aWidths;
    aWidths.push_back(m_xSmartTagTypesLB->get_checkbox_column_width());
    m_xSmartTagTypesLB->set_column_fixed_widths(aWidths);
    m_xSmartTagTypesLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    // set the handlers:
    m_xMainCB->connect_toggled(LINK(this, OfaSmartTagOptionsTabPage, CheckHdl));
@@ -2218,8 +2216,8 @@ void OfaSmartTagOptionsTabPage::FillListBox( const SmartTagMgr& rSmartTagMgr )
            m_xSmartTagTypesLB->append();
            const int nRow = m_xSmartTagTypesLB->n_children() - 1;
            const bool bCheck = rSmartTagMgr.IsSmartTagTypeEnabled( aSmartTagType );
            m_xSmartTagTypesLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, CBCOL_FIRST);
            m_xSmartTagTypesLB->set_text(nRow, aLBEntry, 1);
            m_xSmartTagTypesLB->set_toggle(nRow, bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
            m_xSmartTagTypesLB->set_text(nRow, aLBEntry, 0);
            m_xSmartTagTypesLB->set_id(nRow, OUString::number(reinterpret_cast<sal_Int64>(new ImplSmartTagLBUserData(aSmartTagType, xRec, j))));
        }
    }
@@ -2293,7 +2291,7 @@ bool OfaSmartTagOptionsTabPage::FillItemSet( SfxItemSet* )
    for (int i = 0; i < nCount; ++i)
    {
        const ImplSmartTagLBUserData* pUserData = reinterpret_cast<ImplSmartTagLBUserData*>(m_xSmartTagTypesLB->get_id(i).toInt64());
        const bool bChecked = m_xSmartTagTypesLB->get_toggle(i, CBCOL_FIRST) == TRISTATE_TRUE;
        const bool bChecked = m_xSmartTagTypesLB->get_toggle(i) == TRISTATE_TRUE;
        const bool bIsCurrentlyEnabled = pSmartTagMgr->IsSmartTagTypeEnabled( pUserData->maSmartTagType );

        bModifiedSmartTagTypes = bModifiedSmartTagTypes || ( !bChecked != !bIsCurrentlyEnabled );
diff --git a/cui/uiconfig/ui/applyautofmtpage.ui b/cui/uiconfig/ui/applyautofmtpage.ui
index 45ca15d..35abba5 100644
--- a/cui/uiconfig/ui/applyautofmtpage.ui
+++ b/cui/uiconfig/ui/applyautofmtpage.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.22.2 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkTreeStore" id="liststore1">
@@ -8,6 +8,8 @@
      <column type="gboolean"/>
      <!-- column-name check2 -->
      <column type="gboolean"/>
      <!-- column-name check3 -->
      <column type="gboolean"/>
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name id -->
@@ -16,10 +18,14 @@
      <column type="gboolean"/>
      <!-- column-name checkvis2 -->
      <column type="gboolean"/>
      <!-- column-name checkvis3 -->
      <column type="gboolean"/>
      <!-- column-name checktri1 -->
      <column type="gboolean"/>
      <!-- column-name checktri2 -->
      <column type="gboolean"/>
      <!-- column-name checktri3 -->
      <column type="gboolean"/>
    </columns>
  </object>
  <object class="GtkBox" id="ApplyAutoFmtPage">
@@ -122,10 +128,17 @@
                        <property name="title" translatable="yes" context="applyautofmtpage|m">[M]</property>
                        <property name="alignment">0.5</property>
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer0"/>
                          <attributes>
                            <attribute name="visible">5</attribute>
                            <attribute name="active">0</attribute>
                          </attributes>
                        </child>
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer1"/>
                          <attributes>
                            <attribute name="visible">4</attribute>
                            <attribute name="active">0</attribute>
                            <attribute name="visible">6</attribute>
                            <attribute name="active">1</attribute>
                          </attributes>
                        </child>
                      </object>
@@ -139,8 +152,8 @@
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer2"/>
                          <attributes>
                            <attribute name="visible">5</attribute>
                            <attribute name="active">1</attribute>
                            <attribute name="visible">7</attribute>
                            <attribute name="active">2</attribute>
                          </attributes>
                        </child>
                      </object>
@@ -152,7 +165,7 @@
                        <child>
                          <object class="GtkCellRendererText" id="cellrenderer3"/>
                          <attributes>
                            <attribute name="text">2</attribute>
                            <attribute name="text">3</attribute>
                          </attributes>
                        </child>
                      </object>
diff --git a/cui/uiconfig/ui/applylocalizedpage.ui b/cui/uiconfig/ui/applylocalizedpage.ui
index 57a8869..61ca9e4 100644
--- a/cui/uiconfig/ui/applylocalizedpage.ui
+++ b/cui/uiconfig/ui/applylocalizedpage.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.22.2 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkTreeStore" id="liststore1">
@@ -8,6 +8,8 @@
      <column type="gboolean"/>
      <!-- column-name check2 -->
      <column type="gboolean"/>
      <!-- column-name check3 -->
      <column type="gboolean"/>
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name id -->
@@ -16,10 +18,14 @@
      <column type="gboolean"/>
      <!-- column-name checkvis2 -->
      <column type="gboolean"/>
      <!-- column-name checkvis3 -->
      <column type="gboolean"/>
      <!-- column-name checktri1 -->
      <column type="gboolean"/>
      <!-- column-name checktri2 -->
      <column type="gboolean"/>
      <!-- column-name checktri3 -->
      <column type="gboolean"/>
    </columns>
  </object>
  <object class="GtkTreeStore" id="liststore2">
@@ -86,10 +92,17 @@
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer1"/>
                          <attributes>
                            <attribute name="visible">4</attribute>
                            <attribute name="visible">5</attribute>
                            <attribute name="active">0</attribute>
                          </attributes>
                        </child>
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer9"/>
                          <attributes>
                            <attribute name="visible">6</attribute>
                            <attribute name="active">1</attribute>
                          </attributes>
                        </child>
                      </object>
                    </child>
                    <child>
@@ -101,8 +114,8 @@
                        <child>
                          <object class="GtkCellRendererToggle" id="cellrenderer2"/>
                          <attributes>
                            <attribute name="visible">5</attribute>
                            <attribute name="active">1</attribute>
                            <attribute name="visible">7</attribute>
                            <attribute name="active">2</attribute>
                          </attributes>
                        </child>
                      </object>
@@ -114,7 +127,7 @@
                        <child>
                          <object class="GtkCellRendererText" id="cellrenderer3"/>
                          <attributes>
                            <attribute name="text">2</attribute>
                            <attribute name="text">3</attribute>
                          </attributes>
                        </child>
                      </object>
diff --git a/cui/uiconfig/ui/certdialog.ui b/cui/uiconfig/ui/certdialog.ui
index 75642d9..de5a0d0 100644
--- a/cui/uiconfig/ui/certdialog.ui
+++ b/cui/uiconfig/ui/certdialog.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.22.2 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkTreeStore" id="liststore1">
@@ -26,7 +26,7 @@
    <property name="default_width">0</property>
    <property name="type_hint">normal</property>
    <property name="skip_pager_hint">True</property>
    <child>
    <child type="titlebar">
      <placeholder/>
    </child>
    <child internal-child="vbox">
@@ -193,6 +193,7 @@
                            <property name="visible">True</property>
                            <property name="can_focus">True</property>
                            <property name="receives_default">True</property>
                            <property name="hexpand">True</property>
                            <property name="vexpand">True</property>
                            <property name="model">liststore1</property>
                            <property name="search_column">0</property>
@@ -204,7 +205,7 @@
                              <object class="GtkTreeViewColumn" id="treeviewcolumn4">
                                <property name="resizable">True</property>
                                <property name="spacing">6</property>
                                <property name="alignment">0.5</property>
                                <property name="title" translatable="yes" context="certdialog|profile">Profile</property>
                                <child>
                                  <object class="GtkCellRendererToggle" id="cellrenderer5">
                                    <property name="radio">True</property>
@@ -214,13 +215,6 @@
                                    <attribute name="active">0</attribute>
                                  </attributes>
                                </child>
                              </object>
                            </child>
                            <child>
                              <object class="GtkTreeViewColumn" id="treeviewcolumn5">
                                <property name="resizable">True</property>
                                <property name="spacing">6</property>
                                <property name="title" translatable="yes" context="certdialog|profile">Profile</property>
                                <child>
                                  <object class="GtkCellRendererText" id="cellrenderer4"/>
                                  <attributes>
diff --git a/cui/uiconfig/ui/menuassignpage.ui b/cui/uiconfig/ui/menuassignpage.ui
index e89bc10..cfa87f1 100644
--- a/cui/uiconfig/ui/menuassignpage.ui
+++ b/cui/uiconfig/ui/menuassignpage.ui
@@ -557,22 +557,12 @@
                            <attribute name="active">0</attribute>
                          </attributes>
                        </child>
                      </object>
                    </child>
                    <child>
                      <object class="GtkTreeViewColumn" id="treeviewcolumn9">
                        <property name="spacing">6</property>
                        <child>
                          <object class="GtkCellRendererPixbuf" id="cellrenderertext9"/>
                          <attributes>
                            <attribute name="pixbuf">1</attribute>
                          </attributes>
                        </child>
                      </object>
                    </child>
                    <child>
                      <object class="GtkTreeViewColumn" id="treeviewcolumn10">
                        <property name="spacing">6</property>
                        <child>
                          <object class="GtkCellRendererText" id="cellrenderertext10"/>
                          <attributes>
@@ -620,10 +610,6 @@
                            <attribute name="pixbuf">0</attribute>
                          </attributes>
                        </child>
                      </object>
                    </child>
                    <child>
                      <object class="GtkTreeViewColumn" id="treeviewcolumn33">
                        <child>
                          <object class="GtkCellRendererText" id="cellrenderertext22"/>
                          <attributes>
diff --git a/cui/uiconfig/ui/multipathdialog.ui b/cui/uiconfig/ui/multipathdialog.ui
index 0f1e730..33ceed5 100644
--- a/cui/uiconfig/ui/multipathdialog.ui
+++ b/cui/uiconfig/ui/multipathdialog.ui
@@ -181,7 +181,7 @@
                                  <object class="GtkTreeViewColumn" id="treeviewcolumn4">
                                    <property name="resizable">True</property>
                                    <property name="spacing">6</property>
                                    <property name="alignment">0.5</property>
                                    <property name="title" translatable="yes" context="multipathdialog|pathlist">Path list</property>
                                    <child>
                                      <object class="GtkCellRendererToggle" id="cellrenderer5">
                                        <property name="radio">True</property>
@@ -191,13 +191,6 @@
                                        <attribute name="active">0</attribute>
                                      </attributes>
                                    </child>
                                  </object>
                                </child>
                                <child>
                                  <object class="GtkTreeViewColumn" id="treeviewcolumn5">
                                    <property name="resizable">True</property>
                                    <property name="spacing">6</property>
                                    <property name="title" translatable="yes" context="multipathdialog|pathlist">Path list</property>
                                    <child>
                                      <object class="GtkCellRendererText" id="cellrenderer4"/>
                                      <attributes>
diff --git a/cui/uiconfig/ui/optadvancedpage.ui b/cui/uiconfig/ui/optadvancedpage.ui
index 44baae1..f585793 100644
--- a/cui/uiconfig/ui/optadvancedpage.ui
+++ b/cui/uiconfig/ui/optadvancedpage.ui
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.22.2 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkTreeStore" id="liststore1">
    <columns>
      <!-- column-name check1 -->
      <column type="gboolean"/>
      <!-- column-name check2 -->
      <column type="gboolean"/>
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name text2 -->
@@ -14,8 +16,12 @@
      <column type="gchararray"/>
      <!-- column-name checkvis1 -->
      <column type="gboolean"/>
      <!-- column-name checkvis2 -->
      <column type="gboolean"/>
      <!-- column-name checktri1 -->
      <column type="gboolean"/>
      <!-- column-name checktri2 -->
      <column type="gboolean"/>
    </columns>
  </object>
  <object class="GtkBox" id="OptAdvancedPage">
@@ -194,10 +200,19 @@
                                                <property name="radio">True</property>
                                              </object>
                                              <attributes>
                                                <attribute name="visible">4</attribute>
                                                <attribute name="visible">5</attribute>
                                                <attribute name="active">0</attribute>
                                              </attributes>
                                            </child>
                                            <child>
                                              <object class="GtkCellRendererToggle" id="cellrenderer9">
                                                <property name="radio">True</property>
                                              </object>
                                              <attributes>
                                                <attribute name="visible">6</attribute>
                                                <attribute name="active">1</attribute>
                                              </attributes>
                                            </child>
                                          </object>
                                        </child>
                                        <child>
@@ -208,7 +223,7 @@
                                            <child>
                                              <object class="GtkCellRendererText" id="cellrenderer4"/>
                                              <attributes>
                                                <attribute name="text">1</attribute>
                                                <attribute name="text">2</attribute>
                                              </attributes>
                                            </child>
                                          </object>
@@ -221,7 +236,7 @@
                                            <child>
                                              <object class="GtkCellRendererText" id="cellrenderer1"/>
                                              <attributes>
                                                <attribute name="text">2</attribute>
                                                <attribute name="text">3</attribute>
                                              </attributes>
                                            </child>
                                          </object>
@@ -275,6 +290,9 @@
                                <property name="top_attach">0</property>
                              </packing>
                            </child>
                            <child>
                              <placeholder/>
                            </child>
                          </object>
                          <packing>
                            <property name="left_attach">0</property>
diff --git a/cui/uiconfig/ui/optfltrembedpage.ui b/cui/uiconfig/ui/optfltrembedpage.ui
index 3101278..f93b9df 100644
--- a/cui/uiconfig/ui/optfltrembedpage.ui
+++ b/cui/uiconfig/ui/optfltrembedpage.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<!-- Generated with glade 3.22.2 -->
<interface domain="cui">
  <requires lib="gtk+" version="3.18"/>
  <object class="GtkTreeStore" id="liststore1">
@@ -8,18 +8,24 @@
      <column type="gboolean"/>
      <!-- column-name check2 -->
      <column type="gboolean"/>
      <!-- column-name check3 -->
      <column type="gboolean"/>
      <!-- column-name text -->
      <column type="gchararray"/>
      <!-- column-name id -->
      <column type="gchararray"/>
      <!-- column-name checkvis1 -->
      <column type="gboolean"/>
      <!-- column-name checktri1 -->
      <column type="gboolean"/>
      <!-- column-name checkvis2 -->
      <column type="gboolean"/>
      <!-- column-name checkvis3 -->
      <column type="gboolean"/>
      <!-- column-name checktri1 -->
      <column type="gboolean"/>
      <!-- column-name checktri2 -->
      <column type="gboolean"/>
      <!-- column-name checktri3 -->
      <column type="gboolean"/>
    </columns>
  </object>
  <object class="GtkGrid" id="OptFilterPage">
@@ -84,10 +90,17 @@
                            <child>
                              <object class="GtkCellRendererToggle" id="cellrenderer5"/>
                              <attributes>
                                <attribute name="visible">4</attribute>
                                <attribute name="visible">5</attribute>
                                <attribute name="active">0</attribute>
                              </attributes>
                            </child>
                            <child>
                              <object class="GtkCellRendererToggle" id="cellrenderer8"/>
                              <attributes>
                                <attribute name="visible">6</attribute>
                                <attribute name="active">1</attribute>
                              </attributes>
                            </child>
                          </object>
                        </child>
                        <child>
@@ -99,8 +112,8 @@
                            <child>
                              <object class="GtkCellRendererToggle" id="cellrenderer7"/>
                              <attributes>
                                <attribute name="visible">4</attribute>
                                <attribute name="active">1</attribute>
                                <attribute name="visible">7</attribute>
                                <attribute name="active">2</attribute>
                              </attributes>
                            </child>
                          </object>
@@ -112,7 +125,7 @@
                            <child>
                              <object class="GtkCellRendererText" id="cellrenderer4"/>
                              <attributes>
                                <attribute name="text">2</attribute>
                                <attribute name="text">3</attribute>
                              </attributes>
                            </child>
                          </object>
diff --git a/cui/uiconfig/ui/optfontspage.ui b/cui/uiconfig/ui/optfontspage.ui
index 52524bd..b6a8295 100644
--- a/cui/uiconfig/ui/optfontspage.ui
+++ b/cui/uiconfig/ui/optfontspage.ui
@@ -137,6 +137,7 @@
                                  <object class="GtkTreeViewColumn" id="treeviewcolumn1">
                                    <property name="resizable">True</property>
                                    <property name="spacing">6</property>
                                    <property name="title" translatable="yes" context="optfontspage|always">Always</property>
                                    <child>
                                      <object class="GtkCellRendererToggle" id="cellrenderer1"/>
                                      <attributes>
@@ -144,13 +145,6 @@
                                        <attribute name="active">0</attribute>
                                      </attributes>
                                    </child>
                                  </object>
                                </child>
                                <child>
                                  <object class="GtkTreeViewColumn" id="treeviewcolumn4">
                                    <property name="resizable">True</property>
                                    <property name="spacing">6</property>
                                    <property name="title" translatable="yes" context="optfontspage|always">Always</property>
                                    <child>
                                      <object class="GtkCellRendererToggle" id="cellrenderer5"/>
                                      <attributes>
diff --git a/dbaccess/source/ui/control/tabletree.cxx b/dbaccess/source/ui/control/tabletree.cxx
index f608f85..2ec45c9 100644
--- a/dbaccess/source/ui/control/tabletree.cxx
+++ b/dbaccess/source/ui/control/tabletree.cxx
@@ -68,9 +68,9 @@ TableTreeListBox::TableTreeListBox(std::unique_ptr<weld::TreeView> xTreeView)
    , m_bVirtualRoot(false)
    , m_bNoEmptyFolders(false)
    , m_bShowToggles(true)
    , m_nTextColumn(1)
    , m_xTreeView(std::move(xTreeView))
{
    m_xTreeView->enable_toggle_buttons(weld::ColumnToggleType::Check);
}

void OTableTreeListBox::implSetDefaultImages()
@@ -359,7 +359,6 @@ void OTableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConn
void TableTreeListBox::DisableCheckButtons()
{
    m_bShowToggles = false;
    m_nTextColumn = 0;
}

void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConnection, const TNames& _rTables )
@@ -389,8 +388,9 @@ void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConne
            m_xTreeView->insert(nullptr, -1, nullptr, &sId, nullptr, nullptr, false, xRet.get());
            m_xTreeView->set_image(*xRet, sImageId, -1);
            if (m_bShowToggles)
                m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE, 0);
            m_xTreeView->set_text(*xRet, sRootEntryText, m_nTextColumn);
                m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE);
            m_xTreeView->set_text(*xRet, sRootEntryText, 0);
            m_xTreeView->set_text_emphasis(*xRet, false, 0);
        }

        if ( _rTables.empty() )
@@ -434,8 +434,9 @@ void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConne
                        m_xTreeView->insert(xRootEntry.get(), -1, nullptr, &sId, nullptr, nullptr, false, xRet.get());
                        m_xTreeView->set_image(*xRet, sImageId, -1);
                        if (m_bShowToggles)
                            m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE, 0);
                        m_xTreeView->set_text(*xRet, folderName, m_nTextColumn);
                            m_xTreeView->set_toggle(*xRet, TRISTATE_FALSE);
                        m_xTreeView->set_text(*xRet, folderName, 0);
                        m_xTreeView->set_text_emphasis(*xRet, false, 0);
                    }
                }
            }
@@ -451,14 +452,14 @@ void TableTreeListBox::UpdateTableList( const Reference< XConnection >& _rxConne

bool TableTreeListBox::isWildcardChecked(const weld::TreeIter& rEntry)
{
    return m_xTreeView->get_text_emphasis(rEntry, m_nTextColumn);
    return m_xTreeView->get_text_emphasis(rEntry, 0);
}

void TableTreeListBox::checkWildcard(weld::TreeIter& rEntry)
{
    if (!m_bShowToggles)
        return;
    m_xTreeView->set_toggle(rEntry, TRISTATE_TRUE, 0);
    m_xTreeView->set_toggle(rEntry, TRISTATE_TRUE);
    checkedButton_noBroadcast(rEntry);
}

@@ -489,7 +490,7 @@ void TableTreeListBox::checkedButton_noBroadcast(const weld::TreeIter& rEntry)
{
    if (!m_bShowToggles)
        return;
    TriState eState = m_xTreeView->get_toggle(rEntry, 0);
    TriState eState = m_xTreeView->get_toggle(rEntry);
    OSL_ENSURE(TRISTATE_INDET != eState, "OTableTreeListBox::CheckButtonHdl: user action which lead to TRISTATE?");

    if (m_xTreeView->iter_has_child(rEntry)) // if it has children, check those too
@@ -500,7 +501,7 @@ void TableTreeListBox::checkedButton_noBroadcast(const weld::TreeIter& rEntry)
        bool bSiblingEntry = m_xTreeView->iter_next_sibling(*xSiblingEntry);
        while (bChildEntry && (!bSiblingEntry || !xChildEntry->equal(*xSiblingEntry)))
        {
            m_xTreeView->set_toggle(*xChildEntry, eState, 0);
            m_xTreeView->set_toggle(*xChildEntry, eState);
            bChildEntry = m_xTreeView->iter_next(*xChildEntry);
        }
    }
@@ -508,7 +509,7 @@ void TableTreeListBox::checkedButton_noBroadcast(const weld::TreeIter& rEntry)
    if (m_xTreeView->is_selected(rEntry))
    {
        m_xTreeView->selected_foreach([this, eState](weld::TreeIter& rSelected){
            m_xTreeView->set_toggle(rSelected, eState, 0);
            m_xTreeView->set_toggle(rSelected, eState);
            if (m_xTreeView->iter_has_child(rSelected)) // if it has children, check those too
            {
                std::unique_ptr<weld::TreeIter> xChildEntry(m_xTreeView->make_iterator(&rSelected));
@@ -517,7 +518,7 @@ void TableTreeListBox::checkedButton_noBroadcast(const weld::TreeIter& rEntry)
                bool bSiblingEntry = m_xTreeView->iter_next_sibling(*xSiblingEntry);
                while (bChildEntry && (!bSiblingEntry || !xChildEntry->equal(*xSiblingEntry)))
                {
                    m_xTreeView->set_toggle(*xChildEntry, eState, 0);
                    m_xTreeView->set_toggle(*xChildEntry, eState);
                    bChildEntry = m_xTreeView->iter_next(*xChildEntry);
                }
            }
@@ -572,7 +573,7 @@ void TableTreeListBox::implEmphasize(const weld::TreeIter& rEntry, bool _bChecke
        ||  bAllObjectsEntryAffected            // or it is the "all objects" entry
        )
    {
        m_xTreeView->set_text_emphasis(rEntry, _bChecked, m_nTextColumn);
        m_xTreeView->set_text_emphasis(rEntry, _bChecked, 0);
    }

    if (_bUpdateDescendants)
@@ -710,8 +711,9 @@ void TableTreeListBox::implAddEntry(
            m_xTreeView->insert(xParentEntry.get(), -1, nullptr, &sId, nullptr, nullptr, false, xFolder.get());
            m_xTreeView->set_image(*xFolder, sImageId, -1);
            if (m_bShowToggles)
                m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE, 0);
            m_xTreeView->set_text(*xFolder, rFirstName, m_nTextColumn);
                m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE);
            m_xTreeView->set_text(*xFolder, rFirstName, 0);
            m_xTreeView->set_text_emphasis(*xFolder, false, 0);
        }
        xParentEntry = std::move(xFolder);
    }
@@ -727,8 +729,9 @@ void TableTreeListBox::implAddEntry(
            m_xTreeView->insert(xParentEntry.get(), -1, nullptr, &sId, nullptr, nullptr, false, xFolder.get());
            m_xTreeView->set_image(*xFolder, sImageId, -1);
            if (m_bShowToggles)
                m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE, 0);
            m_xTreeView->set_text(*xFolder, rSecondName, m_nTextColumn);
                m_xTreeView->set_toggle(*xFolder, TRISTATE_FALSE);
            m_xTreeView->set_text(*xFolder, rSecondName, 0);
            m_xTreeView->set_text_emphasis(*xFolder, false, 0);
        }
        xParentEntry = std::move(xFolder);
    }
@@ -745,8 +748,9 @@ void TableTreeListBox::implAddEntry(
        m_xTreeView->set_image(*xEntry, sImageId, -1);
    }
    if (m_bShowToggles)
        m_xTreeView->set_toggle(*xEntry, TRISTATE_FALSE, 0);
    m_xTreeView->set_text(*xEntry, sName, m_nTextColumn);
        m_xTreeView->set_toggle(*xEntry, TRISTATE_FALSE);
    m_xTreeView->set_text(*xEntry, sName, 0);
    m_xTreeView->set_text_emphasis(*xEntry, false, 0);
}

NamedDatabaseObject OTableTreeListBox::describeObject( SvTreeListEntry* _pEntry )
@@ -935,7 +939,7 @@ TriState TableTreeListBox::implDetermineState(weld::TreeIter& rEntry)
    if (!m_bShowToggles)
        return TRISTATE_FALSE;

    TriState eState = m_xTreeView->get_toggle(rEntry, 0);
    TriState eState = m_xTreeView->get_toggle(rEntry);
    if (!m_xTreeView->iter_has_child(rEntry))
        // nothing to do in this bottom-up routine if there are no children ...
        return eState;
@@ -996,7 +1000,7 @@ TriState TableTreeListBox::implDetermineState(weld::TreeIter& rEntry)
    }

    // finally set the entry to the state we just determined
    m_xTreeView->set_toggle(rEntry, eState, 0);
    m_xTreeView->set_toggle(rEntry, eState);

    return eState;
}
diff --git a/dbaccess/source/ui/dlg/tablespage.cxx b/dbaccess/source/ui/dlg/tablespage.cxx
index 8b91b35..2fa7195 100644
--- a/dbaccess/source/ui/dlg/tablespage.cxx
+++ b/dbaccess/source/ui/dlg/tablespage.cxx
@@ -138,7 +138,7 @@ namespace dbaui

            std::unique_ptr<weld::TreeIter> xEntry(m_xTablesList->GetEntryPosByName(sName, xSchema ? xSchema.get() : (xCatalog ? xCatalog.get() : xRootEntry.get())));
            if (xEntry)
                m_xTablesList->GetWidget().set_toggle(*xEntry, TRISTATE_TRUE, 0);
                m_xTablesList->GetWidget().set_toggle(*xEntry, TRISTATE_TRUE);
        }
        m_xTablesList->CheckButtons();
    }
@@ -299,7 +299,7 @@ namespace dbaui
        {
            do
            {
                m_xTablesList->GetWidget().set_toggle(*xEntry, _bCheck ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
                m_xTablesList->GetWidget().set_toggle(*xEntry, _bCheck ? TRISTATE_TRUE : TRISTATE_FALSE);
            }
            while (m_xTablesList->GetWidget().iter_next(*xEntry));
        }
@@ -350,7 +350,7 @@ namespace dbaui
            std::unique_ptr<weld::TreeIter> xSchema;
            std::unique_ptr<weld::TreeIter> xCatalog;

            if (m_xTablesList->GetWidget().get_toggle(*xEntry, 0) == TRISTATE_TRUE && !m_xTablesList->GetWidget().iter_has_child(*xEntry))
            if (m_xTablesList->GetWidget().get_toggle(*xEntry) == TRISTATE_TRUE && !m_xTablesList->GetWidget().iter_has_child(*xEntry))
            {   // checked and a leaf, which means it's no catalog, no schema, but a real table
                OUStringBuffer sComposedName;
                OUString sCatalog;
diff --git a/dbaccess/source/ui/inc/tabletree.hxx b/dbaccess/source/ui/inc/tabletree.hxx
index 58a6bba..30b3f74 100644
--- a/dbaccess/source/ui/inc/tabletree.hxx
+++ b/dbaccess/source/ui/inc/tabletree.hxx
@@ -143,7 +143,6 @@ class TableTreeListBox
    bool            m_bVirtualRoot;     // should the first entry be visible
    bool            m_bNoEmptyFolders;  // should empty catalogs/schematas be prevented from being displayed?
    bool            m_bShowToggles;     // show toggle buttons
    int             m_nTextColumn;      // column text is in, depends on if toggles are shown
    std::unique_ptr<weld::TreeView> m_xTreeView;

public:
diff --git a/dbaccess/source/ui/misc/WNameMatch.cxx b/dbaccess/source/ui/misc/WNameMatch.cxx
index 83ad642..75ff6e3 100644
--- a/dbaccess/source/ui/misc/WNameMatch.cxx
+++ b/dbaccess/source/ui/misc/WNameMatch.cxx
@@ -58,9 +58,7 @@ OWizNameMatching::OWizNameMatching(weld::Container* pPage, OCopyTableWizard* pWi
    m_xAll->connect_clicked(LINK(this,OWizNameMatching,AllNoneClickHdl));
    m_xNone->connect_clicked(LINK(this,OWizNameMatching,AllNoneClickHdl));

    std::vector<int> aWidths;
    aWidths.push_back(m_xCTRL_LEFT->get_checkbox_column_width());
    m_xCTRL_LEFT->set_column_fixed_widths(aWidths);
    m_xCTRL_LEFT->enable_toggle_buttons(weld::ColumnToggleType::Check);

    m_xCTRL_LEFT->connect_changed(LINK(this,OWizNameMatching,TableListClickHdl));
    m_xCTRL_RIGHT->connect_changed(LINK(this,OWizNameMatching,TableListRightSelectHdl));
@@ -132,7 +130,7 @@ bool OWizNameMatching::LeavePage()
            ++nPos;
        }

        if (m_xCTRL_LEFT->get_toggle(*xLeftEntry, 0) == TRISTATE_TRUE)
        if (m_xCTRL_LEFT->get_toggle(*xLeftEntry) == TRISTATE_TRUE)
        {
            OFieldDescription* pDestField = reinterpret_cast<OFieldDescription*>(m_xCTRL_RIGHT->get_id(*xRightEntry).toInt64());
            OSL_ENSURE(pDestField,"OWizNameMatching: OColumn can not be null!");
@@ -301,7 +299,7 @@ IMPL_LINK(OWizNameMatching, AllNoneClickHdl, weld::Button&, rButton, void)
{
    bool bAll = &rButton == m_xAll.get();
    m_xCTRL_LEFT->all_foreach([this, bAll](weld::TreeIter& rEntry){
        m_xCTRL_LEFT->set_toggle(rEntry, bAll ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xCTRL_LEFT->set_toggle(rEntry, bAll ? TRISTATE_TRUE : TRISTATE_FALSE);
        return false;
    });
}
@@ -312,17 +310,15 @@ void OWizNameMatching::FillListBox(weld::TreeView& rTreeView, const ODatabaseExp

    int nRow(0);

    const int nTextCol = bCheckButtons ? 1 : 0;

    for (auto const& elem : rList)
    {
        rTreeView.append();
        if (bCheckButtons)
        {
            bool bChecked = !elem->second->IsAutoIncrement();
            rTreeView.set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            rTreeView.set_toggle(nRow, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE);
        }
        rTreeView.set_text(nRow, elem->first, nTextCol);
        rTreeView.set_text(nRow, elem->first, 0);
        rTreeView.set_id(nRow, OUString::number(reinterpret_cast<sal_Int64>(elem->second)));
        ++nRow;
    }
diff --git a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
index cb161d6..5d65f4e 100644
--- a/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
+++ b/desktop/source/deployment/gui/dp_gui_updatedialog.cxx
@@ -455,9 +455,7 @@ UpdateDialog::UpdateDialog(
    m_xDescriptions->set_size_request(nWidth, nHeight);
    m_xUpdates->set_size_request(nWidth, nHeight);

    std::vector<int> aWidths;
    aWidths.push_back(m_xUpdates->get_checkbox_column_width());
    m_xUpdates->set_column_fixed_widths(aWidths);
    m_xUpdates->enable_toggle_buttons(weld::ColumnToggleType::Check);

    OSL_ASSERT(updateData != nullptr);

@@ -492,7 +490,7 @@ IMPL_LINK(UpdateDialog, entryToggled, const weld::TreeView::iter_col&, rRowCol, 
    // error's can't be enabled
    const UpdateDialog::Index* p = reinterpret_cast<UpdateDialog::Index const *>(m_xUpdates->get_id(rRowCol.first).toInt64());
    if (p->m_eKind == SPECIFIC_ERROR)
        m_xUpdates->set_toggle(rRowCol.first, TRISTATE_FALSE, 0);
        m_xUpdates->set_toggle(rRowCol.first, TRISTATE_FALSE);

    enableOk();
}
@@ -501,8 +499,8 @@ void UpdateDialog::insertItem(UpdateDialog::Index *pEntry, bool bEnabledCheckBox
{
    int nEntry = m_xUpdates->n_children();
    m_xUpdates->append();
    m_xUpdates->set_toggle(nEntry, bEnabledCheckBox ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xUpdates->set_text(nEntry, pEntry->m_aName, 1);
    m_xUpdates->set_toggle(nEntry, bEnabledCheckBox ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xUpdates->set_text(nEntry, pEntry->m_aName, 0);
    m_xUpdates->set_id(nEntry, OUString::number(reinterpret_cast<sal_Int64>(pEntry)));
}

@@ -587,7 +585,7 @@ void UpdateDialog::enableOk() {
    if (!m_xChecking->get_visible()) {
        int nChecked = 0;
        for (int i = 0, nCount = m_xUpdates->n_children(); i < nCount; ++i) {
            if (m_xUpdates->get_toggle(i, 0) == TRISTATE_TRUE)
            if (m_xUpdates->get_toggle(i) == TRISTATE_TRUE)
                ++nChecked;
        }
        m_xOk->set_sensitive(nChecked != 0);
@@ -987,7 +985,7 @@ IMPL_LINK_NOARG(UpdateDialog, okHandler, weld::Button&, void)
        UpdateDialog::Index const * p =
            reinterpret_cast< UpdateDialog::Index const * >(
                m_xUpdates->get_id(i).toInt64());
        if (p->m_eKind == ENABLED_UPDATE && m_xUpdates->get_toggle(i, 0) == TRISTATE_TRUE) {
        if (p->m_eKind == ENABLED_UPDATE && m_xUpdates->get_toggle(i) == TRISTATE_TRUE) {
            m_updateData.push_back( m_enabledUpdates[ p->m_nIndex ] );
        }
    }
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 8655b52..f3fc52a 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -747,6 +747,12 @@ public:
    virtual void set_mru_entries(const OUString& rEntries) = 0;
};

enum class ColumnToggleType
{
    Check,
    Radio
};

class VCL_DLLPUBLIC TreeIter
{
private:
@@ -759,6 +765,11 @@ public:
    virtual ~TreeIter() {}
};

/* Model column indexes are considered to begin at 0, but with special columns
   before index 0. A expander image column (and an additional optional toggle
   button column when enable_toggle_buttons is used). Column index -1 is
   reserved to access those columns.
*/
class VCL_DLLPUBLIC TreeView : virtual public Container
{
public:
@@ -899,8 +910,7 @@ public:
    */
    void connect_row_activated(const Link<TreeView&, bool>& rLink) { m_aRowActivatedHdl = rLink; }

    // Argument is a pair of row, col describing the node in non-tree mode.
    // If in tree mode, then retrieve the toggled node with get_cursor
    // Argument is a pair of iter, col describing the toggled node
    void connect_toggled(const Link<const iter_col&, void>& rLink) { m_aRadioToggleHdl = rLink; }

    void connect_column_clicked(const Link<int, void>& rLink) { m_aColumnClickedHdl = rLink; }
@@ -909,18 +919,28 @@ public:
    virtual OUString get_selected_text() const = 0;
    virtual OUString get_selected_id() const = 0;

    // call before inserting any content and connecting to toggle signals,
    // an pre-inserted checkbutton column will exist at the start of every row
    // inserted after this call which can be accessed with col index -1
    virtual void enable_toggle_buttons(ColumnToggleType eType) = 0;

    //by index
    virtual int get_selected_index() const = 0;
    //Don't select when frozen, select after thaw. Note selection doesn't survive a freeze.
    virtual void select(int pos) = 0;
    virtual void unselect(int pos) = 0;
    virtual void remove(int pos) = 0;
    // col index -1 gets the first text column
    virtual OUString get_text(int row, int col = -1) const = 0;
    // col index -1 sets the first text column
    virtual void set_text(int row, const OUString& rText, int col = -1) = 0;
    // col index -1 sets the first text column
    virtual void set_sensitive(int row, bool bSensitive, int col = -1) = 0;
    virtual void set_id(int row, const OUString& rId) = 0;
    virtual void set_toggle(int row, TriState eState, int col) = 0;
    virtual TriState get_toggle(int row, int col) const = 0;
    // col index -1 sets the expander toggle, enable_toggle_buttons must have been called to create that column
    virtual void set_toggle(int row, TriState eState, int col = -1) = 0;
    // col index -1 gets the expander toggle, enable_toggle_buttons must have been called to create that column
    virtual TriState get_toggle(int row, int col = -1) const = 0;
    // col index -1 sets the expander image
    virtual void set_image(int row, const OUString& rImage, int col = -1) = 0;
    // col index -1 sets the expander image
@@ -1015,13 +1035,18 @@ public:
    virtual void set_extra_row_indent(const TreeIter& rIter, int nIndentLevel) = 0;
    virtual void expand_row(const TreeIter& rIter) = 0;
    virtual void collapse_row(const TreeIter& rIter) = 0;
    // col index -1 sets the first text column
    virtual void set_text(const TreeIter& rIter, const OUString& rStr, int col = -1) = 0;
    // col index -1 sets the first text column
    virtual void set_sensitive(const TreeIter& rIter, bool bSensitive, int col = -1) = 0;
    virtual void set_text_emphasis(const TreeIter& rIter, bool bOn, int col) = 0;
    virtual bool get_text_emphasis(const TreeIter& rIter, int col) const = 0;
    virtual void set_text_align(const TreeIter& rIter, double fAlign, int col) = 0;
    virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col) = 0;
    virtual TriState get_toggle(const TreeIter& rIter, int col) const = 0;
    // col index -1 sets the expander toggle, enable_toggle_buttons must have been called to create that column
    virtual void set_toggle(const TreeIter& rIter, TriState bOn, int col = -1) = 0;
    // col index -1 gets the expander toggle, enable_toggle_buttons must have been called to create that column
    virtual TriState get_toggle(const TreeIter& rIter, int col = -1) const = 0;
    // col index -1 gets the first text column
    virtual OUString get_text(const TreeIter& rIter, int col = -1) const = 0;
    virtual void set_id(const TreeIter& rIter, const OUString& rId) = 0;
    virtual OUString get_id(const TreeIter& rIter) const = 0;
@@ -1138,9 +1163,6 @@ public:
    // remove the selected nodes
    virtual void remove_selection() = 0;

    // call before inserting any content
    virtual void set_toggle_columns_as_radio() = 0;

    virtual void vadjustment_set_value(int value) = 0;
    virtual int vadjustment_get_value() const = 0;

diff --git a/sc/source/ui/dbgui/dpgroupdlg.cxx b/sc/source/ui/dbgui/dpgroupdlg.cxx
index 5e92b42..44d5660 100644
--- a/sc/source/ui/dbgui/dpgroupdlg.cxx
+++ b/sc/source/ui/dbgui/dpgroupdlg.cxx
@@ -216,17 +216,15 @@ ScDPDateGroupDlg::ScDPDateGroupDlg(weld::Window* pParent,
    maStartHelper.SetValue( rInfo.mbAutoStart, rInfo.mfStart );
    maEndHelper.SetValue( rInfo.mbAutoEnd, rInfo.mfEnd );

    std::vector<int> aWidths;
    aWidths.push_back(mxLbUnits->get_checkbox_column_width());
    mxLbUnits->set_column_fixed_widths(aWidths);
    mxLbUnits->enable_toggle_buttons(weld::ColumnToggleType::Check);

    if( nDatePart == 0 )
        nDatePart = css::sheet::DataPilotFieldGroupBy::MONTHS;
    for (size_t nIdx = 0; nIdx < SAL_N_ELEMENTS(aDatePartResIds); ++nIdx)
    {
        mxLbUnits->append();
        mxLbUnits->set_toggle(nIdx, (nDatePart & spnDateParts[ nIdx ]) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        mxLbUnits->set_text(nIdx, ScResId(aDatePartResIds[nIdx]), 1);
        mxLbUnits->set_toggle(nIdx, (nDatePart & spnDateParts[ nIdx ]) ? TRISTATE_TRUE : TRISTATE_FALSE);
        mxLbUnits->set_text(nIdx, ScResId(aDatePartResIds[nIdx]), 0);
    }

    if( rInfo.mbDateValues )
@@ -296,7 +294,7 @@ sal_Int32 ScDPDateGroupDlg::GetDatePart() const
    // return listbox contents for "units" mode
    sal_Int32 nDatePart = 0;
    for (int nIdx = 0, nCount = mxLbUnits->n_children(); nIdx < nCount; ++nIdx )
        if (mxLbUnits->get_toggle(nIdx, 0) == TRISTATE_TRUE)
        if (mxLbUnits->get_toggle(nIdx) == TRISTATE_TRUE)
            nDatePart |= spnDateParts[ nIdx ];
    return nDatePart;
}
@@ -328,7 +326,7 @@ namespace
    {
        for (int i = 0; i < rView.n_children(); ++i)
        {
            if (rView.get_toggle(i, 0) == TRISTATE_TRUE)
            if (rView.get_toggle(i) == TRISTATE_TRUE)
                return true;
        }
        return false;
diff --git a/sc/source/ui/dbgui/pvfundlg.cxx b/sc/source/ui/dbgui/pvfundlg.cxx
index e73bcc4..5413b00 100644
--- a/sc/source/ui/dbgui/pvfundlg.cxx
+++ b/sc/source/ui/dbgui/pvfundlg.cxx
@@ -94,13 +94,13 @@ bool lclFillListBox(weld::TreeView& rLBox, const vector<ScDPLabelData::Member>& 
    {
        rLBox.append();
        int pos = rLBox.n_children() - 1;
        rLBox.set_toggle(pos, TRISTATE_FALSE, 0);
        rLBox.set_toggle(pos, TRISTATE_FALSE);
        OUString aName = rMember.getDisplayName();
        if (!aName.isEmpty())
            rLBox.set_text(pos, aName, 1);
            rLBox.set_text(pos, aName, 0);
        else
        {
            rLBox.set_text(pos, ScResId(STR_EMPTYDATA), 1);
            rLBox.set_text(pos, ScResId(STR_EMPTYDATA), 0);
            bEmpty = true;
        }
    }
@@ -628,9 +628,7 @@ ScDPSubtotalOptDlg::ScDPSubtotalOptDlg(weld::Window* pParent, ScDPObject& rDPObj
    , mrDPObj(rDPObj)
    , maLabelData(rLabelData)
{
    std::vector<int> aWidths;
    aWidths.push_back(m_xLbHide->get_checkbox_column_width());
    m_xLbHide->set_column_fixed_widths(aWidths);
    m_xLbHide->enable_toggle_buttons(weld::ColumnToggleType::Check);

    m_xLbSortBy->set_size_request(m_xLbSortBy->get_approximate_digit_width() * 18, -1);
    m_xLbHide->set_size_request(-1, m_xLbHide->get_height_rows(5));
@@ -683,7 +681,7 @@ void ScDPSubtotalOptDlg::FillLabelData( ScDPLabelData& rLabelData ) const
    rLabelData.maMembers = maLabelData.maMembers;
    int nVisCount = m_xLbHide->n_children();
    for (int nPos = 0; nPos < nVisCount; ++nPos)
        rLabelData.maMembers[nPos].mbVisible = m_xLbHide->get_toggle(nPos, 0) == TRISTATE_FALSE;
        rLabelData.maMembers[nPos].mbVisible = m_xLbHide->get_toggle(nPos) == TRISTATE_FALSE;

    // *** HIERARCHY ***

@@ -791,7 +789,7 @@ void ScDPSubtotalOptDlg::InitHideListBox()
    lclFillListBox(*m_xLbHide, maLabelData.maMembers);
    size_t n = maLabelData.maMembers.size();
    for (size_t i = 0; i < n; ++i)
        m_xLbHide->set_toggle(i, maLabelData.maMembers[i].mbVisible ? TRISTATE_FALSE : TRISTATE_TRUE, 0);
        m_xLbHide->set_toggle(i, maLabelData.maMembers[i].mbVisible ? TRISTATE_FALSE : TRISTATE_TRUE);
    bool bEnable = m_xLbHide->n_children() > 0;
    m_xHideFrame->set_sensitive(bEnable);
}
diff --git a/sc/source/ui/dbgui/tpsubt.cxx b/sc/source/ui/dbgui/tpsubt.cxx
index 78fb46d..ed23b10 100644
--- a/sc/source/ui/dbgui/tpsubt.cxx
+++ b/sc/source/ui/dbgui/tpsubt.cxx
@@ -57,9 +57,7 @@ ScTpSubTotalGroup::ScTpSubTotalGroup(weld::Container* pPage, weld::DialogControl
    mxLbColumns->set_size_request(-1, nHeight);
    mxLbFunctions->set_size_request(-1, nHeight);

    std::vector<int> aWidths;
    aWidths.push_back(mxLbColumns->get_checkbox_column_width());
    mxLbColumns->set_column_fixed_widths(aWidths);
    mxLbColumns->enable_toggle_buttons(weld::ColumnToggleType::Check);

    Init();
}
@@ -102,7 +100,7 @@ bool ScTpSubTotalGroup::DoReset( sal_uInt16             nGroupNo,
    // first we have to clear the listboxes...
    for (int nLbEntry = 0, nCount = mxLbColumns->n_children(); nLbEntry < nCount; ++nLbEntry)
    {
        mxLbColumns->set_toggle(nLbEntry, TRISTATE_FALSE, 0);
        mxLbColumns->set_toggle(nLbEntry, TRISTATE_FALSE);
        mxLbColumns->set_id(nLbEntry, "0");
    }
    mxLbFunctions->select(0);
@@ -125,7 +123,7 @@ bool ScTpSubTotalGroup::DoReset( sal_uInt16             nGroupNo,
        {
            sal_uInt16  nCheckPos = GetFieldSelPos( pSubTotals[i] );

            mxLbColumns->set_toggle(nCheckPos, TRISTATE_TRUE, 0);
            mxLbColumns->set_toggle(nCheckPos, TRISTATE_TRUE);
            mxLbColumns->set_id(nCheckPos, OUString::number(FuncToLbPos(pFunctions[i])));

            if (i == 0 || nCheckPos < nFirstChecked)
@@ -151,7 +149,7 @@ namespace
        int nRet = 0;
        for (sal_Int32 i=0, nEntryCount = rTreeView.n_children(); i < nEntryCount; ++i)
        {
            if (rTreeView.get_toggle(i, 0) == TRISTATE_TRUE)
            if (rTreeView.get_toggle(i) == TRISTATE_TRUE)
                ++nRet;
        }
        return nRet;
@@ -211,7 +209,7 @@ bool ScTpSubTotalGroup::DoFillItemSet( sal_uInt16       nGroupNo,

        for ( sal_Int32 i=0, nCheck=0; i<nEntryCount; i++ )
        {
            if (mxLbColumns->get_toggle(i, 0) == TRISTATE_TRUE)
            if (mxLbColumns->get_toggle(i) == TRISTATE_TRUE)
            {
                OSL_ENSURE( nCheck <= nCheckCount,
                            "Range error :-(" );
@@ -261,8 +259,8 @@ void ScTpSubTotalGroup::FillListBoxes()
            nFieldArr[i] = col;
            mxLbGroup->insert_text(i+1, aFieldName);
            mxLbColumns->insert(i);
            mxLbColumns->set_toggle(i, TRISTATE_FALSE, 0);
            mxLbColumns->set_text(i, aFieldName, 1);
            mxLbColumns->set_toggle(i, TRISTATE_FALSE);
            mxLbColumns->set_text(i, aFieldName, 0);
            mxLbColumns->set_id(i, "0");
            i++;
        }
@@ -359,7 +357,7 @@ void ScTpSubTotalGroup::SelectHdl(const weld::Widget *pLb)
        else if ( pLb == mxLbFunctions.get() )
        {
            mxLbColumns->set_id(nColumn, OUString::number(nFunction));
            mxLbColumns->set_toggle(nColumn, TRISTATE_TRUE, 0);
            mxLbColumns->set_toggle(nColumn, TRISTATE_TRUE);
        }
    }
}
diff --git a/sc/source/ui/miscdlgs/protectiondlg.cxx b/sc/source/ui/miscdlgs/protectiondlg.cxx
index 909e205..a1718ac 100644
--- a/sc/source/ui/miscdlgs/protectiondlg.cxx
+++ b/sc/source/ui/miscdlgs/protectiondlg.cxx
@@ -59,9 +59,7 @@ ScTableProtectionDlg::ScTableProtectionDlg(weld::Window* pParent)
    m_aDeleteColumns = m_xDeleteColumns->get_label();
    m_aDeleteRows = m_xDeleteRows->get_label();

    std::vector<int> aWidths;
    aWidths.push_back(m_xOptionsListBox->get_checkbox_column_width());
    m_xOptionsListBox->set_column_fixed_widths(aWidths);
    m_xOptionsListBox->enable_toggle_buttons(weld::ColumnToggleType::Check);

    Init();
}
@@ -73,7 +71,7 @@ ScTableProtectionDlg::~ScTableProtectionDlg()
void ScTableProtectionDlg::SetDialogData(const ScTableProtection& rData)
{
    for (size_t i = 0; i < aOptions.size(); ++i)
        m_xOptionsListBox->set_toggle(i, rData.isOptionEnabled(aOptions[i]) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xOptionsListBox->set_toggle(i, rData.isOptionEnabled(aOptions[i]) ? TRISTATE_TRUE : TRISTATE_FALSE);
}

void ScTableProtectionDlg::WriteData(ScTableProtection& rData) const
@@ -84,15 +82,15 @@ void ScTableProtectionDlg::WriteData(ScTableProtection& rData) const
    rData.setPassword(m_xPassword1Edit->get_text());

    for (size_t i = 0; i < aOptions.size(); ++i)
        rData.setOption(aOptions[i], m_xOptionsListBox->get_toggle(i, 0) == TRISTATE_TRUE);
        rData.setOption(aOptions[i], m_xOptionsListBox->get_toggle(i) == TRISTATE_TRUE);
}

void ScTableProtectionDlg::InsertEntry(const OUString& rTxt)
{
    m_xOptionsListBox->append();
    const int nRow = m_xOptionsListBox->n_children() - 1;
    m_xOptionsListBox->set_toggle(nRow, TRISTATE_FALSE, 0);
    m_xOptionsListBox->set_text(nRow, rTxt, 1);
    m_xOptionsListBox->set_toggle(nRow, TRISTATE_FALSE);
    m_xOptionsListBox->set_text(nRow, rTxt, 0);
}

void ScTableProtectionDlg::Init()
@@ -115,8 +113,8 @@ void ScTableProtectionDlg::Init()
    InsertEntry(m_aDeleteColumns);
    InsertEntry(m_aDeleteRows);

    m_xOptionsListBox->set_toggle(0, TRISTATE_TRUE, 0);
    m_xOptionsListBox->set_toggle(1, TRISTATE_TRUE, 0);
    m_xOptionsListBox->set_toggle(0, TRISTATE_TRUE);
    m_xOptionsListBox->set_toggle(1, TRISTATE_TRUE);

    m_xOptionsListBox->thaw();

diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx b/sc/source/ui/miscdlgs/solveroptions.cxx
index e22647b..5c20611 100644
--- a/sc/source/ui/miscdlgs/solveroptions.cxx
+++ b/sc/source/ui/miscdlgs/solveroptions.cxx
@@ -70,9 +70,7 @@ ScSolverOptionsDialog::ScSolverOptionsDialog(weld::Window* pParent,
    m_xLbSettings->set_size_request(m_xLbSettings->get_approximate_digit_width() * 32,
                                    m_xLbSettings->get_height_rows(6));

    std::vector<int> aWidths;
    aWidths.push_back(m_xLbSettings->get_checkbox_column_width());
    m_xLbSettings->set_column_fixed_widths(aWidths);
    m_xLbSettings->enable_toggle_buttons(weld::ColumnToggleType::Check);

    m_xLbEngine->connect_changed( LINK( this, ScSolverOptionsDialog, EngineSelectHdl ) );

@@ -138,7 +136,7 @@ const uno::Sequence<beans::PropertyValue>& ScSolverOptionsDialog::GetProperties(
                    rValue <<= pStringItem->GetIntValue();
            }
            else
                rValue <<= m_xLbSettings->get_toggle(nEntryPos, 0) == TRISTATE_TRUE;
                rValue <<= m_xLbSettings->get_toggle(nEntryPos) == TRISTATE_TRUE;
        }
    }
    else
@@ -194,13 +192,13 @@ void ScSolverOptionsDialog::FillListBox()
        if ( eClass == uno::TypeClass_BOOLEAN )
        {
            // check box entry
            m_xLbSettings->set_toggle(nPos, ScUnoHelpFunctions::GetBoolFromAny(aValue) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            m_xLbSettings->set_text(nPos, aVisName, 1);
            m_xLbSettings->set_toggle(nPos, ScUnoHelpFunctions::GetBoolFromAny(aValue) ? TRISTATE_TRUE : TRISTATE_FALSE);
            m_xLbSettings->set_text(nPos, aVisName, 0);
        }
        else
        {
            // value entry
            m_xLbSettings->set_text(nPos, aVisName, 1);
            m_xLbSettings->set_text(nPos, aVisName, 0);
            m_aOptions.emplace_back(new ScSolverOptionsString(aVisName));
            if (eClass == uno::TypeClass_DOUBLE)
            {
@@ -213,7 +211,7 @@ void ScSolverOptionsDialog::FillListBox()
                    rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
                    ScGlobal::getLocaleDataPtr()->getNumDecimalSep()[0], true );

                m_xLbSettings->set_text(nPos, sTxt, 1);
                m_xLbSettings->set_text(nPos, sTxt, 0);
            }
            else
            {
@@ -223,7 +221,7 @@ void ScSolverOptionsDialog::FillListBox()

                OUString sTxt = aVisName + ": " + OUString::number(nIntValue);

                m_xLbSettings->set_text(nPos, sTxt, 1);
                m_xLbSettings->set_text(nPos, sTxt, 0);
            }
            m_xLbSettings->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(m_aOptions.back().get())));
        }
@@ -261,7 +259,7 @@ void ScSolverOptionsDialog::EditOption()
                    rtl_math_StringFormat_Automatic, rtl_math_DecimalPlaces_Max,
                    ScGlobal::getLocaleDataPtr()->getNumDecimalSep()[0], true );

                m_xLbSettings->set_text(nEntry, sTxt, 1);
                m_xLbSettings->set_text(nEntry, sTxt, 0);
            }
            m_xValDialog.reset();
        });
@@ -279,7 +277,7 @@ void ScSolverOptionsDialog::EditOption()
                OUString sTxt(pStringItem->GetText() + ": ");
                sTxt += OUString::number(pStringItem->GetIntValue());

                m_xLbSettings->set_text(nEntry, sTxt, 1);
                m_xLbSettings->set_text(nEntry, sTxt, 0);
            }
            m_xIntDialog.reset();
        });
diff --git a/sw/source/ui/config/optcomp.cxx b/sw/source/ui/config/optcomp.cxx
index 8be4045..13a1101 100644
--- a/sw/source/ui/config/optcomp.cxx
+++ b/sw/source/ui/config/optcomp.cxx
@@ -61,10 +61,8 @@ SwCompatibilityOptPage::SwCompatibilityOptPage(weld::Container* pPage, weld::Dia
    , m_xGlobalOptionsCLB(m_xBuilder->weld_tree_view("globaloptioncheckbox"))
    , m_xDefaultPB(m_xBuilder->weld_button("default"))
{
    std::vector<int> aWidths;
    aWidths.push_back(m_xOptionsLB->get_checkbox_column_width());
    m_xOptionsLB->set_column_fixed_widths(aWidths);
    m_xGlobalOptionsCLB->set_column_fixed_widths(aWidths);
    m_xOptionsLB->enable_toggle_buttons(weld::ColumnToggleType::Check);
    m_xGlobalOptionsCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    int nPos = 0;
    for ( int i = static_cast<int>(SvtCompatibilityEntry::Index::Module) + 1; i < static_cast<int>(SvtCompatibilityEntry::Index::INVALID); ++i )
@@ -73,8 +71,8 @@ SwCompatibilityOptPage::SwCompatibilityOptPage(weld::Container* pPage, weld::Dia

        const OUString sEntry = m_xFormattingLB->get_text(nCoptIdx);
        m_xOptionsLB->append();
        m_xOptionsLB->set_toggle(nPos, TRISTATE_FALSE, 0);
        m_xOptionsLB->set_text(nPos, sEntry, 1);
        m_xOptionsLB->set_toggle(nPos, TRISTATE_FALSE);
        m_xOptionsLB->set_text(nPos, sEntry, 0);
        ++nPos;
    }

@@ -88,8 +86,8 @@ SwCompatibilityOptPage::SwCompatibilityOptPage(weld::Container* pPage, weld::Dia

    m_xGlobalOptionsCLB->append();
    const bool bChecked = m_aViewConfigItem.HasMSOCompatibleFormsMenu();
    m_xGlobalOptionsCLB->set_toggle(0, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xGlobalOptionsCLB->set_text(0, m_xGlobalOptionsLB->get_text(0), 1);
    m_xGlobalOptionsCLB->set_toggle(0, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_xGlobalOptionsCLB->set_text(0, m_xGlobalOptionsLB->get_text(0), 0);

    m_xGlobalOptionsLB->clear();

@@ -279,7 +277,7 @@ IMPL_LINK_NOARG(SwCompatibilityOptPage, UseAsDefaultHdl, weld::Button&, void)
            const sal_Int32 nCount = m_xOptionsLB->n_children();
            for ( sal_Int32 i = 0; i < nCount; ++i )
            {
                bool bChecked = m_xOptionsLB->get_toggle(i, 0);
                bool bChecked = m_xOptionsLB->get_toggle(i);

                int nCoptIdx = i + 2; /* Consider "Name" & "Module" indexes */
                pItem->setValue<bool>( SvtCompatibilityEntry::Index(nCoptIdx), bChecked );
@@ -297,7 +295,7 @@ void SwCompatibilityOptPage::SetCurrentOptions( sal_uInt32 nOptions )
    for (int i = 0; i < nCount; ++i)
    {
        bool bChecked = ( ( nOptions & 0x00000001 ) == 0x00000001 );
        m_xOptionsLB->set_toggle(i, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xOptionsLB->set_toggle(i, bChecked ? TRISTATE_TRUE : TRISTATE_FALSE);
        nOptions = nOptions >> 1;
    }
}
@@ -351,7 +349,7 @@ bool SwCompatibilityOptPage::FillItemSet( SfxItemSet*  )

        for (int i = 0; i < nCount; ++i)
        {
            bool bChecked = m_xOptionsLB->get_toggle(i, 0) == TRISTATE_TRUE;
            bool bChecked = m_xOptionsLB->get_toggle(i) == TRISTATE_TRUE;
            bool bSavedChecked = ( ( nSavedOptions & 0x00000001 ) == 0x00000001 );
            if ( bChecked != bSavedChecked )
            {
@@ -431,7 +429,7 @@ bool SwCompatibilityOptPage::FillItemSet( SfxItemSet*  )
    if ( bModified )
        WriteOptions();

    bool bNewMSFormsMenuOption = m_xGlobalOptionsCLB->get_toggle(0, 0);
    bool bNewMSFormsMenuOption = m_xGlobalOptionsCLB->get_toggle(0);
    if (m_bSavedMSFormsMenuOption != bNewMSFormsMenuOption)
    {
        m_aViewConfigItem.SetMSOCompatibleFormsMenu(bNewMSFormsMenuOption);
@@ -460,7 +458,7 @@ void SwCompatibilityOptPage::Reset( const SfxItemSet*  )
    SetCurrentOptions( nOptions );
    m_nSavedOptions = nOptions;

    m_xGlobalOptionsCLB->set_toggle(0, m_aViewConfigItem.HasMSOCompatibleFormsMenu() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
    m_xGlobalOptionsCLB->set_toggle(0, m_aViewConfigItem.HasMSOCompatibleFormsMenu() ? TRISTATE_TRUE : TRISTATE_FALSE);
    m_bSavedMSFormsMenuOption = m_aViewConfigItem.HasMSOCompatibleFormsMenu();
}

diff --git a/sw/source/ui/config/optload.cxx b/sw/source/ui/config/optload.cxx
index b5e1a1a..9a5d934 100644
--- a/sw/source/ui/config/optload.cxx
+++ b/sw/source/ui/config/optload.cxx
@@ -459,9 +459,7 @@ SwCaptionOptPage::SwCaptionOptPage(weld::Container* pPage, weld::DialogControlle
{
    m_xCategoryBox->connect_entry_insert_text(LINK(this, SwCaptionOptPage, TextFilterHdl));

    std::vector<int> aWidths;
    aWidths.push_back(m_xCheckLB->get_checkbox_column_width());
    m_xCheckLB->set_column_fixed_widths(aWidths);
    m_xCheckLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    SwStyleNameMapper::FillUIName(RES_POOLCOLL_LABEL_ABB, m_sIllustration);
    SwStyleNameMapper::FillUIName(RES_POOLCOLL_LABEL_TABLE, m_sTable);
@@ -554,7 +552,7 @@ bool SwCaptionOptPage::FillItemSet( SfxItemSet* )
    int nCheckCount = 0;
    for (int i = 0, nCount = m_xCheckLB->n_children(); i < nCount; ++i)
    {
        if (m_xCheckLB->get_toggle(i, 0) == TRISTATE_TRUE)
        if (m_xCheckLB->get_toggle(i) == TRISTATE_TRUE)
            ++nCheckCount;
        InsCaptionOpt* pData = reinterpret_cast<InsCaptionOpt*>(m_xCheckLB->get_id(i).toInt64());
        bRet |= pModOpt->SetCapOption(bHTMLMode, pData);
@@ -582,16 +580,16 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
    // Writer objects
    int nPos = 0;
    m_xCheckLB->append();
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
    m_xCheckLB->set_text(nPos, m_sSWTable, 1);
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE);
    m_xCheckLB->set_text(nPos, m_sSWTable, 0);
    SetOptions(nPos++, TABLE_CAP);
    m_xCheckLB->append();
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
    m_xCheckLB->set_text(nPos, m_sSWFrame, 1);
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE);
    m_xCheckLB->set_text(nPos, m_sSWFrame, 0);
    SetOptions(nPos++, FRAME_CAP);
    m_xCheckLB->append();
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
    m_xCheckLB->set_text(nPos, m_sSWGraphic, 1);
    m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE);
    m_xCheckLB->set_text(nPos, m_sSWGraphic, 0);
    SetOptions(nPos++, GRAPHIC_CAP);

    // get Productname and -version
@@ -615,8 +613,8 @@ void SwCaptionOptPage::Reset( const SfxItemSet* rSet)
        // don't show product version
        sClass = sClass.replaceFirst( sComplete, sWithoutVersion );
        m_xCheckLB->append();
        m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE, 0);
        m_xCheckLB->set_text(nPos, sClass, 1);
        m_xCheckLB->set_toggle(nPos, TRISTATE_FALSE);
        m_xCheckLB->set_text(nPos, sClass, 0);
        SetOptions( nPos++, OLE_CAP, &rOleId );
    }
    m_xLbCaptionOrder->set_active(
@@ -635,7 +633,7 @@ void SwCaptionOptPage::SetOptions(const sal_uLong nPos,
    {
        InsCaptionOpt* pIns = new InsCaptionOpt(*pOpt);
        m_xCheckLB->set_id(nPos, OUString::number(reinterpret_cast<sal_Int64>(pIns)));
        m_xCheckLB->set_toggle(nPos, pOpt->UseCaption() ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
        m_xCheckLB->set_toggle(nPos, pOpt->UseCaption() ? TRISTATE_TRUE : TRISTATE_FALSE);
    }
    else
    {
@@ -657,7 +655,7 @@ void SwCaptionOptPage::UpdateEntry(int nSelEntry)
{
    if (nSelEntry != -1)
    {
        bool bChecked = m_xCheckLB->get_toggle(nSelEntry, 0) == TRISTATE_TRUE;
        bool bChecked = m_xCheckLB->get_toggle(nSelEntry) == TRISTATE_TRUE;

        m_xSettingsGroup->set_sensitive(bChecked);
        bool bNumSep = bChecked && m_xLbCaptionOrder->get_active() == 1;
@@ -780,7 +778,7 @@ void SwCaptionOptPage::SaveEntry(int nEntry)

    InsCaptionOpt* pOpt = reinterpret_cast<InsCaptionOpt*>(m_xCheckLB->get_id(nEntry).toInt64());

    pOpt->UseCaption() = m_xCheckLB->get_toggle(nEntry, 0) == TRISTATE_TRUE;
    pOpt->UseCaption() = m_xCheckLB->get_toggle(nEntry) == TRISTATE_TRUE;
    const OUString aName(m_xCategoryBox->get_active_text());
    if (aName == m_sNone)
        pOpt->SetCategory("");
@@ -845,7 +843,7 @@ IMPL_LINK(SwCaptionOptPage, OrderHdl, weld::ComboBox&, rBox, void)
    bool bChecked = false;
    if (nSelEntry != -1)
    {
        bChecked = m_xCheckLB->get_toggle(nSelEntry, 0) == TRISTATE_TRUE;
        bChecked = m_xCheckLB->get_toggle(nSelEntry) == TRISTATE_TRUE;
    }

    int nPos = rBox.get_active();
diff --git a/sw/source/ui/index/cnttab.cxx b/sw/source/ui/index/cnttab.cxx
index cbdb3c9..3fc5120 100644
--- a/sw/source/ui/index/cnttab.cxx
+++ b/sw/source/ui/index/cnttab.cxx
@@ -498,8 +498,9 @@ SwAddStylesDlg_Impl::SwAddStylesDlg_Impl(weld::Window* pParent,
    m_xOk->connect_clicked(LINK(this, SwAddStylesDlg_Impl, OkHdl));
    m_xLeftPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));
    m_xRightPB->connect_clicked(LINK(this, SwAddStylesDlg_Impl, LeftRightHdl));

    m_xHeaderTree->connect_size_allocate(LINK(this, SwAddStylesDlg_Impl, TreeSizeAllocHdl));
    m_xHeaderTree->set_toggle_columns_as_radio();
    m_xHeaderTree->enable_toggle_buttons(weld::ColumnToggleType::Radio);
    m_xHeaderTree->connect_toggled(LINK(this, SwAddStylesDlg_Impl, RadioToggleOnHdl));

    std::vector<int> aWidths;
@@ -744,16 +745,14 @@ SwTOXSelectTabPage::SwTOXSelectTabPage(weld::Container* pPage, weld::DialogContr

    sAddStyleContent = m_xAddStylesCB->get_label();

    std::vector<int> aWidths;
    aWidths.push_back(m_xFromObjCLB->get_checkbox_column_width());
    m_xFromObjCLB->set_column_fixed_widths(aWidths);
    m_xFromObjCLB->enable_toggle_buttons(weld::ColumnToggleType::Check);

    for (size_t i = 0; i < SAL_N_ELEMENTS(RES_SRCTYPES); ++i)
    {
        OUString sId(OUString::number(static_cast<sal_uInt32>(RES_SRCTYPES[i].second)));
        m_xFromObjCLB->append();
        m_xFromObjCLB->set_toggle(i, TRISTATE_FALSE, 0);
        m_xFromObjCLB->set_text(i, SwResId(RES_SRCTYPES[i].first), 1);
        m_xFromObjCLB->set_toggle(i, TRISTATE_FALSE);
        m_xFromObjCLB->set_text(i, SwResId(RES_SRCTYPES[i].first), 0);
        m_xFromObjCLB->set_id(i, sId);
    }
    m_xFromObjCLB->set_size_request(-1, std::max<int>(m_xFromObjCLB->get_preferred_size().Height(),
@@ -966,7 +965,7 @@ void SwTOXSelectTabPage::ApplyTOXDescription()
        for (int nFromObj = 0, nCount = m_xFromObjCLB->n_children(); nFromObj < nCount; ++nFromObj)
        {
            SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(nFromObj).toInt32());
            m_xFromObjCLB->set_toggle(nFromObj, bool(nData & nOLEData) ? TRISTATE_TRUE : TRISTATE_FALSE, 0);
            m_xFromObjCLB->set_toggle(nFromObj, bool(nData & nOLEData) ? TRISTATE_TRUE : TRISTATE_FALSE);
        }
    }
    else if(TOX_AUTHORITIES == aCurType.eType)
@@ -1061,7 +1060,7 @@ void SwTOXSelectTabPage::FillTOXDescription()
            SwTOOElements nOLEData = SwTOOElements::NONE;
            for (int i = 0, nCount = m_xFromObjCLB->n_children(); i < nCount; ++i)
            {
                if (m_xFromObjCLB->get_toggle(i, 0) == TRISTATE_TRUE)
                if (m_xFromObjCLB->get_toggle(i) == TRISTATE_TRUE)
                {
                    SwTOOElements nData = static_cast<SwTOOElements>(m_xFromObjCLB->get_id(i).toInt32());
                    nOLEData |= nData;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 3ea87a0..7867447 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3156,33 +3156,6 @@ struct SalInstanceTreeIter : public weld::TreeIter
    SvTreeListEntry* iter;
};

TriState get_toggle(SvTreeListEntry* pEntry, int col)
{
    ++col; //skip dummy/expander column

    if (static_cast<size_t>(col) == pEntry->ItemCount())
        return TRISTATE_FALSE;

    assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
    SvLBoxItem& rItem = pEntry->GetItem(col);
    assert(dynamic_cast<SvLBoxButton*>(&rItem));
    SvLBoxButton& rToggle = static_cast<SvLBoxButton&>(rItem);
    if (rToggle.IsStateTristate())
        return TRISTATE_INDET;
    else if (rToggle.IsStateChecked())
        return TRISTATE_TRUE;
    return TRISTATE_FALSE;
}

bool get_text_emphasis(SvTreeListEntry* pEntry, int col)
{
    ++col; //skip dummy/expander column

    assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
    SvLBoxItem& rItem = pEntry->GetItem(col);
    assert(dynamic_cast<SvLBoxString*>(&rItem));
    return static_cast<SvLBoxString&>(rItem).IsEmphasized();
}
}

class SalInstanceTreeView;
@@ -3226,6 +3199,25 @@ private:
    DECL_LINK(CustomRenderHdl, svtree_render_args, void);
    DECL_LINK(CustomMeasureHdl, svtree_measure_args, Size);

    // Each row has a cell for the expander image, (and an optional cell for a
    // checkbutton if enable_toggle_buttons has been called) which preceed
    // index 0
    int to_internal_model(int col) const
    {
        if (m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN)
            ++col; // skip checkbutton column
        ++col; //skip expander column
        return col;
    }

    int to_external_model(int col) const
    {
        if (m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN)
            --col; // skip checkbutton column
        --col; //skip expander column
        return col;
    }

    bool IsDummyEntry(SvTreeListEntry* pEntry) const
    {
        return m_xTreeView->GetEntryText(pEntry).trim() == "<dummy>";
@@ -3280,6 +3272,10 @@ private:
        SvTreeListEntry* pEntry = new SvTreeListEntry;
        if (bIsSeparator)
            pEntry->SetFlags(pEntry->GetFlags() | SvTLEntryFlags::IS_SEPARATOR);

        if (m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN)
            AddStringItem(pEntry, "", -1);

        if (pIconName || pImageSurface)
        {
            Image aImage(pIconName ? createImage(*pIconName) : createImage(*pImageSurface));
@@ -3317,6 +3313,105 @@ private:
        enable_notify_events();
    }

    void update_checkbutton_column_width(SvTreeListEntry* pEntry)
    {
        SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
        m_xTreeView->InitViewData(pViewData, pEntry);
        if (!m_bDisableCheckBoxAutoWidth)
            m_xTreeView->CheckBoxInserted(pEntry);
    }

    void do_set_toggle(SvTreeListEntry* pEntry, TriState eState, int col)
    {
        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        // if its the placeholder to allow a blank column, replace it now
        if (pEntry->GetItem(col).GetType() != SvLBoxItemType::Button)
        {
            SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
            pEntry->ReplaceItem(std::make_unique<SvLBoxButton>(pData), 0);
            update_checkbutton_column_width(pEntry);

        }
        SvLBoxItem& rItem = pEntry->GetItem(col);
        assert(dynamic_cast<SvLBoxButton*>(&rItem));
        switch (eState)
        {
            case TRISTATE_TRUE:
                static_cast<SvLBoxButton&>(rItem).SetStateChecked();
                break;
            case TRISTATE_FALSE:
                static_cast<SvLBoxButton&>(rItem).SetStateUnchecked();
                break;
            case TRISTATE_INDET:
                static_cast<SvLBoxButton&>(rItem).SetStateTristate();
                break;
        }

        m_xTreeView->ModelHasEntryInvalidated(pEntry);
    }

    static TriState do_get_toggle(SvTreeListEntry* pEntry, int col)
    {
        if (static_cast<size_t>(col) == pEntry->ItemCount())
            return TRISTATE_FALSE;

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
        assert(dynamic_cast<SvLBoxButton*>(&rItem));
        SvLBoxButton& rToggle = static_cast<SvLBoxButton&>(rItem);
        if (rToggle.IsStateTristate())
            return TRISTATE_INDET;
        else if (rToggle.IsStateChecked())
            return TRISTATE_TRUE;
        return TRISTATE_FALSE;
    }

    TriState get_toggle(SvTreeListEntry* pEntry, int col) const
    {
        if (col == -1)
        {
            assert(m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN);
            return do_get_toggle(pEntry, 0);
        }
        col = to_internal_model(col);
        return do_get_toggle(pEntry, col);
    }

    void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col)
    {
        if (col == -1)
        {
            assert(m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN);
            do_set_toggle(pEntry, eState, 0);
            return;
        }

        col = to_internal_model(col);

        // blank out missing entries
        for (int i = pEntry->ItemCount(); i < col; ++i)
            AddStringItem(pEntry, "", i - 1);

        if (static_cast<size_t>(col) == pEntry->ItemCount())
        {
            SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
            pEntry->AddItem(std::make_unique<SvLBoxButton>(pData));
            update_checkbutton_column_width(pEntry);
        }

        do_set_toggle(pEntry, eState, col);
    }

    bool get_text_emphasis(SvTreeListEntry* pEntry, int col) const
    {
        col = to_internal_model(col);

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
        assert(dynamic_cast<SvLBoxString*>(&rItem));
        return static_cast<SvLBoxString&>(rItem).IsEmphasized();
    }

public:
    SalInstanceTreeView(SvTabListBox* pTreeView, SalInstanceBuilder* pBuilder, bool bTakeOwnership)
        : SalInstanceContainer(pTreeView, pBuilder, bTakeOwnership)
@@ -3522,6 +3617,8 @@ public:
        for (int i = 0; i < nSourceCount; ++i)
        {
            aVclIter.iter = new SvTreeListEntry;
            if (m_xTreeView->nTreeFlags & SvTreeFlags::CHKBTN)
                AddStringItem(aVclIter.iter, "", -1);
            aVclIter.iter->AddItem(std::make_unique<SvLBoxContextBmp>(aDummy, aDummy, false));
            m_xTreeView->Insert(aVclIter.iter, nullptr, TREELIST_APPEND);
            func(aVclIter, i);
@@ -3694,12 +3791,12 @@ public:
        return aRows;
    }

    static OUString get_text(SvTreeListEntry* pEntry, int col)
    OUString get_text(SvTreeListEntry* pEntry, int col) const
    {
        if (col == -1)
            return SvTabListBox::GetEntryText(pEntry, 0);

        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        if (static_cast<size_t>(col) == pEntry->ItemCount())
            return OUString();
@@ -3724,7 +3821,7 @@ public:
            return;
        }

        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        // blank out missing entries
        for (int i = pEntry->ItemCount(); i < col; ++i)
@@ -3774,7 +3871,7 @@ public:
            return;
        }

        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
@@ -3800,72 +3897,24 @@ public:
    virtual TriState get_toggle(int pos, int col) const override
    {
        SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
        return ::get_toggle(pEntry, col);
        return get_toggle(pEntry, col);
    }

    virtual TriState get_toggle(const weld::TreeIter& rIter, int col) const override
    {
        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
        return ::get_toggle(rVclIter.iter, col);
        return get_toggle(rVclIter.iter, col);
    }

    virtual void set_toggle_columns_as_radio() override
    virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override
    {
        m_bTogglesAsRadio = true;
    }
        assert(n_children() == 0 && "tree must be empty");
        m_bTogglesAsRadio = eType == weld::ColumnToggleType::Radio;

    void set_toggle(SvTreeListEntry* pEntry, TriState eState, int col)
    {
        ++col; //skip dummy/expander column

        // blank out missing entries
        for (int i = pEntry->ItemCount(); i < col; ++i)
            AddStringItem(pEntry, "", i - 1);

        if (static_cast<size_t>(col) == pEntry->ItemCount())
        {
            SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData;

            // if we want to have the implicit auto-sizing of the checkbox
            // column we need to call EnableCheckButton and CheckBoxInserted to
            // let it figure out that width. But we don't want to override any
            // explicitly set column width, so disable this if we've set
            // explicit column widths
            if (!m_bDisableCheckBoxAutoWidth)
            {
                if (!(m_xTreeView->GetTreeFlags() & SvTreeFlags::CHKBTN))
                {
                    m_xTreeView->EnableCheckButton(pData);
                    // EnableCheckButton clobbered this, restore it
                    pData->SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
                }
            }

            pEntry->AddItem(std::make_unique<SvLBoxButton>(pData));
            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pEntry);
            m_xTreeView->InitViewData(pViewData, pEntry);

            if (!m_bDisableCheckBoxAutoWidth)
                m_xTreeView->CheckBoxInserted(pEntry);
        }

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
        assert(dynamic_cast<SvLBoxButton*>(&rItem));
        switch (eState)
        {
            case TRISTATE_TRUE:
                static_cast<SvLBoxButton&>(rItem).SetStateChecked();
                break;
            case TRISTATE_FALSE:
                static_cast<SvLBoxButton&>(rItem).SetStateUnchecked();
                break;
            case TRISTATE_INDET:
                static_cast<SvLBoxButton&>(rItem).SetStateTristate();
                break;
        }

        m_xTreeView->ModelHasEntryInvalidated(pEntry);
        SvLBoxButtonData* pData = m_bTogglesAsRadio ? &m_aRadioButtonData : &m_aCheckButtonData;
        m_xTreeView->EnableCheckButton(pData);
        // EnableCheckButton clobbered this, restore it
        pData->SetLink(LINK(this, SalInstanceTreeView, ToggleHdl));
    }

    virtual void set_toggle(int pos, TriState eState, int col) override
@@ -3889,7 +3938,7 @@ public:

    void set_text_emphasis(SvTreeListEntry* pEntry, bool bOn, int col)
    {
        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
@@ -3914,18 +3963,18 @@ public:
    virtual bool get_text_emphasis(const weld::TreeIter& rIter, int col) const override
    {
        const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
        return ::get_text_emphasis(rVclIter.iter, col);
        return get_text_emphasis(rVclIter.iter, col);
    }

    virtual bool get_text_emphasis(int pos, int col) const override
    {
        SvTreeListEntry* pEntry = m_xTreeView->GetEntry(nullptr, pos);
        return ::get_text_emphasis(pEntry, col);
        return get_text_emphasis(pEntry, col);
    }

    void set_text_align(SvTreeListEntry* pEntry, double fAlign, int col)
    {
        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        assert(col >= 0 && o3tl::make_unsigned(col) < pEntry->ItemCount());
        SvLBoxItem& rItem = pEntry->GetItem(col);
@@ -3972,7 +4021,7 @@ public:
            return;
        }

        ++col; //skip dummy/expander column
        col = to_internal_model(col);

        // blank out missing entries
        for (int i = pEntry->ItemCount(); i < col; ++i)
@@ -4659,9 +4708,7 @@ IMPL_LINK(SalInstanceTreeView, CompareHdl, const SvSortData&, rSortData, sal_Int

    if (m_nSortColumn != -1)
    {
        size_t col = m_nSortColumn;

        ++col; //skip dummy/expander column
        size_t col = to_internal_model(m_nSortColumn);

        if (col < pLHS->ItemCount())
        {
@@ -4740,7 +4787,7 @@ IMPL_LINK(SalInstanceTreeView, ToggleHdl, SvLBoxButtonData*, pData, void)
        SvLBoxItem& rItem = pEntry->GetItem(i);
        if (&rItem == pBox)
        {
            int nCol = i - 1; // less dummy/expander column
            int nCol = to_external_model(i);
            signal_toggled(iter_col(SalInstanceTreeIter(pEntry), nCol));
            break;
        }
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 64237971..da66005 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -9112,6 +9112,7 @@ private:
    gint m_nTextCol;
    gint m_nTextView;
    gint m_nImageCol;
    gint m_nExpanderToggleCol;
    gint m_nExpanderImageCol;
    gint m_nIdCol;
    int m_nPendingVAdjustment;
@@ -9532,21 +9533,25 @@ private:
    }

    // The outside concept of a column maps to a gtk CellRenderer, rather than
    // a TreeViewColumn. If the first TreeViewColumn has two CellRenderers, and
    // the first CellRenderer is an image, that CellRenderer is considered to
    // be index -1.
    // a TreeViewColumn. If the first TreeViewColumn has a leading Toggle Renderer
    // and/or a leading Image Renderer, those are considered special expander
    // columns and preceed index 0 and can be accessed via outside index -1
    int to_external_model(int modelcol) const
    {
        if (m_nExpanderImageCol == -1)
            return modelcol;
        return modelcol - 1;
        if (m_nExpanderToggleCol != -1)
            --modelcol;
        if (m_nExpanderImageCol != -1)
            --modelcol;
        return modelcol;
    }

    int to_internal_model(int modelcol) const
    {
        if (m_nExpanderImageCol == -1)
            return modelcol;
        return modelcol + 1;
        if (m_nExpanderToggleCol != -1)
            ++modelcol;
        if (m_nExpanderImageCol != -1)
            ++modelcol;
        return modelcol;
    }

    void set_column_editable(int nCol, bool bEditable)
@@ -9783,6 +9788,7 @@ public:
        , m_nTextCol(-1)
        , m_nTextView(-1)
        , m_nImageCol(-1)
        , m_nExpanderToggleCol(-1)
        , m_nExpanderImageCol(-1)
        , m_nPendingVAdjustment(-1)
        , m_nChangedSignalId(g_signal_connect(gtk_tree_view_get_selection(pTreeView), "changed",
@@ -9798,9 +9804,9 @@ public:
        , m_pChangeEvent(nullptr)
    {
        /* The outside concept of a column maps to a gtk CellRenderer, rather than
           a TreeViewColumn. If the first TreeViewColumn has two CellRenderers, and
           the first CellRenderer is an image, that CellRenderer is considered to
           be index -1.
           a TreeViewColumn. If the first TreeViewColumn has a leading Toggle Renderer
           and/or a leading Image Renderer, those are considered special expander
           columns and preceed index 0 and can be accessed via outside index -1
        */
        m_pColumns = gtk_tree_view_get_columns(m_pTreeView);
        int nIndex(0);
@@ -9830,6 +9836,9 @@ public:
                }
                else if (GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
                {
                    const bool bExpander = nIndex == 0 || (nIndex == 1 && m_nExpanderImageCol == 0);
                    if (bExpander)
                        m_nExpanderToggleCol = nIndex;
                    g_signal_connect(G_OBJECT(pCellRenderer), "toggled", G_CALLBACK(signalCellToggled), this);
                    m_aToggleVisMap[nIndex] = -1;
                    m_aToggleTriStateMap[nIndex] = -1;
@@ -10379,7 +10388,11 @@ public:

    virtual TriState get_toggle(int pos, int col) const override
    {
        col = to_internal_model(col);
        if (col == -1)
            col = m_nExpanderToggleCol;
        else
            col = to_internal_model(col);

        if (get_bool(pos, m_aToggleTriStateMap.find(col)->second))
            return TRISTATE_INDET;
        return get_bool(pos, col) ? TRISTATE_TRUE : TRISTATE_FALSE;
@@ -10387,7 +10400,11 @@ public:

    virtual TriState get_toggle(const weld::TreeIter& rIter, int col) const override
    {
        col = to_internal_model(col);
        if (col == -1)
            col = m_nExpanderToggleCol;
        else
            col = to_internal_model(col);

        const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
        if (get_bool(rGtkIter.iter, m_aToggleTriStateMap.find(col)->second))
            return TRISTATE_INDET;
@@ -10396,7 +10413,11 @@ public:

    virtual void set_toggle(int pos, TriState eState, int col) override
    {
        col = to_internal_model(col);
        if (col == -1)
            col = m_nExpanderToggleCol;
        else
            col = to_internal_model(col);

        // checkbuttons are invisible until toggled on or off
        set(pos, m_aToggleVisMap[col], true);
        if (eState == TRISTATE_INDET)
@@ -10411,7 +10432,12 @@ public:
    virtual void set_toggle(const weld::TreeIter& rIter, TriState eState, int col) override
    {
        const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter);
        col = to_internal_model(col);

        if (col == -1)
            col = m_nExpanderToggleCol;
        else
            col = to_internal_model(col);

        // checkbuttons are invisible until toggled on or off
        set(rGtkIter.iter, m_aToggleVisMap[col], true);
        if (eState == TRISTATE_INDET)
@@ -10423,7 +10449,7 @@ public:
        }
    }

    virtual void set_toggle_columns_as_radio() override
    virtual void enable_toggle_buttons(weld::ColumnToggleType eType) override
    {
        for (GList* pEntry = g_list_first(m_pColumns); pEntry; pEntry = g_list_next(pEntry))
        {
@@ -10435,7 +10461,7 @@ public:
                if (!GTK_IS_CELL_RENDERER_TOGGLE(pCellRenderer))
                    continue;
                GtkCellRendererToggle* pToggle = GTK_CELL_RENDERER_TOGGLE(pCellRenderer);
                gtk_cell_renderer_toggle_set_radio(pToggle, true);
                gtk_cell_renderer_toggle_set_radio(pToggle, eType == weld::ColumnToggleType::Radio);
            }
            g_list_free(pRenderers);
        }