tdf#116675 vcl tree list: toggle by label click (e.g. in AutoFilter)

Checkboxes in a tree list could be toggled only by clicking
on them, but not on the associated labels, despite UX guidelines
and interoperability requirements especially for AutoFilter usage
in the spreadsheet.

Note: Implemented only for generic VCL plugin. Testing on Linux:

SAL_USE_VCLPLUGIN=gen instdir/program/soffice

Co-authored-by: Tibor Nagy (NISZ)

Change-Id: Ibc3d42271a1be53a54e11dedf4ab3ab506d680cf
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104414
Tested-by: László Németh <nemeth@numbertext.org>
Reviewed-by: László Németh <nemeth@numbertext.org>
diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx
index b3f9506..52243cc 100644
--- a/vcl/source/treelist/treelistbox.cxx
+++ b/vcl/source/treelist/treelistbox.cxx
@@ -2288,6 +2288,29 @@ void SvTreeListBox::MouseButtonDown( const MouseEvent& rMEvt )

void SvTreeListBox::MouseButtonUp( const MouseEvent& rMEvt )
{
    // tdf#116675 clicking on an entry should toggle its checkbox
    if (rMEvt.IsLeft() && (nTreeFlags & SvTreeFlags::CHKBTN))
    {
        const Point aPnt = rMEvt.GetPosPixel();
        SvTreeListEntry* pEntry = GetEntry(aPnt);
        if (pEntry && pEntry->m_Items.size() > 0)
        {
            SvLBoxItem* pItem = GetItem(pEntry, aPnt.X());
            // if the checkbox button was clicked, that will be toggled later, do not toggle here
            // anyway users probably don't want to toggle the checkbox by clickink on another button
            if (!pItem || pItem->GetType() != SvLBoxItemType::Button)
            {
                SvLBoxButton* pItemCheckBox
                    = static_cast<SvLBoxButton*>(pEntry->GetFirstItem(SvLBoxItemType::Button));
                if (pItemCheckBox)
                {
                    pItemCheckBox->ClickHdl(pEntry);
                    InvalidateEntry(pEntry);
                }
            }
        }
    }

    pImpl->MouseButtonUp( rMEvt );
}