diff options
author | Caolán McNamara <caolanm@redhat.com> | 2016-06-30 16:56:00 +0100 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2016-07-05 14:37:26 +0000 |
commit | 04081b6907132c867041dd492408b5349f26cd42 (patch) | |
tree | 6010ac84297670b0dbc3234ca46953933296a258 /sw/source/core/draw | |
parent | dd7a2c95b86d158be8d0637bdff13b9a0ed9954b (diff) |
a11y crash on deleting certain frame in certain document
I've an internal RH document which crashes in a11y when a paragraph with a
graphic and a drawing frame in it is deleted.
The SdrObject is removed and deleted, but when
SwAccessibleContext::DisposeChild is called the object does not pass IsShowing
so its not removed from the accessibility map. Leaving an entry in the map
pointing to a deleted SdrObject
So here take the route-one approach of always removing from the map
accessibility children which depend on a SdrObject which is getting deleted,
whether or not it is inside the visible area at the moment.
The real change here is to SwAccessibleContext::DisposeChild and to
SwFrame::RemoveDrawObj
Change-Id: I764cd54d6216d233756f52b5be66c80737b5e38d
Reviewed-on: https://gerrit.libreoffice.org/26824
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'sw/source/core/draw')
-rw-r--r-- | sw/source/core/draw/dview.cxx | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx index 495485c82bdd..5105092e4e8a 100644 --- a/sw/source/core/draw/dview.cxx +++ b/sw/source/core/draw/dview.cxx @@ -375,7 +375,7 @@ void SwDrawView::MoveRepeatedObjs( const SwAnchoredObject& _rMovedAnchoredObj, } else { - rImp.DisposeAccessibleObj( pAnchoredObj->GetDrawObj() ); + rImp.DisposeAccessibleObj(pAnchoredObj->GetDrawObj(), true); rImp.AddAccessibleObj( pAnchoredObj->GetDrawObj() ); } } @@ -411,7 +411,7 @@ void SwDrawView::MoveRepeatedObjs( const SwAnchoredObject& _rMovedAnchoredObj, } else { - rImp.DisposeAccessibleObj( pAnchoredObj->GetDrawObj() ); + rImp.DisposeAccessibleObj(pAnchoredObj->GetDrawObj(), true); rImp.AddAccessibleObj( pAnchoredObj->GetDrawObj() ); } } @@ -621,7 +621,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, sal_uLong nOldPos, } else { - rImp.DisposeAccessibleObj( pTmpObj ); + rImp.DisposeAccessibleObj(pTmpObj, true); rImp.AddAccessibleObj( pTmpObj ); } } @@ -640,7 +640,7 @@ void SwDrawView::ObjOrderChanged( SdrObject* pObj, sal_uLong nOldPos, else { // adjustments for accessibility API - rImp.DisposeAccessibleObj( pObj ); + rImp.DisposeAccessibleObj(pObj, true); rImp.AddAccessibleObj( pObj ); } |