parent
a19eba4701
commit
b68c27bc15
@ -0,0 +1,531 @@
|
||||
From 538096616926587d2d81c8d258d4a5b57862f644 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Thu, 30 Jun 2016 15:33:14 +0100
|
||||
Subject: [PATCH] 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
|
||||
|
||||
everything is called Dispose, hard to find anything
|
||||
|
||||
Change-Id: I473ed39c975886a6be30860cb61f6fe59c5508a4
|
||||
(cherry picked from commit ad59dcf7dad19540403f5812677901e6fad30257)
|
||||
|
||||
Change-Id: I764cd54d6216d233756f52b5be66c80737b5e38d
|
||||
Reviewed-on: https://gerrit.libreoffice.org/26824
|
||||
Tested-by: Jenkins <ci@libreoffice.org>
|
||||
Reviewed-by: Michael Stahl <mstahl@redhat.com>
|
||||
(cherry picked from commit 04081b6907132c867041dd492408b5349f26cd42)
|
||||
---
|
||||
sw/inc/accmap.hxx | 9 +++++----
|
||||
sw/source/core/access/acccell.cxx | 4 ++--
|
||||
sw/source/core/access/acccell.hxx | 2 +-
|
||||
sw/source/core/access/acccontext.cxx | 20 +++++++++++---------
|
||||
sw/source/core/access/acccontext.hxx | 8 ++++----
|
||||
sw/source/core/access/accdoc.cxx | 4 ++--
|
||||
sw/source/core/access/accdoc.hxx | 2 +-
|
||||
sw/source/core/access/accframebase.cxx | 4 ++--
|
||||
sw/source/core/access/accframebase.hxx | 2 +-
|
||||
sw/source/core/access/accmap.cxx | 13 +++++++------
|
||||
sw/source/core/access/accnotextframe.cxx | 4 ++--
|
||||
sw/source/core/access/accnotextframe.hxx | 2 +-
|
||||
sw/source/core/access/acctable.cxx | 8 ++++----
|
||||
sw/source/core/access/acctable.hxx | 4 ++--
|
||||
sw/source/core/draw/dview.cxx | 8 ++++----
|
||||
sw/source/core/inc/viewimp.hxx | 10 +++++-----
|
||||
sw/source/core/layout/fly.cxx | 4 ++--
|
||||
sw/source/core/view/viewimp.cxx | 9 +++++----
|
||||
sw/source/uibase/docvw/PostItMgr.cxx | 2 +-
|
||||
19 files changed, 62 insertions(+), 57 deletions(-)
|
||||
|
||||
diff --git a/sw/inc/accmap.hxx b/sw/inc/accmap.hxx
|
||||
index 2178a72..25c9696 100644
|
||||
--- a/sw/inc/accmap.hxx
|
||||
+++ b/sw/inc/accmap.hxx
|
||||
@@ -182,10 +182,11 @@ public:
|
||||
void RemoveContext( const SdrObject *pObj );
|
||||
|
||||
// Dispose frame and its children if bRecursive is set
|
||||
- void Dispose( const SwFrame* pFrame,
|
||||
- const SdrObject* pObj,
|
||||
- vcl::Window* pWindow,
|
||||
- bool bRecursive = false );
|
||||
+ void A11yDispose( const SwFrame* pFrame,
|
||||
+ const SdrObject* pObj,
|
||||
+ vcl::Window* pWindow,
|
||||
+ bool bRecursive = false,
|
||||
+ bool bCanSkipInvisible = true );
|
||||
|
||||
void InvalidatePosOrSize( const SwFrame* pFrame,
|
||||
const SdrObject* pObj,
|
||||
diff --git a/sw/source/core/access/acccell.cxx b/sw/source/core/access/acccell.cxx
|
||||
index d448a7f..ca4ce14 100644
|
||||
--- a/sw/source/core/access/acccell.cxx
|
||||
+++ b/sw/source/core/access/acccell.cxx
|
||||
@@ -263,13 +263,13 @@ uno::Sequence< OUString > SAL_CALL SwAccessibleCell::getSupportedServiceNames()
|
||||
return aRet;
|
||||
}
|
||||
|
||||
-void SwAccessibleCell::Dispose( bool bRecursive )
|
||||
+void SwAccessibleCell::Dispose(bool bRecursive, bool bCanSkipInvisible)
|
||||
{
|
||||
const SwFrame *pParent = GetParent( SwAccessibleChild(GetFrame()), IsInPagePreview() );
|
||||
::rtl::Reference< SwAccessibleContext > xAccImpl(
|
||||
GetMap()->GetContextImpl( pParent, false ) );
|
||||
if( xAccImpl.is() )
|
||||
- xAccImpl->DisposeChild( SwAccessibleChild(GetFrame()), bRecursive );
|
||||
+ xAccImpl->DisposeChild(SwAccessibleChild(GetFrame()), bRecursive, bCanSkipInvisible);
|
||||
SwAccessibleContext::Dispose( bRecursive );
|
||||
}
|
||||
|
||||
diff --git a/sw/source/core/access/acccell.hxx b/sw/source/core/access/acccell.hxx
|
||||
index 594dc73..9d543c6 100644
|
||||
--- a/sw/source/core/access/acccell.hxx
|
||||
+++ b/sw/source/core/access/acccell.hxx
|
||||
@@ -83,7 +83,7 @@ public:
|
||||
getSupportedServiceNames()
|
||||
throw (css::uno::RuntimeException, std::exception) override;
|
||||
|
||||
- virtual void Dispose( bool bRecursive = false ) override;
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
|
||||
|
||||
virtual void InvalidatePosOrSize( const SwRect& rFrame ) override;
|
||||
|
||||
diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx
|
||||
index b74ed70..8fb2e30 100644
|
||||
--- a/sw/source/core/access/acccontext.cxx
|
||||
+++ b/sw/source/core/access/acccontext.cxx
|
||||
@@ -393,8 +393,9 @@ void SwAccessibleContext::InvalidateChildrenStates( const SwFrame* _pFrame,
|
||||
}
|
||||
}
|
||||
|
||||
-void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
|
||||
- bool bRecursive )
|
||||
+void SwAccessibleContext::DisposeChildren(const SwFrame *pFrame,
|
||||
+ bool bRecursive,
|
||||
+ bool bCanSkipInvisible)
|
||||
{
|
||||
const SwAccessibleChildSList aVisList( GetVisArea(), *pFrame, *(GetMap()) );
|
||||
SwAccessibleChildSList::const_iterator aIter( aVisList.begin() );
|
||||
@@ -410,7 +411,7 @@ void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
|
||||
if( xAccImpl.is() )
|
||||
xAccImpl->Dispose( bRecursive );
|
||||
else if( bRecursive )
|
||||
- DisposeChildren( pLower, bRecursive );
|
||||
+ DisposeChildren(pLower, bRecursive, bCanSkipInvisible);
|
||||
}
|
||||
else if ( rLower.GetDrawObject() )
|
||||
{
|
||||
@@ -422,7 +423,7 @@ void SwAccessibleContext::DisposeChildren( const SwFrame *pFrame,
|
||||
}
|
||||
else if ( rLower.GetWindow() )
|
||||
{
|
||||
- DisposeChild( rLower, false );
|
||||
+ DisposeChild(rLower, false, bCanSkipInvisible);
|
||||
}
|
||||
++aIter;
|
||||
}
|
||||
@@ -1032,7 +1033,7 @@ void SwAccessibleContext::ScrolledInShape( const SdrObject* ,
|
||||
}
|
||||
}
|
||||
|
||||
-void SwAccessibleContext::Dispose( bool bRecursive )
|
||||
+void SwAccessibleContext::Dispose(bool bRecursive, bool bCanSkipInvisible)
|
||||
{
|
||||
SolarMutexGuard aGuard;
|
||||
|
||||
@@ -1044,7 +1045,7 @@ void SwAccessibleContext::Dispose( bool bRecursive )
|
||||
|
||||
// dispose children
|
||||
if( bRecursive )
|
||||
- DisposeChildren( GetFrame(), bRecursive );
|
||||
+ DisposeChildren(GetFrame(), bRecursive, bCanSkipInvisible);
|
||||
|
||||
// get parent
|
||||
uno::Reference< XAccessible > xParent( GetWeakParent() );
|
||||
@@ -1083,12 +1084,13 @@ void SwAccessibleContext::Dispose( bool bRecursive )
|
||||
}
|
||||
|
||||
void SwAccessibleContext::DisposeChild( const SwAccessibleChild& rChildFrameOrObj,
|
||||
- bool bRecursive )
|
||||
+ bool bRecursive, bool bCanSkipInvisible )
|
||||
{
|
||||
SolarMutexGuard aGuard;
|
||||
|
||||
- if ( IsShowing( *(GetMap()), rChildFrameOrObj ) ||
|
||||
+ if ( !bCanSkipInvisible ||
|
||||
rChildFrameOrObj.AlwaysIncludeAsChild() ||
|
||||
+ IsShowing( *(GetMap()), rChildFrameOrObj ) ||
|
||||
!SwAccessibleChild( GetFrame() ).IsVisibleChildrenOnly() )
|
||||
{
|
||||
// If the object could have existed before, than there is nothing to do,
|
||||
@@ -1119,7 +1121,7 @@ void SwAccessibleContext::DisposeChild( const SwAccessibleChild& rChildFrameOrOb
|
||||
}
|
||||
}
|
||||
else if( bRecursive && rChildFrameOrObj.GetSwFrame() )
|
||||
- DisposeChildren( rChildFrameOrObj.GetSwFrame(), bRecursive );
|
||||
+ DisposeChildren(rChildFrameOrObj.GetSwFrame(), bRecursive, bCanSkipInvisible);
|
||||
}
|
||||
|
||||
void SwAccessibleContext::InvalidatePosOrSize( const SwRect& )
|
||||
diff --git a/sw/source/core/access/acccontext.hxx b/sw/source/core/access/acccontext.hxx
|
||||
index 3adcbbd..6c6ae83 100644
|
||||
--- a/sw/source/core/access/acccontext.hxx
|
||||
+++ b/sw/source/core/access/acccontext.hxx
|
||||
@@ -147,8 +147,8 @@ protected:
|
||||
|
||||
// Dispose children of the specified SwFrame. The SwFrame might belong to
|
||||
// the current object or to any other child or grandchild.
|
||||
- void DisposeChildren( const SwFrame *pFrame,
|
||||
- bool bRecursive );
|
||||
+ void DisposeChildren(const SwFrame *pFrame,
|
||||
+ bool bRecursive, bool bCanSkipInvisible);
|
||||
|
||||
void DisposeShape( const SdrObject *pObj,
|
||||
::accessibility::AccessibleShape *pAccImpl );
|
||||
@@ -315,10 +315,10 @@ public:
|
||||
// thread safe C++ interface
|
||||
|
||||
// The object is not visible an longer and should be destroyed
|
||||
- virtual void Dispose( bool bRecursive = false );
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true);
|
||||
|
||||
// The child object is not visible an longer and should be destroyed
|
||||
- virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrameOrObj, bool bRecursive );
|
||||
+ virtual void DisposeChild(const sw::access::SwAccessibleChild& rFrameOrObj, bool bRecursive, bool bCanSkipInvisible);
|
||||
|
||||
// The object has been moved by the layout
|
||||
virtual void InvalidatePosOrSize( const SwRect& rFrame );
|
||||
diff --git a/sw/source/core/access/accdoc.cxx b/sw/source/core/access/accdoc.cxx
|
||||
index bed5158..d01c612 100644
|
||||
--- a/sw/source/core/access/accdoc.cxx
|
||||
+++ b/sw/source/core/access/accdoc.cxx
|
||||
@@ -380,14 +380,14 @@ SwAccessibleDocument::~SwAccessibleDocument()
|
||||
pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
|
||||
}
|
||||
|
||||
-void SwAccessibleDocument::Dispose( bool bRecursive )
|
||||
+void SwAccessibleDocument::Dispose(bool bRecursive, bool bCanSkipInvisible)
|
||||
{
|
||||
OSL_ENSURE( GetFrame() && GetMap(), "already disposed" );
|
||||
|
||||
vcl::Window *pWin = GetMap() ? GetMap()->GetShell()->GetWin() : nullptr;
|
||||
if( pWin )
|
||||
pWin->RemoveChildEventListener( LINK( this, SwAccessibleDocument, WindowChildEventListener ));
|
||||
- SwAccessibleContext::Dispose( bRecursive );
|
||||
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
|
||||
}
|
||||
|
||||
IMPL_LINK_TYPED( SwAccessibleDocument, WindowChildEventListener, VclWindowEvent&, rEvent, void )
|
||||
diff --git a/sw/source/core/access/accdoc.hxx b/sw/source/core/access/accdoc.hxx
|
||||
index 5fdb656..e11f068 100644
|
||||
--- a/sw/source/core/access/accdoc.hxx
|
||||
+++ b/sw/source/core/access/accdoc.hxx
|
||||
@@ -198,7 +198,7 @@ public:
|
||||
// thread safe C++ interface
|
||||
|
||||
// The object is not visible an longer and should be destroyed
|
||||
- virtual void Dispose( bool bRecursive = false ) override;
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
|
||||
|
||||
// XAccessibleComponent
|
||||
sal_Int32 SAL_CALL getBackground()
|
||||
diff --git a/sw/source/core/access/accframebase.cxx b/sw/source/core/access/accframebase.cxx
|
||||
index 9cf0253..1382315 100644
|
||||
--- a/sw/source/core/access/accframebase.cxx
|
||||
+++ b/sw/source/core/access/accframebase.cxx
|
||||
@@ -263,14 +263,14 @@ void SwAccessibleFrameBase::Modify( const SfxPoolItem* pOld, const SfxPoolItem *
|
||||
}
|
||||
}
|
||||
|
||||
-void SwAccessibleFrameBase::Dispose( bool bRecursive )
|
||||
+void SwAccessibleFrameBase::Dispose(bool bRecursive, bool bCanSkipInvisible)
|
||||
{
|
||||
SolarMutexGuard aGuard;
|
||||
|
||||
if( GetRegisteredIn() )
|
||||
GetRegisteredInNonConst()->Remove( this );
|
||||
|
||||
- SwAccessibleContext::Dispose( bRecursive );
|
||||
+ SwAccessibleContext::Dispose(bRecursive, bCanSkipInvisible);
|
||||
}
|
||||
|
||||
//Get the selection cursor of the document.
|
||||
diff --git a/sw/source/core/access/accframebase.hxx b/sw/source/core/access/accframebase.hxx
|
||||
index 7d1ac0c..6df342a 100644
|
||||
--- a/sw/source/core/access/accframebase.hxx
|
||||
+++ b/sw/source/core/access/accframebase.hxx
|
||||
@@ -57,7 +57,7 @@ public:
|
||||
static sal_uInt8 GetNodeType( const SwFlyFrame *pFlyFrame );
|
||||
|
||||
// The object is not visible an longer and should be destroyed
|
||||
- virtual void Dispose( bool bRecursive = false ) override;
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
|
||||
virtual bool SetSelectedState( bool bSeleted ) override;
|
||||
};
|
||||
|
||||
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
|
||||
index 4c2aaae..2a6a3c3 100644
|
||||
--- a/sw/source/core/access/accmap.cxx
|
||||
+++ b/sw/source/core/access/accmap.cxx
|
||||
@@ -2241,10 +2241,11 @@ void SwAccessibleMap::RemoveContext( const SdrObject *pObj )
|
||||
}
|
||||
}
|
||||
|
||||
-void SwAccessibleMap::Dispose( const SwFrame *pFrame,
|
||||
- const SdrObject *pObj,
|
||||
- vcl::Window* pWindow,
|
||||
- bool bRecursive )
|
||||
+void SwAccessibleMap::A11yDispose( const SwFrame *pFrame,
|
||||
+ const SdrObject *pObj,
|
||||
+ vcl::Window* pWindow,
|
||||
+ bool bRecursive,
|
||||
+ bool bCanSkipInvisible )
|
||||
{
|
||||
SwAccessibleChild aFrameOrObj( pFrame, pObj, pWindow );
|
||||
|
||||
@@ -2355,7 +2356,7 @@ void SwAccessibleMap::Dispose( const SwFrame *pFrame,
|
||||
// be broadcasted at the end of the action to give the table
|
||||
// a chance to generate a single table change event.
|
||||
|
||||
- xParentAccImpl->DisposeChild( aFrameOrObj, bRecursive );
|
||||
+ xParentAccImpl->DisposeChild( aFrameOrObj, bRecursive, bCanSkipInvisible );
|
||||
}
|
||||
else if( xShapeAccImpl.is() )
|
||||
{
|
||||
@@ -3189,7 +3190,7 @@ bool SwAccessibleMap::ReplaceChild (
|
||||
// Also get keep parent.
|
||||
uno::Reference < XAccessible > xParent( pCurrentChild->getAccessibleParent() );
|
||||
pCurrentChild = nullptr; // will be released by dispose
|
||||
- Dispose( nullptr, pObj, nullptr );
|
||||
+ A11yDispose( nullptr, pObj, nullptr );
|
||||
|
||||
{
|
||||
osl::MutexGuard aGuard( maMutex );
|
||||
diff --git a/sw/source/core/access/accnotextframe.cxx b/sw/source/core/access/accnotextframe.cxx
|
||||
index 3af6558..5a007f0 100644
|
||||
--- a/sw/source/core/access/accnotextframe.cxx
|
||||
+++ b/sw/source/core/access/accnotextframe.cxx
|
||||
@@ -164,14 +164,14 @@ void SwAccessibleNoTextFrame::Modify( const SfxPoolItem* pOld, const SfxPoolItem
|
||||
}
|
||||
}
|
||||
|
||||
-void SwAccessibleNoTextFrame::Dispose( bool bRecursive )
|
||||
+void SwAccessibleNoTextFrame::Dispose(bool bRecursive, bool bCanSkipInvisible)
|
||||
{
|
||||
SolarMutexGuard aGuard;
|
||||
|
||||
if( aDepend.GetRegisteredIn() )
|
||||
aDepend.GetRegisteredIn()->Remove( &aDepend );
|
||||
|
||||
- SwAccessibleFrameBase::Dispose( bRecursive );
|
||||
+ SwAccessibleFrameBase::Dispose(bRecursive, bCanSkipInvisible);
|
||||
}
|
||||
|
||||
// #i73249#
|
||||
diff --git a/sw/source/core/access/accnotextframe.hxx b/sw/source/core/access/accnotextframe.hxx
|
||||
index d11dd25..6be3005 100644
|
||||
--- a/sw/source/core/access/accnotextframe.hxx
|
||||
+++ b/sw/source/core/access/accnotextframe.hxx
|
||||
@@ -98,7 +98,7 @@ public:
|
||||
throw ( css::uno::RuntimeException, std::exception ) override;
|
||||
|
||||
// The object is not visible an longer and should be destroyed
|
||||
- virtual void Dispose( bool bRecursive = false ) override;
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
|
||||
|
||||
virtual sal_Int32 SAL_CALL getCaretPosition( ) throw (css::uno::RuntimeException, std::exception) override;
|
||||
virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) throw (css::lang::IndexOutOfBoundsException, css::uno::RuntimeException, std::exception) override;
|
||||
diff --git a/sw/source/core/access/acctable.cxx b/sw/source/core/access/acctable.cxx
|
||||
index 0831419..8706683 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,
|
||||
diff --git a/sw/source/core/access/acctable.hxx b/sw/source/core/access/acctable.hxx
|
||||
index 8afd565..9f3c385 100644
|
||||
--- a/sw/source/core/access/acctable.hxx
|
||||
+++ b/sw/source/core/access/acctable.hxx
|
||||
@@ -224,10 +224,10 @@ public:
|
||||
virtual void InvalidatePosOrSize( const SwRect& rOldBox ) override;
|
||||
|
||||
// The object is not visible an longer and should be destroyed
|
||||
- virtual void Dispose( bool bRecursive = false ) override;
|
||||
+ virtual void Dispose(bool bRecursive = false, bool bCanSkipInvisible = true) override;
|
||||
|
||||
virtual void DisposeChild( const sw::access::SwAccessibleChild& rFrameOrObj,
|
||||
- bool bRecursive ) override;
|
||||
+ bool bRecursive, bool bCanSkipInvisible ) override;
|
||||
virtual void InvalidateChildPosOrSize( const sw::access::SwAccessibleChild& rFrameOrObj,
|
||||
const SwRect& rFrame ) override;
|
||||
|
||||
diff --git a/sw/source/core/draw/dview.cxx b/sw/source/core/draw/dview.cxx
|
||||
index 495485c..5105092 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 );
|
||||
}
|
||||
|
||||
diff --git a/sw/source/core/inc/viewimp.hxx b/sw/source/core/inc/viewimp.hxx
|
||||
index 4ebe489..be88ca9 100644
|
||||
--- a/sw/source/core/inc/viewimp.hxx
|
||||
+++ b/sw/source/core/inc/viewimp.hxx
|
||||
@@ -225,10 +225,10 @@ public:
|
||||
|
||||
/// Remove a frame from the accessible view
|
||||
void DisposeAccessible( const SwFrame *pFrame, const SdrObject *pObj,
|
||||
- bool bRecursive );
|
||||
+ bool bRecursive, bool bCanSkipInvisible );
|
||||
inline void DisposeAccessibleFrame( const SwFrame *pFrame,
|
||||
bool bRecursive = false );
|
||||
- inline void DisposeAccessibleObj( const SdrObject *pObj );
|
||||
+ inline void DisposeAccessibleObj( const SdrObject *pObj, bool bCanSkipInvisible );
|
||||
|
||||
/// Move a frame's position in the accessible view
|
||||
void MoveAccessible( const SwFrame *pFrame, const SdrObject *pObj,
|
||||
@@ -278,12 +278,12 @@ inline SwAccessibleMap& SwViewShellImp::GetAccessibleMap()
|
||||
inline void SwViewShellImp::DisposeAccessibleFrame( const SwFrame *pFrame,
|
||||
bool bRecursive )
|
||||
{
|
||||
- DisposeAccessible( pFrame, nullptr, bRecursive );
|
||||
+ DisposeAccessible( pFrame, nullptr, bRecursive, true );
|
||||
}
|
||||
|
||||
-inline void SwViewShellImp::DisposeAccessibleObj( const SdrObject *pObj )
|
||||
+inline void SwViewShellImp::DisposeAccessibleObj( const SdrObject *pObj, bool bCanSkipInvisible )
|
||||
{
|
||||
- DisposeAccessible( nullptr, pObj, false );
|
||||
+ DisposeAccessible( nullptr, pObj, false, bCanSkipInvisible );
|
||||
}
|
||||
|
||||
inline void SwViewShellImp::MoveAccessibleFrame( const SwFrame *pFrame,
|
||||
diff --git a/sw/source/core/layout/fly.cxx b/sw/source/core/layout/fly.cxx
|
||||
index 66c131d..5ad9f40 100644
|
||||
--- a/sw/source/core/layout/fly.cxx
|
||||
+++ b/sw/source/core/layout/fly.cxx
|
||||
@@ -2160,8 +2160,8 @@ void SwFrame::RemoveDrawObj( SwAnchoredObject& _rToRemoveObj )
|
||||
if( pSh )
|
||||
{
|
||||
SwRootFrame* pLayout = getRootFrame();
|
||||
- if( pLayout && pLayout->IsAnyShellAccessible() )
|
||||
- pSh->Imp()->DisposeAccessibleObj( _rToRemoveObj.GetDrawObj() );
|
||||
+ if (pLayout && pLayout->IsAnyShellAccessible())
|
||||
+ pSh->Imp()->DisposeAccessibleObj(_rToRemoveObj.GetDrawObj(), false);
|
||||
}
|
||||
|
||||
// deregister from page frame
|
||||
diff --git a/sw/source/core/view/viewimp.cxx b/sw/source/core/view/viewimp.cxx
|
||||
index 254a5b7..e403be9 100644
|
||||
--- a/sw/source/core/view/viewimp.cxx
|
||||
+++ b/sw/source/core/view/viewimp.cxx
|
||||
@@ -300,15 +300,16 @@ void SwViewShellImp::UpdateAccessible()
|
||||
GetAccessibleMap().GetDocumentView();
|
||||
}
|
||||
|
||||
-void SwViewShellImp::DisposeAccessible( const SwFrame *pFrame,
|
||||
- const SdrObject *pObj,
|
||||
- bool bRecursive )
|
||||
+void SwViewShellImp::DisposeAccessible(const SwFrame *pFrame,
|
||||
+ const SdrObject *pObj,
|
||||
+ bool bRecursive,
|
||||
+ bool bCanSkipInvisible)
|
||||
{
|
||||
OSL_ENSURE( !pFrame || pFrame->IsAccessibleFrame(), "frame is not accessible" );
|
||||
for(SwViewShell& rTmp : GetShell()->GetRingContainer())
|
||||
{
|
||||
if( rTmp.Imp()->IsAccessible() )
|
||||
- rTmp.Imp()->GetAccessibleMap().Dispose( pFrame, pObj, nullptr, bRecursive );
|
||||
+ rTmp.Imp()->GetAccessibleMap().A11yDispose( pFrame, pObj, nullptr, bRecursive, bCanSkipInvisible );
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/sw/source/uibase/docvw/PostItMgr.cxx b/sw/source/uibase/docvw/PostItMgr.cxx
|
||||
index 1ef3524..f6f4361 100644
|
||||
--- a/sw/source/uibase/docvw/PostItMgr.cxx
|
||||
+++ b/sw/source/uibase/docvw/PostItMgr.cxx
|
||||
@@ -2194,7 +2194,7 @@ void SwPostItMgr::DisconnectSidebarWinFromFrame( const SwFrame& rFrame,
|
||||
if ( bRemoved &&
|
||||
mpWrtShell->GetAccessibleMap() )
|
||||
{
|
||||
- mpWrtShell->GetAccessibleMap()->Dispose( nullptr, nullptr, &rSidebarWin );
|
||||
+ mpWrtShell->GetAccessibleMap()->A11yDispose( nullptr, nullptr, &rSidebarWin );
|
||||
}
|
||||
}
|
||||
}
|
||||
--
|
||||
2.7.4
|
||||
|
Loading…
Reference in new issue