summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-01-17 11:21:22 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-01-17 15:27:33 +0200
commit492ccb76d75cbce976f5a4886cbe5eec3d132898 (patch)
treeb81cf1c17edce1c7aa23ee5444727f8131ffa554
parent3b395bc73fb8709c738adebd94de8319e27ba878 (diff)
use rtl::Reference to manage ScAccessiblePageHeaderArea's
instead of manual acquire/release Change-Id: I368530f30388cd4bba6dbc1fe6d6a5dd1e25f298
-rw-r--r--sc/source/ui/Accessibility/AccessiblePageHeader.cxx82
-rw-r--r--sc/source/ui/inc/AccessiblePageHeader.hxx5
2 files changed, 27 insertions, 60 deletions
diff --git a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx
index 134fdf10006f..1d5976679294 100644
--- a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx
+++ b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx
@@ -50,45 +50,13 @@ using namespace ::com::sun::star::accessibility;
const sal_uInt8 MAX_AREAS = 3;
-//===== internal ============================================================
-struct Acquire
-{
- void operator() (ScAccessiblePageHeaderArea* pArea)
- {
- if (pArea)
- pArea->acquire();
- }
-};
-
-struct Release
-{
- void operator() (ScAccessiblePageHeaderArea*& pArea)
- {
- if (pArea)
- pArea->release();
- }
-};
-
-struct Dispose
-{
- void operator() (ScAccessiblePageHeaderArea*& pArea)
- {
- if (pArea)
- {
- pArea->dispose();
- pArea->release();
- }
- pArea = nullptr;
- }
-};
-
ScAccessiblePageHeader::ScAccessiblePageHeader( const css::uno::Reference<css::accessibility::XAccessible>& rxParent,
ScPreviewShell* pViewShell, bool bHeader, sal_Int32 nIndex ) :
ScAccessibleContextBase( rxParent, bHeader ? AccessibleRole::HEADER : AccessibleRole::FOOTER ),
mpViewShell( pViewShell ),
mnIndex( nIndex ),
mbHeader( bHeader ),
- maAreas(MAX_AREAS, nullptr),
+ maAreas(MAX_AREAS, rtl::Reference<ScAccessiblePageHeaderArea>()),
mnChildCount(-1)
{
if (mpViewShell)
@@ -113,7 +81,14 @@ void SAL_CALL ScAccessiblePageHeader::disposing()
mpViewShell->RemoveAccessibilityObject(*this);
mpViewShell = nullptr;
}
- std::for_each(maAreas.begin(), maAreas.end(), Dispose());
+ for (auto & i : maAreas)
+ {
+ if (i.is())
+ {
+ i->dispose();
+ i.clear();
+ }
+ }
ScAccessibleContextBase::disposing();
}
@@ -125,37 +100,35 @@ void ScAccessiblePageHeader::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
// only notify if child exist, otherwise it is not necessary
if (rHint.GetId() == SfxHintId::ScDataChanged)
{
- ScHFAreas aOldAreas(maAreas);
- std::for_each(aOldAreas.begin(), aOldAreas.end(), Acquire());
+ std::vector<rtl::Reference<ScAccessiblePageHeaderArea>> aOldAreas(maAreas);
mnChildCount = -1;
getAccessibleChildCount();
for (sal_uInt8 i = 0; i < MAX_AREAS; ++i)
{
- if ((aOldAreas[i] && maAreas[i] && !ScGlobal::EETextObjEqual(aOldAreas[i]->GetEditTextObject(), maAreas[i]->GetEditTextObject())) ||
- (aOldAreas[i] && !maAreas[i]) || (!aOldAreas[i] && maAreas[i]))
+ if ((aOldAreas[i].is() && maAreas[i].is() && !ScGlobal::EETextObjEqual(aOldAreas[i]->GetEditTextObject(), maAreas[i]->GetEditTextObject())) ||
+ (aOldAreas[i].is() && !maAreas[i].is()) || (!aOldAreas[i].is() && maAreas[i].is()))
{
- if (aOldAreas[i] && aOldAreas[i]->GetEditTextObject())
+ if (aOldAreas[i].is() && aOldAreas[i]->GetEditTextObject())
{
AccessibleEventObject aEvent;
aEvent.EventId = AccessibleEventId::CHILD;
aEvent.Source = uno::Reference< XAccessibleContext >(this);
- aEvent.OldValue = uno::makeAny(uno::Reference<XAccessible>(aOldAreas[i]));
+ aEvent.OldValue = uno::makeAny(uno::Reference<XAccessible>(aOldAreas[i].get()));
CommitChange(aEvent); // child gone - event
aOldAreas[i]->dispose();
}
- if (maAreas[i] && maAreas[i]->GetEditTextObject())
+ if (maAreas[i].is() && maAreas[i]->GetEditTextObject())
{
AccessibleEventObject aEvent;
aEvent.EventId = AccessibleEventId::CHILD;
aEvent.Source = uno::Reference< XAccessibleContext >(this);
- aEvent.NewValue = uno::makeAny(uno::Reference<XAccessible>(maAreas[i]));
+ aEvent.NewValue = uno::makeAny(uno::Reference<XAccessible>(maAreas[i].get()));
CommitChange(aEvent); // new child - event
}
}
}
- std::for_each(aOldAreas.begin(), aOldAreas.end(), Release());
}
else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged)
{
@@ -188,8 +161,8 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleAtPo
sal_uInt8 i(0);
while(!xRet.is() && i < MAX_AREAS)
{
- if (maAreas[i])
- xRet = maAreas[i];
+ if (maAreas[i].is())
+ xRet = maAreas[i].get();
else
++i;
}
@@ -254,14 +227,14 @@ uno::Reference< XAccessible > SAL_CALL ScAccessiblePageHeader::getAccessibleChil
if(mnChildCount < 0)
getAccessibleChildCount();
- ScHFAreas::iterator aItr = maAreas.begin();
- ScHFAreas::iterator aEndItr = maAreas.end();
+ auto aItr = maAreas.begin();
+ auto aEndItr = maAreas.end();
while (!xRet.is() && (nIndex >= 0) && (aItr != aEndItr))
{
- if (*aItr)
+ if (aItr->is())
{
if (nIndex == 0)
- xRet = *aItr;
+ xRet = aItr->get();
else
--nIndex;
}
@@ -390,29 +363,22 @@ void ScAccessiblePageHeader::AddChild(const EditTextObject* pArea, sal_uInt32 nI
{
if (pArea && (!pArea->GetText(0).isEmpty() || (pArea->GetParagraphCount() > 1)))
{
- if (maAreas[nIndex])
+ if (maAreas[nIndex].is())
{
if (!ScGlobal::EETextObjEqual(maAreas[nIndex]->GetEditTextObject(), pArea))
{
- maAreas[nIndex]->release();
maAreas[nIndex] = new ScAccessiblePageHeaderArea(this, mpViewShell, pArea, mbHeader, eAdjust);
- maAreas[nIndex]->acquire();
}
}
else
{
maAreas[nIndex] = new ScAccessiblePageHeaderArea(this, mpViewShell, pArea, mbHeader, eAdjust);
- maAreas[nIndex]->acquire();
}
++mnChildCount;
}
else
{
- if (maAreas[nIndex])
- {
- maAreas[nIndex]->release();
- maAreas[nIndex] = nullptr;
- }
+ maAreas[nIndex].clear();
}
}
diff --git a/sc/source/ui/inc/AccessiblePageHeader.hxx b/sc/source/ui/inc/AccessiblePageHeader.hxx
index 395f80b3d112..6a8645f735ea 100644
--- a/sc/source/ui/inc/AccessiblePageHeader.hxx
+++ b/sc/source/ui/inc/AccessiblePageHeader.hxx
@@ -22,6 +22,7 @@
#include "AccessibleContextBase.hxx"
#include <editeng/svxenum.hxx>
+#include <rtl/ref.hxx>
class ScPreviewShell;
class EditTextObject;
@@ -83,8 +84,8 @@ private:
ScPreviewShell* mpViewShell;
sal_Int32 mnIndex;
bool mbHeader;
- typedef std::vector< ScAccessiblePageHeaderArea* > ScHFAreas;
- ScHFAreas maAreas;
+ std::vector< rtl::Reference<ScAccessiblePageHeaderArea> >
+ maAreas;
sal_Int32 mnChildCount;
bool IsDefunc(