tdf#112696 if we select every member of a group, select the group itself

Change-Id: I1b540772ff3a04c2cb32135c972f3a745c307eb9
Reviewed-on: https://gerrit.libreoffice.org/64180
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/sw/source/uibase/uno/unotxvw.cxx b/sw/source/uibase/uno/unotxvw.cxx
index 1a9b9b1..204f8ed 100644
--- a/sw/source/uibase/uno/unotxvw.cxx
+++ b/sw/source/uibase/uno/unotxvw.cxx
@@ -312,6 +312,33 @@ sal_Bool SwXTextView::select(const uno::Any& aInterface)
                bRet = true;
            }
        }

        // tdf#112696 if we selected every individual element of a group, then
        // select that group instead
        const SdrMarkList &rMrkList = pDrawView->GetMarkedObjectList();
        size_t nMarkCount = rMrkList.GetMarkCount();
        if (nMarkCount > 1)
        {
            SdrObject* pObject = rMrkList.GetMark(0)->GetMarkedSdrObj();
            SdrObject* pGroupParent = pObject->getParentSdrObjectFromSdrObject();
            for (size_t i = 1; i < nMarkCount; ++i)
            {
                pObject = rMrkList.GetMark(i)->GetMarkedSdrObj();
                SdrObject* pParent = pObject->getParentSdrObjectFromSdrObject();
                if (pParent != pGroupParent)
                {
                    pGroupParent = nullptr;
                    break;
                }
            }

            if (pGroupParent && pGroupParent->IsGroupObject() &&
                pGroupParent->getChildrenOfSdrObject()->GetObjCount() == nMarkCount)
            {
                pDrawView->UnmarkAll();
                pDrawView->MarkObj(pGroupParent, pPV);
            }
        }
    }
    return bRet;
}