[Libreoffice-commits] core.git: include/vcl vcl/source
Attila Szűcs (via logerrit)
logerrit at kemper.freedesktop.org
Fri Mar 12 09:23:25 UTC 2021
include/vcl/toolkit/treelistbox.hxx | 1
vcl/source/treelist/treelistbox.cxx | 41 +++++++++++++++++++++++++++++++++++-
2 files changed, 41 insertions(+), 1 deletion(-)
New commits:
commit 216f32464ccb0f096e5fdf77f82baf30ae7bab5f
Author: Attila Szűcs <szucs.attila3 at nisz.hu>
AuthorDate: Fri Feb 26 21:09:10 2021 +0100
Commit: László Németh <nemeth at numbertext.org>
CommitDate: Fri Mar 12 10:22:48 2021 +0100
tdf#140136 sc: fix tree list expansion in AutoFilter
Now clicking on +/- buttons (i.e. before the checkbox)
only expands/collapses the tree without toggling the
associated checkboxes, using the new GetItemPos() to get
the position (and width) of the checkbox in the actual
list item.
Regression from commit 2471d6f44c7e8ecbe86a90eeb593b899a08a7408
"tdf#116675 vcl tree list: toggle by label click (e.g. in AutoFilter)".
Note: Use generic VCL plugin to test it on Linux:
SAL_USE_VCLPLUGIN=gen instdir/program/soffice
Co-authored-by: Tibor Nagy (NISZ)
Change-Id: Iceb17bc9b235d297c313361429ee89f04d809e96
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/111668
Tested-by: László Németh <nemeth at numbertext.org>
Reviewed-by: László Németh <nemeth at numbertext.org>
diff --git a/include/vcl/toolkit/treelistbox.hxx b/include/vcl/toolkit/treelistbox.hxx
index d11a006d4c1a..bc7fcd81ccc3 100644
--- a/include/vcl/toolkit/treelistbox.hxx
+++ b/include/vcl/toolkit/treelistbox.hxx
@@ -637,6 +637,7 @@ public:
void InvalidateEntry( SvTreeListEntry* );
SvLBoxItem* GetItem( SvTreeListEntry*, tools::Long nX, SvLBoxTab** ppTab);
SvLBoxItem* GetItem( SvTreeListEntry*, tools::Long nX );
+ std::pair<tools::Long, tools::Long> GetItemPos(SvTreeListEntry* pEntry, sal_uInt16 nTabIdx);
void SetDragDropMode( DragDropMode );
void SetSelectionMode( SelectionMode );
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index 4cc062295d1c..9af367f2f460 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -2304,7 +2304,7 @@ void SvTreeListBox::MouseButtonUp( const MouseEvent& rMEvt )
{
SvLBoxButton* pItemCheckBox
= static_cast<SvLBoxButton*>(pEntry->GetFirstItem(SvLBoxItemType::Button));
- if (pItemCheckBox)
+ if (pItemCheckBox && GetItemPos(pEntry, 0).first < aPnt.X() - GetMapMode().GetOrigin().X())
{
pItemCheckBox->ClickHdl(pEntry);
InvalidateEntry(pEntry);
@@ -3035,6 +3035,45 @@ SvLBoxItem* SvTreeListBox::GetItem_Impl( SvTreeListEntry* pEntry, tools::Long nX
return pItemClicked;
}
+std::pair<tools::Long, tools::Long> SvTreeListBox::GetItemPos(SvTreeListEntry* pEntry, sal_uInt16 nTabIdx)
+{
+ sal_uInt16 nTabCount = aTabs.size();
+ sal_uInt16 nItemCount = pEntry->ItemCount();
+ if (nTabIdx >= nItemCount || nTabIdx >= nTabCount)
+ return std::make_pair(-1, -1);
+
+ SvLBoxTab* pTab = aTabs.front().get();
+ SvLBoxItem* pItem = &pEntry->GetItem(nTabIdx);
+ sal_uInt16 nNextItem = nTabIdx + 1;
+
+ tools::Long nRealWidth = pImpl->GetOutputSize().Width();
+ nRealWidth -= GetMapMode().GetOrigin().X();
+
+ SvLBoxTab* pNextTab = nNextItem < nTabCount ? aTabs[nNextItem].get() : nullptr;
+ tools::Long nStart = GetTabPos(pEntry, pTab);
+
+ tools::Long nNextTabPos;
+ if (pNextTab)
+ nNextTabPos = GetTabPos(pEntry, pNextTab);
+ else
+ {
+ nNextTabPos = nRealWidth;
+ if (nStart > nRealWidth)
+ nNextTabPos += 50;
+ }
+
+ auto nItemWidth(pItem->GetWidth(this, pEntry));
+ nStart += pTab->CalcOffset(nItemWidth, nNextTabPos - nStart);
+ auto nLen = nItemWidth;
+ if (pNextTab)
+ {
+ tools::Long nTabWidth = GetTabPos(pEntry, pNextTab) - nStart;
+ if (nTabWidth < nLen)
+ nLen = nTabWidth;
+ }
+ return std::make_pair(nStart, nLen);
+}
+
tools::Long SvTreeListBox::getPreferredDimensions(std::vector<tools::Long> &rWidths) const
{
tools::Long nHeight = 0;
More information about the Libreoffice-commits
mailing list