summaryrefslogtreecommitdiff
path: root/sw/source/core/access/acctable.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-06-30 16:56:00 +0100
committerMichael Stahl <mstahl@redhat.com>2016-07-05 14:37:26 +0000
commit04081b6907132c867041dd492408b5349f26cd42 (patch)
tree6010ac84297670b0dbc3234ca46953933296a258 /sw/source/core/access/acctable.cxx
parentdd7a2c95b86d158be8d0637bdff13b9a0ed9954b (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/access/acctable.cxx')
-rw-r--r--sw/source/core/access/acctable.cxx8
1 files changed, 4 insertions, 4 deletions
diff --git a/sw/source/core/access/acctable.cxx b/sw/source/core/access/acctable.cxx
index 8f2c4e3ea60e..8172657d0eff 100644
--- a/sw/source/core/access/acctable.cxx
+++ b/sw/source/core/access/acctable.cxx
@@ -1391,18 +1391,18 @@ void SwAccessibleTable::InvalidatePosOrSize( const SwRect& rOldBox )
SwAccessibleContext::InvalidatePosOrSize( rOldBox );
}
-void SwAccessibleTable::Dispose( bool bRecursive )
+void SwAccessibleTable::Dispose(bool bRecursive, bool bCanSkipInvisible)
{
SolarMutexGuard aGuard;
if( GetRegisteredIn() )
GetRegisteredInNonConst()->Remove( this );
- SwAccessibleContext::Dispose( bRecursive );
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
}
void SwAccessibleTable::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
- bool bRecursive )
+ bool bRecursive, bool bCanSkipInvisible )
{
SolarMutexGuard aGuard;
@@ -1421,7 +1421,7 @@ void SwAccessibleTable::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
// about its change. We then must not call the superclass
uno::Reference< XAccessible > xAcc( GetMap()->GetContext( pFrame, false ) );
if( !xAcc.is() )
- SwAccessibleContext::DisposeChild( rChildFrameOrObj, bRecursive );
+ SwAccessibleContext::DisposeChild( rChildFrameOrObj, bRecursive, bCanSkipInvisible );
}
void SwAccessibleTable::InvalidateChildPosOrSize( const SwAccessibleChild& rChildFrameOrObj,