[Libreoffice-commits] core.git: cui/source cui/uiconfig solenv/sanitizers
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Sep 30 18:33:28 UTC 2019
cui/source/inc/autocdlg.hxx | 1
cui/source/options/optaboutconfig.cxx | 362 +++++++++++++++++-----------------
cui/source/options/optaboutconfig.hxx | 52 ++--
cui/source/options/optjava.cxx | 14 -
cui/source/options/optjava.hxx | 2
cui/uiconfig/ui/aboutconfigdialog.ui | 317 +++++++++++++++--------------
solenv/sanitizers/ui/cui.suppr | 5
7 files changed, 398 insertions(+), 355 deletions(-)
New commits:
commit c6bee0aad804c32a4367adc04878648427b06b5a
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Sep 29 17:29:28 2019 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Sep 30 20:32:06 2019 +0200
weld CuiAboutConfigTabPage
Change-Id: I7bc83277503b7981b05fd358b0fd68e19d8232ae
Reviewed-on: https://gerrit.libreoffice.org/79819
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
Tested-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/cui/source/inc/autocdlg.hxx b/cui/source/inc/autocdlg.hxx
index 3def561b87d0..dbf437dfbe5a 100644
--- a/cui/source/inc/autocdlg.hxx
+++ b/cui/source/inc/autocdlg.hxx
@@ -177,6 +177,7 @@ private:
std::unique_ptr<weld::Button> m_xNewReplacePB;
std::unique_ptr<weld::Button> m_xReplacePB;
std::unique_ptr<weld::Button> m_xDeleteReplacePB;
+ std::unique_ptr<weld::Container> m_xButtonBox;
DECL_LINK(SelectHdl, weld::TreeView&, void);
DECL_LINK(NewDelButtonHdl, weld::Button&, void);
diff --git a/cui/source/options/optaboutconfig.cxx b/cui/source/options/optaboutconfig.cxx
index 66f3f1cde343..03594de79947 100644
--- a/cui/source/options/optaboutconfig.cxx
+++ b/cui/source/options/optaboutconfig.cxx
@@ -28,6 +28,7 @@
#include <unotools/textsearch.hxx>
#include <sal/log.hxx>
#include <tools/diagnose_ex.h>
+#include <tools/debug.hxx>
#include <memory>
#include <vector>
@@ -132,99 +133,112 @@ IMPL_LINK(CuiAboutConfigValueDialog, KeyInputHdl, const KeyEvent&, rKeyEvent, bo
return !bValid;
}
-CuiAboutConfigTabPage::CuiAboutConfigTabPage( vcl::Window* pParent/*, const SfxItemSet& rItemSet*/ ) :
- ModalDialog( pParent, "AboutConfig", "cui/ui/aboutconfigdialog.ui"),
- m_pPrefCtrl( get<SvSimpleTableContainer>("preferences") ),
- m_pResetBtn( get<PushButton>("reset") ),
- m_pEditBtn( get<PushButton>("edit") ),
- m_pSearchBtn( get<PushButton>("searchButton") ),
- m_pSearchEdit( get<Edit>("searchEntry") ),
- m_vectorOfModified(),
- m_pPrefBox( VclPtr<SvSimpleTable>::Create(*m_pPrefCtrl, WB_SCROLL | WB_HSCROLL | WB_VSCROLL ) )
+CuiAboutConfigTabPage::CuiAboutConfigTabPage(weld::Window* pParent)
+ : GenericDialogController(pParent, "cui/ui/aboutconfigdialog.ui", "AboutConfig")
+ , m_xResetBtn(m_xBuilder->weld_button("reset"))
+ , m_xEditBtn(m_xBuilder->weld_button("edit"))
+ , m_xSearchBtn(m_xBuilder->weld_button("searchButton"))
+ , m_xSearchEdit(m_xBuilder->weld_entry("searchEntry"))
+ , m_xPrefBox(m_xBuilder->weld_tree_view("preferences"))
+ , m_xScratchIter(m_xPrefBox->make_iterator())
+ , m_vectorOfModified()
+ , m_bSorted(false)
{
- Size aControlSize(LogicToPixel(Size(385, 230), MapMode(MapUnit::MapAppFont)));
- m_pPrefCtrl->set_width_request(aControlSize.Width());
- m_pPrefCtrl->set_height_request(aControlSize.Height());
+ m_xPrefBox->set_size_request(m_xPrefBox->get_approximate_digit_width() * 100,
+ m_xPrefBox->get_height_rows(28));
+ m_xPrefBox->connect_column_clicked(LINK(this, CuiAboutConfigTabPage, HeaderBarClick));
- m_pEditBtn->SetClickHdl( LINK( this, CuiAboutConfigTabPage, StandardHdl_Impl ) );
- m_pResetBtn->SetClickHdl( LINK( this, CuiAboutConfigTabPage, ResetBtnHdl_Impl ) );
- m_pPrefBox->SetDoubleClickHdl( LINK(this, CuiAboutConfigTabPage, DoubleClickHdl_Impl) );
- m_pPrefBox->SetExpandingHdl( LINK(this, CuiAboutConfigTabPage, ExpandingHdl_Impl) );
- m_pSearchBtn->SetClickHdl( LINK(this, CuiAboutConfigTabPage, SearchHdl_Impl) );
-
- m_pPrefBox->InsertHeaderEntry(get<FixedText>("preference")->GetText());
- m_pPrefBox->InsertHeaderEntry(get<FixedText>("property")->GetText());
- m_pPrefBox->InsertHeaderEntry(get<FixedText>("type")->GetText());
- m_pPrefBox->InsertHeaderEntry(get<FixedText>("value")->GetText());
-
- float fWidth = approximate_char_width();
-
- long aTabs[] = {0,0,0,0};
- aTabs[1] = fWidth * 65;
- aTabs[2] = aTabs[1] + fWidth * 20;
- aTabs[3] = aTabs[2] + fWidth * 8;
+ m_xEditBtn->connect_clicked(LINK( this, CuiAboutConfigTabPage, StandardHdl_Impl));
+ m_xResetBtn->connect_clicked(LINK( this, CuiAboutConfigTabPage, ResetBtnHdl_Impl));
+ m_xPrefBox->connect_row_activated(LINK(this, CuiAboutConfigTabPage, DoubleClickHdl_Impl));
+ m_xPrefBox->connect_expanding(LINK(this, CuiAboutConfigTabPage, ExpandingHdl_Impl));
+ m_xSearchBtn->connect_clicked(LINK(this, CuiAboutConfigTabPage, SearchHdl_Impl));
m_options.AlgorithmType2 = util::SearchAlgorithms2::ABSOLUTE;
m_options.transliterateFlags |= TransliterationFlags::IGNORE_CASE;
m_options.searchFlag |= (util::SearchFlags::REG_NOT_BEGINOFLINE |
util::SearchFlags::REG_NOT_ENDOFLINE);
- m_pPrefBox->SetTabs(SAL_N_ELEMENTS(aTabs), aTabs, MapUnit::MapPixel);
- m_pPrefBox->SetAlternatingRowColors( true );
+ float fWidth = m_xPrefBox->get_approximate_digit_width();
+ std::vector<int> aWidths;
+ aWidths.push_back(fWidth * 65);
+ aWidths.push_back(fWidth * 20);
+ aWidths.push_back(fWidth * 8);
+ m_xPrefBox->set_column_fixed_widths(aWidths);
}
-CuiAboutConfigTabPage::~CuiAboutConfigTabPage()
+IMPL_LINK(CuiAboutConfigTabPage, HeaderBarClick, int, nColumn, void)
{
- disposeOnce();
+ if (!m_bSorted)
+ {
+ m_xPrefBox->make_sorted();
+ m_bSorted = true;
+ }
+
+ bool bSortAtoZ = m_xPrefBox->get_sort_order();
+
+ //set new arrow positions in headerbar
+ if (nColumn == m_xPrefBox->get_sort_column())
+ {
+ bSortAtoZ = !bSortAtoZ;
+ m_xPrefBox->set_sort_order(bSortAtoZ);
+ }
+ else
+ {
+ m_xPrefBox->set_sort_indicator(TRISTATE_INDET, m_xPrefBox->get_sort_column());
+ m_xPrefBox->set_sort_column(nColumn);
+ }
+
+ if (nColumn != -1)
+ {
+ //sort lists
+ m_xPrefBox->set_sort_indicator(bSortAtoZ ? TRISTATE_TRUE : TRISTATE_FALSE, nColumn);
+ }
}
-void CuiAboutConfigTabPage::dispose()
+CuiAboutConfigTabPage::~CuiAboutConfigTabPage()
{
- m_pPrefBox.disposeAndClear();
- m_pPrefCtrl.clear();
- m_pResetBtn.clear();
- m_pEditBtn.clear();
- m_pSearchBtn.clear();
- m_pSearchEdit.clear();
- ModalDialog::dispose();
}
void CuiAboutConfigTabPage::InsertEntry(const OUString& rPropertyPath, const OUString& rProp, const OUString& rStatus,
- const OUString& rType, const OUString& rValue, SvTreeListEntry *pParentEntry,
+ const OUString& rType, const OUString& rValue, const weld::TreeIter* pParentEntry,
bool bInsertToPrefBox)
{
- SvTreeListEntry* pEntry = new SvTreeListEntry;
- pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(
- Image(), Image(), false)); //It is needed, otherwise causes crash
- pEntry->AddItem(std::make_unique<SvLBoxString>(rProp));
- pEntry->AddItem(std::make_unique<SvLBoxString>(rStatus));
- pEntry->AddItem(std::make_unique<SvLBoxString>(rType));
- pEntry->AddItem(std::make_unique<SvLBoxString>(rValue));
m_vectorUserData.push_back(std::make_unique<UserData>(rPropertyPath));
- pEntry->SetUserData(m_vectorUserData.back().get());
-
- if(bInsertToPrefBox)
- m_pPrefBox->Insert( pEntry, pParentEntry );
+ if (bInsertToPrefBox)
+ {
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(m_vectorUserData.back().get())));
+ m_xPrefBox->insert(pParentEntry, -1, &rProp, &sId, nullptr, nullptr, nullptr, false, m_xScratchIter.get());
+ m_xPrefBox->set_text(*m_xScratchIter, rStatus, 1);
+ m_xPrefBox->set_text(*m_xScratchIter, rType, 2);
+ m_xPrefBox->set_text(*m_xScratchIter, rValue, 3);
+ }
else
- m_prefBoxEntries.push_back(std::unique_ptr<SvTreeListEntry>(pEntry));
+ {
+ m_prefBoxEntries.push_back({rProp, rStatus, rType, rValue, m_vectorUserData.back().get()});
+ }
}
void CuiAboutConfigTabPage::Reset()
{
- m_pPrefBox->Clear();
-
+ m_xPrefBox->clear();
m_vectorOfModified.clear();
- m_pPrefBox->GetModel()->SetSortMode( SortNone );
+ if (m_bSorted)
+ {
+ m_xPrefBox->set_sort_indicator(TRISTATE_INDET, m_xPrefBox->get_sort_column());
+ m_xPrefBox->make_unsorted();
+ m_bSorted = false;
+ }
m_prefBoxEntries.clear();
m_modifiedPrefBoxEntries.clear();
- m_pPrefBox->SetUpdateMode(false);
+ m_xPrefBox->freeze();
Reference< XNameAccess > xConfigAccess = getConfigAccess( "/", false );
//Load all XNameAccess to m_prefBoxEntries
FillItems( xConfigAccess, nullptr, 0, true );
//Load xConfigAccess' children to m_prefBox
FillItems( xConfigAccess );
- m_pPrefBox->SetUpdateMode(true);
+ m_xPrefBox->thaw();
}
void CuiAboutConfigTabPage::FillItemSet()
@@ -242,7 +256,7 @@ void CuiAboutConfigTabPage::FillItemSet()
}
}
-void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAccess, SvTreeListEntry *pParentEntry,
+void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAccess, const weld::TreeIter* pParentEntry,
int lineage, bool bLoadAll)
{
OUString sPath = Reference< XHierarchicalName >(
@@ -272,31 +286,25 @@ void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAcces
else
{
// not leaf node
- SvTreeListEntry* pEntry = new SvTreeListEntry;
- pEntry->AddItem(std::make_unique<SvLBoxContextBmp>(
- SvTreeListBox::GetDefaultExpandedNodeImage(),
- SvTreeListBox::GetDefaultCollapsedNodeImage(), false));
- pEntry->AddItem(std::make_unique<SvLBoxString>(seqItems[i]));
- //It is needed, without this the selection line will be truncated.
- pEntry->AddItem(std::make_unique<SvLBoxString>(""));
- pEntry->AddItem(std::make_unique<SvLBoxString>(""));
- pEntry->AddItem(std::make_unique<SvLBoxString>(""));
-
m_vectorUserData.push_back(std::make_unique<UserData>(xNextNameAccess, lineage + 1));
- pEntry->SetUserData(m_vectorUserData.back().get());
- pEntry->EnableChildrenOnDemand();
- m_pPrefBox->Insert( pEntry, pParentEntry );
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(m_vectorUserData.back().get())));
+
+ m_xPrefBox->insert(pParentEntry, -1, &seqItems[i], &sId, nullptr, nullptr, nullptr, true, m_xScratchIter.get());
+ //It is needed, without this the selection line will be truncated.
+ m_xPrefBox->set_text(*m_xScratchIter, "", 1);
+ m_xPrefBox->set_text(*m_xScratchIter, "", 2);
+ m_xPrefBox->set_text(*m_xScratchIter, "", 3);
}
}
else
{
// leaf node
OUString sPropertyName = seqItems[i];
- SvTreeListEntries::iterator it = std::find_if(m_modifiedPrefBoxEntries.begin(), m_modifiedPrefBoxEntries.end(),
- [&sPath, &sPropertyName](std::unique_ptr<SvTreeListEntry> const& pEntry) -> bool
+ auto it = std::find_if(m_modifiedPrefBoxEntries.begin(), m_modifiedPrefBoxEntries.end(),
+ [&sPath, &sPropertyName](const prefBoxEntry& rEntry) -> bool
{
- return static_cast<UserData*>(pEntry->GetUserData())->sPropertyPath == sPath
- && static_cast<SvLBoxString&>(pEntry->GetItem(2)).GetText() == sPropertyName;
+ return rEntry.pUserData->sPropertyPath == sPath
+ && rEntry.sStatus == sPropertyName;
}
);
@@ -304,7 +312,7 @@ void CuiAboutConfigTabPage::FillItems(const Reference< XNameAccess >& xNameAcces
OUStringBuffer sValue;
if (it != m_modifiedPrefBoxEntries.end())
- sValue = static_cast< SvLBoxString& >( (*it)->GetItem(4) ).GetText();
+ sValue = it->sValue;
else
{
switch( aNode.getValueType().getTypeClass() )
@@ -548,30 +556,28 @@ CuiAboutConfigValueDialog::~CuiAboutConfigValueDialog()
{
}
-IMPL_LINK_NOARG( CuiAboutConfigTabPage, ResetBtnHdl_Impl, Button*, void )
+IMPL_LINK_NOARG( CuiAboutConfigTabPage, ResetBtnHdl_Impl, weld::Button&, void )
{
Reset();
}
-IMPL_LINK_NOARG( CuiAboutConfigTabPage, DoubleClickHdl_Impl, SvTreeListBox*, bool )
+IMPL_LINK_NOARG(CuiAboutConfigTabPage, DoubleClickHdl_Impl, weld::TreeView&, void)
{
- StandardHdl_Impl(nullptr);
- return true;
+ StandardHdl_Impl(*m_xEditBtn);
}
-IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, Button*, void )
+IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, weld::Button&, void )
{
- SvTreeListEntry* pEntry = m_pPrefBox->GetHdlEntry();
- if(pEntry == nullptr)
+ if (!m_xPrefBox->get_selected(m_xScratchIter.get()))
return;
- UserData *pUserData = static_cast<UserData*>(pEntry->GetUserData());
- if(pUserData && pUserData->bIsPropertyPath)
+ UserData *pUserData = reinterpret_cast<UserData*>(m_xPrefBox->get_id(*m_xScratchIter).toInt64());
+ if (pUserData && pUserData->bIsPropertyPath)
{
//if selection is a node
- OUString sPropertyName = SvTabListBox::GetEntryText( pEntry, 1 );
- OUString sPropertyType = SvTabListBox::GetEntryText( pEntry, 2 );
- OUString sPropertyValue = SvTabListBox::GetEntryText( pEntry, 3 );
+ OUString sPropertyName = m_xPrefBox->get_text(*m_xScratchIter, 1);
+ OUString sPropertyType = m_xPrefBox->get_text(*m_xScratchIter, 2);
+ OUString sPropertyValue = m_xPrefBox->get_text(*m_xScratchIter, 3);
std::shared_ptr< Prop_Impl > pProperty (new Prop_Impl( pUserData->sPropertyPath, sPropertyName, Any( sPropertyValue ) ) );
bool bSaveChanges = false;
@@ -621,7 +627,7 @@ IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, Button*, void )
else if( sPropertyType == "hyper" )
limit = HYPER_LEN_LIMIT;
- CuiAboutConfigValueDialog aValueDialog(GetFrameWeld(), sDialogValue, limit);
+ CuiAboutConfigValueDialog aValueDialog(m_xDialog.get(), sDialogValue, limit);
if (aValueDialog.run() == RET_OK )
{
@@ -742,38 +748,35 @@ IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, Button*, void )
AddToModifiedVector( pProperty );
//update listbox value.
- m_pPrefBox->SetEntryText( sDialogValue, pEntry, 3 );
+ m_xPrefBox->set_text(*m_xScratchIter, sDialogValue, 3);
//update m_prefBoxEntries
- SvTreeListEntries::iterator it = std::find_if(m_prefBoxEntries.begin(), m_prefBoxEntries.end(),
- [&pUserData, &sPropertyName](std::unique_ptr<SvTreeListEntry> const& rpEntry) -> bool
+ auto it = std::find_if(m_prefBoxEntries.begin(), m_prefBoxEntries.end(),
+ [&pUserData, &sPropertyName](const prefBoxEntry& rEntry) -> bool
{
- return static_cast<UserData*>(rpEntry->GetUserData())->sPropertyPath == pUserData->sPropertyPath
- && static_cast<SvLBoxString&>(rpEntry->GetItem(2)).GetText() == sPropertyName;
+ return rEntry.pUserData->sPropertyPath == pUserData->sPropertyPath
+ && rEntry.sStatus == sPropertyName;
}
);
if (it != m_prefBoxEntries.end())
{
- (*it)->ReplaceItem(std::make_unique<SvLBoxString>(sDialogValue), 4);
+ it->sValue = sDialogValue;
- SvTreeListEntries::iterator modifiedIt = std::find_if(
+ auto modifiedIt = std::find_if(
m_modifiedPrefBoxEntries.begin(), m_modifiedPrefBoxEntries.end(),
- [&pUserData, &sPropertyName](std::unique_ptr<SvTreeListEntry> const& rpEntry) -> bool
+ [&pUserData, &sPropertyName](const prefBoxEntry& rEntry) -> bool
{
- return static_cast<UserData*>(rpEntry->GetUserData())->sPropertyPath == pUserData->sPropertyPath
- && static_cast<SvLBoxString&>(rpEntry->GetItem(2)).GetText() == sPropertyName;
+ return rEntry.pUserData->sPropertyPath == pUserData->sPropertyPath
+ && rEntry.sStatus == sPropertyName;
}
);
- if( modifiedIt != m_modifiedPrefBoxEntries.end())
+ if (modifiedIt != m_modifiedPrefBoxEntries.end())
{
- (*modifiedIt)->ReplaceItem(std::make_unique<SvLBoxString>(sDialogValue), 4);
+ modifiedIt->sValue = sDialogValue;
}
else
{
- std::unique_ptr<SvTreeListEntry> pCloneEntry(
- new SvTreeListEntry);
- pCloneEntry->Clone((*it).get());
- m_modifiedPrefBoxEntries.push_back(std::move(pCloneEntry));
+ m_modifiedPrefBoxEntries.push_back(*it);
}
}
}
@@ -784,64 +787,71 @@ IMPL_LINK_NOARG( CuiAboutConfigTabPage, StandardHdl_Impl, Button*, void )
}
}
-IMPL_LINK_NOARG( CuiAboutConfigTabPage, SearchHdl_Impl, Button*, void)
+IMPL_LINK_NOARG( CuiAboutConfigTabPage, SearchHdl_Impl, weld::Button&, void)
{
- m_pPrefBox->Clear();
- m_pPrefBox->SetUpdateMode( false );
+ m_xPrefBox->clear();
+ m_xPrefBox->freeze();
- SvSortMode sortMode = m_pPrefBox->GetModel()->GetSortMode();
- sal_uInt16 sortedCol = m_pPrefBox->GetSortedCol();
+ if (m_bSorted)
+ m_xPrefBox->make_unsorted();
- if( sortMode != SortNone )
- m_pPrefBox->SortByCol( 0xFFFF );
-
- if( m_pSearchEdit->GetText().isEmpty() )
+ if (m_xSearchEdit->get_text().isEmpty())
{
- m_pPrefBox->Clear();
+ m_xPrefBox->clear();
Reference< XNameAccess > xConfigAccess = getConfigAccess( "/", false );
FillItems( xConfigAccess );
}
else
{
- m_options.searchString = m_pSearchEdit->GetText();
+ m_options.searchString = m_xSearchEdit->get_text();
utl::TextSearch textSearch( m_options );
for (auto const& it : m_prefBoxEntries)
{
sal_Int32 endPos, startPos = 0;
- for(size_t i = 1; i < it->ItemCount(); ++i)
+ for(size_t i = 0; i < 5; ++i)
{
OUString scrTxt;
- if(i == 1)
- scrTxt = static_cast< UserData* >( it->GetUserData() )->sPropertyPath;
- else
- scrTxt = static_cast< SvLBoxString& >( it->GetItem(i) ).GetText();
+
+ if (i == 0)
+ scrTxt = it.pUserData->sPropertyPath;
+ else if (i == 1)
+ scrTxt = it.sProp;
+ else if (i == 2)
+ scrTxt = it.sStatus;
+ else if (i == 3)
+ scrTxt = it.sType;
+ else if (i == 4)
+ scrTxt = it.sValue;
+
endPos = scrTxt.getLength();
- if( textSearch.SearchForward( scrTxt, &startPos, &endPos ) )
+ if (textSearch.SearchForward(scrTxt, &startPos, &endPos))
{
- SvTreeListEntry* pEntry = new SvTreeListEntry;
- pEntry->Clone( it.get() );
- InsertEntry( pEntry );
+ InsertEntry(it);
break;
}
}
}
}
- if( sortMode != SortNone )
- m_pPrefBox->SortByCol(sortedCol, sortMode == SortAscending);
+ m_xPrefBox->thaw();
+ if (m_bSorted)
+ m_xPrefBox->make_sorted();
- m_pPrefBox->SetUpdateMode( true );
+ m_xPrefBox->all_foreach([this](weld::TreeIter& rEntry) {
+ m_xPrefBox->expand_row(rEntry);
+ return false;
+ });
}
-void CuiAboutConfigTabPage::InsertEntry( SvTreeListEntry *pEntry)
+void CuiAboutConfigTabPage::InsertEntry(const prefBoxEntry& rEntry)
{
- OUString sPathWithProperty = static_cast< UserData* >(pEntry->GetUserData())->sPropertyPath;
- sal_Int32 index = sPathWithProperty.lastIndexOf(static_cast< SvLBoxString& >(pEntry->GetItem(1)).GetText());
+ OUString sPathWithProperty = rEntry.pUserData->sPropertyPath;
+ sal_Int32 index = sPathWithProperty.lastIndexOf(rEntry.sProp);
OUString sPath = sPathWithProperty.copy(0, index);
index = 0;
- SvTreeListEntry* pParentEntry;
- SvTreeListEntry* pGrandParentEntry = nullptr;
+ std::unique_ptr<weld::TreeIter> xParentEntry(m_xPrefBox->make_iterator());
+ std::unique_ptr<weld::TreeIter> xGrandParentEntry;
do
{
@@ -850,62 +860,68 @@ void CuiAboutConfigTabPage::InsertEntry( SvTreeListEntry *pEntry)
// deal with no parent case (tdf#107811)
if (index < 0)
{
- m_pPrefBox->Insert( pEntry, nullptr);
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(rEntry.pUserData)));
+ m_xPrefBox->insert(nullptr, -1, &rEntry.sProp, &sId, nullptr, nullptr, nullptr, false, m_xScratchIter.get());
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sStatus, 1);
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sType, 2);
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sValue, 3);
return;
}
OUString sParentName = sPath.copy(prevIndex+1, index - prevIndex - 1);
bool hasEntry = false;
- for(pParentEntry = m_pPrefBox->FirstChild(pGrandParentEntry); pParentEntry != nullptr; pParentEntry = pParentEntry->NextSibling())
- if(static_cast< SvLBoxString& >(pParentEntry->GetItem(1)).GetText() == sParentName)
+ bool bStartOk;
+
+ if (!xGrandParentEntry)
+ bStartOk = m_xPrefBox->get_iter_first(*xParentEntry);
+ else
+ {
+ m_xPrefBox->copy_iterator(*xGrandParentEntry, *xParentEntry);
+ bStartOk = m_xPrefBox->iter_children(*xParentEntry);
+ }
+
+ if (bStartOk)
+ {
+ do
{
- hasEntry = true;
- break;
- }
+ if (m_xPrefBox->get_text(*xParentEntry, 0) == sParentName)
+ {
+ hasEntry = true;
+ break;
+ }
+ } while (m_xPrefBox->iter_next_sibling(*xParentEntry));
+ }
- if(!hasEntry)
+ if (!hasEntry)
{
- pParentEntry = new SvTreeListEntry;
- pParentEntry->AddItem(std::make_unique<SvLBoxContextBmp>(
- SvTreeListBox::GetDefaultExpandedNodeImage(),
- SvTreeListBox::GetDefaultCollapsedNodeImage(), false));
- pParentEntry->AddItem(std::make_unique<SvLBoxString>(sParentName));
+ m_xPrefBox->insert(xGrandParentEntry.get(), -1, &sParentName, nullptr, nullptr, nullptr, nullptr, false, xParentEntry.get());
//It is needed, without this the selection line will be truncated.
- pParentEntry->AddItem(std::make_unique<SvLBoxString>(""));
- pParentEntry->AddItem(std::make_unique<SvLBoxString>(""));
- pParentEntry->AddItem(std::make_unique<SvLBoxString>(""));
- pParentEntry->EnableChildrenOnDemand(false);
- m_pPrefBox->Insert( pParentEntry, pGrandParentEntry );
+ m_xPrefBox->set_text(*xParentEntry, "", 1);
+ m_xPrefBox->set_text(*xParentEntry, "", 2);
+ m_xPrefBox->set_text(*xParentEntry, "", 3);
}
- if(pGrandParentEntry)
- m_pPrefBox->Expand( pGrandParentEntry );
- pGrandParentEntry = pParentEntry;
+ xGrandParentEntry = m_xPrefBox->make_iterator(xParentEntry.get());
} while(index < sPath.getLength() - 1);
- m_pPrefBox->Insert( pEntry, pParentEntry );
- m_pPrefBox->Expand( pParentEntry );
+ OUString sId(OUString::number(reinterpret_cast<sal_Int64>(rEntry.pUserData)));
+ m_xPrefBox->insert(xParentEntry.get(), -1, &rEntry.sProp, &sId, nullptr, nullptr, nullptr, false, m_xScratchIter.get());
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sStatus, 1);
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sType, 2);
+ m_xPrefBox->set_text(*m_xScratchIter, rEntry.sValue, 3);
}
-IMPL_LINK_NOARG( CuiAboutConfigTabPage, ExpandingHdl_Impl, SvTreeListBox*, bool )
+IMPL_LINK(CuiAboutConfigTabPage, ExpandingHdl_Impl, const weld::TreeIter&, rEntry, bool)
{
- SvTreeListEntry* pEntry = m_pPrefBox->GetHdlEntry();
-
- if(pEntry != nullptr && pEntry->HasChildrenOnDemand())
+ if (m_xPrefBox->iter_has_child(rEntry))
+ return true;
+ UserData *pUserData = reinterpret_cast<UserData*>(m_xPrefBox->get_id(rEntry).toInt64());
+ if (pUserData && !pUserData->bIsPropertyPath)
{
- pEntry->EnableChildrenOnDemand(false);
- SvTreeListEntry *pFirstChild = m_pPrefBox->FirstChild(pEntry);
- if(pFirstChild)
- m_pPrefBox->RemoveEntry(pFirstChild);
-
- if(pEntry->GetUserData() != nullptr)
- {
- UserData *pUserData = static_cast<UserData*>(pEntry->GetUserData());
- FillItems( pUserData->aXNameAccess, pEntry, pUserData->aLineage );
- }
+ assert(pUserData->aXNameAccess.is());
+ FillItems(pUserData->aXNameAccess, &rEntry, pUserData->aLineage);
}
-
- return pEntry && pEntry->HasChildren();
+ return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/options/optaboutconfig.hxx b/cui/source/options/optaboutconfig.hxx
index 989fbef6f0ad..008d8009f7dd 100644
--- a/cui/source/options/optaboutconfig.hxx
+++ b/cui/source/options/optaboutconfig.hxx
@@ -13,8 +13,6 @@
#include <com/sun/star/container/XNameAccess.hpp>
#include <i18nutil/searchopt.hxx>
-#include <svtools/simptabl.hxx>
-#include <vcl/dialog.hxx>
#include <vcl/weld.hxx>
#include <vector>
@@ -24,43 +22,55 @@ class CuiAboutConfigValueDialog;
struct Prop_Impl;
struct UserData;
-class CuiAboutConfigTabPage : public ModalDialog
+struct prefBoxEntry
+{
+ OUString sProp;
+ OUString sStatus;
+ OUString sType;
+ OUString sValue;
+ UserData* pUserData;
+};
+
+class CuiAboutConfigTabPage : public weld::GenericDialogController
{
private:
- VclPtr<SvSimpleTableContainer> m_pPrefCtrl;
- VclPtr<PushButton> m_pResetBtn;
- VclPtr<PushButton> m_pEditBtn;
- VclPtr<PushButton> m_pSearchBtn;
- VclPtr<Edit> m_pSearchEdit;
+ std::unique_ptr<weld::Button> m_xResetBtn;
+ std::unique_ptr<weld::Button> m_xEditBtn;
+ std::unique_ptr<weld::Button> m_xSearchBtn;
+ std::unique_ptr<weld::Entry> m_xSearchEdit;
+ std::unique_ptr<weld::TreeView> m_xPrefBox;
+ std::unique_ptr<weld::TreeIter> m_xScratchIter;
+
std::vector < std::unique_ptr<UserData> > m_vectorUserData;
- SvTreeListEntries m_modifiedPrefBoxEntries;
+ std::vector<prefBoxEntry> m_modifiedPrefBoxEntries;
std::vector< std::shared_ptr< Prop_Impl > > m_vectorOfModified;
- VclPtr< SvSimpleTable > m_pPrefBox;
//for search
i18nutil::SearchOptions2 m_options;
- SvTreeListEntries m_prefBoxEntries;
+ std::vector<prefBoxEntry> m_prefBoxEntries;
+
+ bool m_bSorted;
void AddToModifiedVector( const std::shared_ptr< Prop_Impl >& rProp );
static std::vector< OUString > commaStringToSequence( const OUString& rCommaSepString );
- void InsertEntry( SvTreeListEntry *pEntry);
+ void InsertEntry(const prefBoxEntry& rEntry);
- DECL_LINK( StandardHdl_Impl, Button*, void );
- DECL_LINK( DoubleClickHdl_Impl, SvTreeListBox*, bool );
- DECL_LINK( ResetBtnHdl_Impl, Button*, void );
- DECL_LINK( SearchHdl_Impl, Button*, void );
- DECL_LINK( ExpandingHdl_Impl, SvTreeListBox*, bool );
+ DECL_LINK(StandardHdl_Impl, weld::Button&, void);
+ DECL_LINK(DoubleClickHdl_Impl, weld::TreeView&, void);
+ DECL_LINK(ResetBtnHdl_Impl, weld::Button&, void);
+ DECL_LINK(SearchHdl_Impl, weld::Button&, void);
+ DECL_LINK(ExpandingHdl_Impl, const weld::TreeIter&, bool);
+ DECL_LINK(HeaderBarClick, int, void);
public:
- explicit CuiAboutConfigTabPage(vcl::Window* pParent);
+ explicit CuiAboutConfigTabPage(weld::Window* pParent);
virtual ~CuiAboutConfigTabPage() override;
- virtual void dispose() override;
void InsertEntry(const OUString &rPropertyPath, const OUString& rProp, const OUString& rStatus, const OUString& rType, const OUString& rValue,
- SvTreeListEntry *pParentEntry, bool bInsertToPrefBox);
+ const weld::TreeIter* pParentEntry, bool bInsertToPrefBox);
void Reset();
void FillItems(const css::uno::Reference<css::container::XNameAccess>& xNameAccess,
- SvTreeListEntry *pParentEntry = nullptr, int lineage = 0, bool bLoadAll = false);
+ const weld::TreeIter* pParentEntry = nullptr, int lineage = 0, bool bLoadAll = false);
static css::uno::Reference< css::container::XNameAccess > getConfigAccess( const OUString& sNodePath, bool bUpdate );
void FillItemSet();
};
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 3f58be565ee7..8fc6da8dd1db 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -36,6 +36,7 @@
#include <strings.hrc>
#include <vcl/svapp.hxx>
+#include <tools/debug.hxx>
#include <tools/urlobj.hxx>
#include <vcl/weld.hxx>
#include <unotools/pathoptions.hxx>
@@ -292,18 +293,15 @@ IMPL_LINK( SvxJavaOptionsPage, DialogClosedHdl, DialogClosedEvent*, pEvt, void )
}
}
-IMPL_STATIC_LINK_NOARG(SvxJavaOptionsPage, ExpertConfigHdl_Impl, weld::Button&, void)
+IMPL_LINK_NOARG(SvxJavaOptionsPage, ExpertConfigHdl_Impl, weld::Button&, void)
{
- //TODO weld this one too
- ScopedVclPtrInstance<CuiAboutConfigTabPage> pExpertConfigDlg(nullptr);
- pExpertConfigDlg->Reset();//initialize and reset function
+ CuiAboutConfigTabPage aExpertConfigDlg(GetFrameWeld());
+ aExpertConfigDlg.Reset();//initialize and reset function
- if( RET_OK == pExpertConfigDlg->Execute() )
+ if (RET_OK == aExpertConfigDlg.run())
{
- pExpertConfigDlg->FillItemSet();//save changes if there are any
+ aExpertConfigDlg.FillItemSet();//save changes if there are any
}
-
- pExpertConfigDlg.disposeAndClear();
}
void SvxJavaOptionsPage::ClearJavaInfo()
diff --git a/cui/source/options/optjava.hxx b/cui/source/options/optjava.hxx
index 4375b2079e8d..2000145d0b4e 100644
--- a/cui/source/options/optjava.hxx
+++ b/cui/source/options/optjava.hxx
@@ -95,7 +95,7 @@ private:
DECL_LINK(StartFolderPickerHdl, void *, void);
DECL_LINK(DialogClosedHdl, css::ui::dialogs::DialogClosedEvent*, void);
- DECL_STATIC_LINK(SvxJavaOptionsPage, ExpertConfigHdl_Impl, weld::Button&, void);
+ DECL_LINK(ExpertConfigHdl_Impl, weld::Button&, void);
void ClearJavaInfo();
void ClearJavaList();
diff --git a/cui/uiconfig/ui/aboutconfigdialog.ui b/cui/uiconfig/ui/aboutconfigdialog.ui
index 1e8af443ffe9..203d6f41bbcb 100644
--- a/cui/uiconfig/ui/aboutconfigdialog.ui
+++ b/cui/uiconfig/ui/aboutconfigdialog.ui
@@ -1,8 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.16.1 -->
+<!-- Generated with glade 3.22.1 -->
<interface domain="cui">
<requires lib="gtk+" version="3.18"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <object class="GtkTreeStore" id="liststore1">
+ <columns>
+ <!-- column-name expander -->
+ <column type="GdkPixbuf"/>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name text1 -->
+ <column type="gchararray"/>
+ <!-- column-name text2 -->
+ <column type="gchararray"/>
+ <!-- column-name text3 -->
+ <column type="gchararray"/>
+ <!-- column-name id -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
<object class="GtkDialog" id="AboutConfig">
<property name="can_focus">False</property>
<property name="border_width">6</property>
@@ -10,157 +25,15 @@
<property name="modal">True</property>
<property name="type_hint">normal</property>
<property name="skip_taskbar_hint">True</property>
+ <child>
+ <placeholder/>
+ </child>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
- <child>
- <object class="GtkAlignment" id="alignment1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <child>
- <object class="GtkBox" id="box1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkBox" id="box2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="spacing">6</property>
- <child>
- <object class="GtkEntry" id="searchEntry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="searchButton">
- <property name="label" translatable="yes" context="aboutconfigdialog|searchButton">_Search</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="has_default">True</property>
- <property name="receives_default">True</property>
- <property name="use_underline">True</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkGrid" id="grid1">
- <property name="can_focus">False</property>
- <property name="no_show_all">True</property>
- <property name="row_spacing">6</property>
- <property name="column_spacing">6</property>
- <property name="column_homogeneous">True</property>
- <child>
- <object class="GtkLabel" id="preference">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="yalign">0.49000000953674316</property>
- <property name="label" translatable="yes" context="aboutconfigdialog|preference">Preference Name</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="property">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xalign">0.51999998092651367</property>
- <property name="yalign">0.50999999046325684</property>
- <property name="label" translatable="yes" context="aboutconfigdialog|property">Property</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="type">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="aboutconfigdialog|type">Type</property>
- </object>
- <packing>
- <property name="left_attach">2</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="value">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes" context="aboutconfigdialog|value">Value</property>
- </object>
- <packing>
- <property name="left_attach">3</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="svtlo-SvSimpleTableContainer" id="preferences">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="hexpand">True</property>
- <property name="vexpand">True</property>
- <child internal-child="selection">
- <object class="GtkTreeSelection" id="Simple Table Container-selection"/>
- </child>
- </object>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
@@ -242,6 +115,156 @@
<property name="position">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <child>
+ <object class="GtkBox" id="box1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkEntry" id="searchEntry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="searchButton">
+ <property name="label" translatable="yes" context="aboutconfigdialog|searchButton">_Search</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <object class="GtkTreeView" id="preferences">
+ <property name="width_request">-1</property>
+ <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="headers_clickable">True</property>
+ <property name="search_column">1</property>
+ <property name="enable_tree_lines">True</property>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection" id="Macro Library List-selection1"/>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn2">
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="aboutconfigdialog|preference">Preference Name</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererPixbuf" id="cellrenderertext4"/>
+ <attributes>
+ <attribute name="pixbuf">0</attribute>
+ </attributes>
+ </child>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext2"/>
+ <attributes>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn3">
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="aboutconfigdialog|property">Property</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext3"/>
+ <attributes>
+ <attribute name="text">2</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn4">
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="aboutconfigdialog|type">Type</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext1"/>
+ <attributes>
+ <attribute name="text">3</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="treeviewcolumn5">
+ <property name="spacing">6</property>
+ <property name="title" translatable="yes" context="aboutconfigdialog|value">Value</property>
+ <property name="clickable">True</property>
+ <child>
+ <object class="GtkCellRendererText" id="cellrenderertext5"/>
+ <attributes>
+ <attribute name="text">4</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
</child>
<action-widgets>
diff --git a/solenv/sanitizers/ui/cui.suppr b/solenv/sanitizers/ui/cui.suppr
index 0e99cd7071d4..1fb9cf484716 100644
--- a/solenv/sanitizers/ui/cui.suppr
+++ b/solenv/sanitizers/ui/cui.suppr
@@ -1,9 +1,4 @@
cui/uiconfig/ui/aboutconfigdialog.ui://GtkEntry[@id='searchEntry'] no-labelled-by
-cui/uiconfig/ui/aboutconfigdialog.ui://GtkLabel[@id='preference'] orphan-label
-cui/uiconfig/ui/aboutconfigdialog.ui://GtkLabel[@id='property'] orphan-label
-cui/uiconfig/ui/aboutconfigdialog.ui://GtkLabel[@id='type'] orphan-label
-cui/uiconfig/ui/aboutconfigdialog.ui://GtkLabel[@id='value'] orphan-label
-cui/uiconfig/ui/aboutconfigdialog.ui://svtlo-SvSimpleTableContainer[@id='preferences'] no-labelled-by
cui/uiconfig/ui/acorexceptpage.ui://GtkEntry[@id='abbrev'] no-labelled-by
cui/uiconfig/ui/acorexceptpage.ui://GtkEntry[@id='double'] no-labelled-by
cui/uiconfig/ui/applyautofmtpage.ui://GtkLabel[@id='label1'] orphan-label
More information about the Libreoffice-commits
mailing list