diff options
author | Michael Stahl <mstahl@redhat.com> | 2015-04-24 23:31:06 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2015-04-25 22:45:51 +0200 |
commit | 104ed86c382b73505b477bf3024982dd27823023 (patch) | |
tree | df4c810b4395a146bf530012f35157b9f7902750 | |
parent | deb50a2a8a958be55a3564399b1973d365e82cf3 (diff) |
sw: fix SwAccessibleParagraph crash on delete
It happens that SwAccessibleParagraph::getCharacterBounds() is called
from ATK with a clearly invalid pPortionData member; the SwTxtNode has
no text but there are portions.
This is because after a deletion both a POS_CHANGED and a
INVALID_CONTENT event are created for the same SwAccessibleParagraph,
and they are merged into one POS_CHANGED event by
SwAccessibleMap::AppendEvent(), but
SwAccessibleContext::InvalidatePosOrSize() returns early if the
paragraph happens to not be visible, skipping the invalidation.
(regression from 76c549eb01dcb7b5bf28a271ce00e386f3d388ba, which
removed a Dispose() call; not sure if the Dispose() is needed here)
Change-Id: I985e9a439ee6c7024963eace876186f2247b9e03
-rw-r--r-- | sw/source/core/access/acccontext.cxx | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/sw/source/core/access/acccontext.cxx b/sw/source/core/access/acccontext.cxx index 3628cd829fe5..dd42c5244e7f 100644 --- a/sw/source/core/access/acccontext.cxx +++ b/sw/source/core/access/acccontext.cxx @@ -1160,12 +1160,9 @@ void SwAccessibleContext::InvalidatePosOrSize( const SwRect& ) FireVisibleDataEvent(); } - if( !bIsNewShowingState && - SwAccessibleChild( GetParent() ).IsVisibleChildrenOnly() ) - { - return; - } - + // note: InvalidatePosOrSize must call _InvalidateContent so that + // SwAccessibleParagraph updates its portions, or dispose it + // (see accmap.cxx: INVALID_CONTENT is contained in POS_CHANGED) _InvalidateContent( true ); } |