summaryrefslogtreecommitdiff
path: root/sc/source/ui/Accessibility/AccessibleDocument.cxx
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2015-09-21 15:35:09 +0200
committerEike Rathke <erack@redhat.com>2015-10-01 13:10:51 +0000
commit6f1e77fc600f776433a759172323b4afec3d811e (patch)
tree2e6c7116aa933243c362872ae01dda86a7e99430 /sc/source/ui/Accessibility/AccessibleDocument.cxx
parent62b39a7c48dcd74f5e14ffd78b3ab917a84d7622 (diff)
rhbz#1264753: Avoid this being release()ed to 0 in ScAccessibleDocument ctor
...where the most plausible explanation for the bug's crash from within ScGridWindow::CreateAccessible appears to be that the call to xAcc = new ScAccessibleEditObject(this, ...) which stores "this" as a css::uno::Reference in the ScAccessibleEditObject, can cause xAcc to be deleted synchronously from within the ScAccessibleDocument ctor, causing the ScAccessibleDocument instance itself to also be deleted. So re-use the existing ScAccessibleDocument::Init (already properly called at the only place that instantiates ScAccessibleDocument, in ScGridWindow::CreateAccessible) to defer any initialization that uses "this", and hope that the resulting slight re-ordering of when certain initialization code is executed does not cause problems. Change-Id: I524a1659394e8900b7d33de358fdd4baf647c083 Reviewed-on: https://gerrit.libreoffice.org/18750 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
Diffstat (limited to 'sc/source/ui/Accessibility/AccessibleDocument.cxx')
-rw-r--r--sc/source/ui/Accessibility/AccessibleDocument.cxx24
1 files changed, 12 insertions, 12 deletions
diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx
index 9fe0208b6196..0022e9ddc30a 100644
--- a/sc/source/ui/Accessibility/AccessibleDocument.cxx
+++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx
@@ -1412,10 +1412,15 @@ ScAccessibleDocument::ScAccessibleDocument(
mpTempAccEdit(NULL),
mbCompleteSheetSelected(false)
{
- if (pViewShell)
+ maVisArea = GetVisibleArea_Impl();
+}
+
+void ScAccessibleDocument::Init()
+{
+ if (mpViewShell)
{
- pViewShell->AddAccessibilityObject(*this);
- vcl::Window *pWin = pViewShell->GetWindowByPos(eSplitPos);
+ mpViewShell->AddAccessibilityObject(*this);
+ vcl::Window *pWin = mpViewShell->GetWindowByPos(meSplitPos);
if( pWin )
{
pWin->AddChildEventListener( LINK( this, ScAccessibleDocument, WindowChildEventListener ));
@@ -1428,20 +1433,15 @@ ScAccessibleDocument::ScAccessibleDocument(
AddChild( pChildWin->GetAccessible(), false );
}
}
- ScViewData& rViewData = pViewShell->GetViewData();
- if (rViewData.HasEditView(eSplitPos))
+ ScViewData& rViewData = mpViewShell->GetViewData();
+ if (rViewData.HasEditView(meSplitPos))
{
- uno::Reference<XAccessible> xAcc = new ScAccessibleEditObject(this, rViewData.GetEditView(eSplitPos),
- pViewShell->GetWindowByPos(eSplitPos), GetCurrentCellName(), GetCurrentCellDescription(),
+ uno::Reference<XAccessible> xAcc = new ScAccessibleEditObject(this, rViewData.GetEditView(meSplitPos),
+ mpViewShell->GetWindowByPos(meSplitPos), GetCurrentCellName(), GetCurrentCellDescription(),
ScAccessibleEditObject::CellInEditMode);
AddChild(xAcc, false);
}
}
- maVisArea = GetVisibleArea_Impl();
-}
-
-void ScAccessibleDocument::Init()
-{
if(!mpChildrenShapes)
mpChildrenShapes = new ScChildrenShapes(this, mpViewShell, meSplitPos);
}