Resolves: tdf#132143 make placeholder nodes unselectable

Change-Id: I13bcb43122f6b82114f287f13da20a584bf5f349
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92862
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/include/vcl/viewdataentry.hxx b/include/vcl/viewdataentry.hxx
index 85f4d32..74d7d22 100644
--- a/include/vcl/viewdataentry.hxx
+++ b/include/vcl/viewdataentry.hxx
@@ -72,6 +72,7 @@ public:
    void SetFocus( bool bFocus );
    void SetSelected( bool bSelected );
    void SetExpanded( bool bExpanded );
    void SetSelectable( bool bSelectable );
    void SetDragTarget( bool bDragTarget )
    {
        mbDragTarget = bDragTarget;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 5313ae3..ebf0b49 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -3492,7 +3492,9 @@ public:

        if (bChildrenOnDemand)
        {
            m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
            SvTreeListEntry* pPlaceHolder = m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pPlaceHolder);
            pViewData->SetSelectable(false);
        }
        enable_notify_events();
    }
@@ -4259,7 +4261,11 @@ public:
        SvTreeListEntry* pPlaceHolder = GetPlaceHolderChild(rVclIter.iter);

        if (bChildrenOnDemand && !pPlaceHolder)
            m_xTreeView->InsertEntry("<dummy>", rVclIter.iter, false, 0, nullptr);
        {
            pPlaceHolder = m_xTreeView->InsertEntry("<dummy>", rVclIter.iter, false, 0, nullptr);
            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pPlaceHolder);
            pViewData->SetSelectable(false);
        }
        else if (!bChildrenOnDemand && pPlaceHolder)
            m_xTreeView->RemoveEntry(pPlaceHolder);

@@ -4801,7 +4807,9 @@ IMPL_LINK_NOARG(SalInstanceTreeView, ExpandingHdl, SvTreeListBox*, bool)
        //expand disallowed, restore placeholder
        if (!bRet)
        {
            m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
            pPlaceHolder = m_xTreeView->InsertEntry("<dummy>", pEntry, false, 0, nullptr);
            SvViewDataEntry* pViewData = m_xTreeView->GetViewDataEntry(pPlaceHolder);
            pViewData->SetSelectable(false);
        }
        m_aExpandingPlaceHolderParents.erase(pEntry);
    }
diff --git a/vcl/source/treelist/viewdataentry.cxx b/vcl/source/treelist/viewdataentry.cxx
index bde20c3..76a3fc7 100644
--- a/vcl/source/treelist/viewdataentry.cxx
+++ b/vcl/source/treelist/viewdataentry.cxx
@@ -66,6 +66,11 @@ void SvViewDataEntry::SetExpanded( bool bExpanded )
    mbExpanded = bExpanded;
}

void SvViewDataEntry::SetSelectable( bool bSelectable )
{
    mbSelectable = bSelectable;
}

void SvViewDataEntry::Init(size_t nSize)
{
    maItems.resize(nSize);